ホストにインストールされている、またはKubernetes にインストールされているRainbond クラスター (すべてデフォルトのパラメーターでインストールされている) の場合、デフォルトの共有ファイル ストレージは NFS であり、ポッド モードの Kubernetes で実行されますが、この方法には次のような避けられない問題もいくつかあります。 SVC が通信できない、クラスターがストレージをマウントできないため使用できなくなる、シャットダウン時にサーバーがスタックしてumount
正常にシャットダウンできない、などです。
もちろん、共有ファイル ストレージを切り替える必要もあります。Rainbond を初めてインストールするときは、ほとんどがデフォルトのインストールを使用します。一定期間使用した後、外部 NFS または NAS に切り替えたいと考えます。クラウドなど
ネイティブ Kubernetes クラスターでは、StorageClass を通じて作成された PVC のストレージ バックエンドを変更できません。PV と PVC を削除し、新しい StorageClass を通じて新しい PVC を作成し、データを移行して、PVC を再マウントする必要があります。PVC の数が多い場合は、複数回の繰り返し操作が必要になります。
Rainbond も StorageClass を通じて PVC を作成しますが、ネイティブ Kubernetes と比較して、PV、PVC、再マウントの作成手順、および繰り返しの操作が節約されます。Rainbond では、基礎となるストレージ クラスを置き換えるだけで済みます。次に、Rainbond によって作成されたディレクトリ全体を移行し、最後にページ上でマウントを再度変更して移行を完了します。
この記事では、Rainbond のデフォルトの NFS ストレージを外部 NFS ストレージに移行する方法について説明します。移行は大まかに次の手順に分かれています。
- 外部 NFS ストレージを展開し、K8 に接続します。
- NFS に保存されたデータをバックアップします。
- バックアップ データを復元し、Rainbond のデフォルト ストレージを外部ストレージに切り替えます。
知らせ:
- 実行中のアプリケーションを閉じて、増分データによって引き起こされるデータの不整合を回避します。
- コンポーネントによってマウントされるストレージは共有ストレージである必要があり、他のストレージは個別に移行する必要があります。
NFS を展開して K8 に接続する
外部 NFS ストレージの場合は、NFS デュアル マシン ホット バックアップまたはその他のソリューションの展開を選択できますが、ここでは説明しません。シングル ノード NFS を例に挙げます。
Centos に NFS を展開する
- インストール
nfs-utils
yum install -y nfs-utils
- 共有ディレクトリを作成する
mkdir -p /data
/etc/exports
ファイルを編集し、次の内容を追加します。
$ vim /etc/exports
/data *(rw,sync,insecure,no_subtree_check,no_root_squash)
- 構成が完了したら、次のコマンドを実行して NFS サービスを開始します。
systemctl enable nfs-server
systemctl start nfs-server
- NFS が利用可能であることを確認する
showmount -e 172.20.251.94
K8s に NFS クライアントを導入する
次に、外部 NFS ストレージを Kubernetes に接続し、Kubernetes に NFS Client Provisioner をデプロイします。
-
Helmコマンドのインストール
-
Helm チャート リポジトリを追加
helm repo add rainbond https://openchart.goodrain.com/goodrain/rainbond
- NFS クライアント プロビジョナーのインストール
helm install nfs-client-provisioner rainbond/nfs-client-provisioner \
--set nfs.server=172.20.251.94 \
--set nfs.path=/data \
--version 1.2.8
- NFS クライアントが使用可能であることを確認し、PVC 認証を作成します。
$ vim test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-claim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: nfs-client
$ kubectl apply -f test-pvc.yaml
PVC ステータスが Bound であれば正常です。
デフォルトのNFSデータをバックアップする
すべての PVC を表示しますrbd-system
。
kubectl get pvc -n rbd-system
PVC名 | 説明する |
---|---|
データ | ストレージが正常かテスト デフォルトで作成されるPVC(役に立たない) |
データ-nfs-provisions-0 | NFS ポッドによって使用される PVC のデフォルトのパスは、ホスト マシンの下にあります/opt/rainbond/data/nfs 。 |
データ rbd モニター 0 | 監視データを保存します。(オプション) |
rbd-api | APIリクエストのリクエストログを保存します。(オプション) |
rbd-カオスキャッシュ | ビルドコンポーネントを保存するためのキャッシュ (オプション) |
rbd-cpt-grdata | ストレージ プラットフォーム上のすべてのコンポーネントは、共有ストレージ データとコンポーネント ログをマウントします。(しなければならない) |
rbd-db-rbd-db-0 | MySQL データはデフォルトでローカルに保存され、NFS には保存されません。 |
rbd-etcd-rbd-etcd-0 | etcd データはデフォルトでローカルに保存され、NFS には保存されません。 |
RBDハブ | ミラーデータの保存 (必須) |
上記のデータのうち移行したい重要なデータにはrbd-cpt-grdata
、rbd-hub
たとえば、VOLUME
名前に従ってデフォルトの保存ディレクトリ/opt/rainbond/data/nfs
を検索しますpvc-9ec619e3-1e20-4d7a-b744-aa04088fb6c3
。
rsync 同期ツールを使用して、新しい NFS ストレージ サーバーにデータを同期します。次のコマンドに従って同期を開始し、実際の状況に応じてコマンドを変更します。
rsync -avP /opt/rainbond/data/nfs/pvc-9ec619e3-1e20-4d7a-b744-aa04088fb6c3 [email protected]:/data
rsync -avP /opt/rainbond/data/nfs/pvc-d0bf09ca-5543-4050-bd08-b02ebb593b4e [email protected]:/data
注: データの同期が完了したら、データの整合性を必ず確認してください。
Rainbond ストレージの切り替え
Rainbond のデフォルトのストレージを変更する
rainbondcluster
CRDリソースを変更して追加するstorageClassName
$ kubectl edit rainbondcluster -n rbd-system
spec:
rainbondVolumeSpecRWX:
storageClassName: nfs-client #由 NFS-Client-Provisioner 创建的 sc
rainbondvolumes
CRD リソースを次storageClassName
のように変更します。nfs-client
$ kubectl edit rainbondvolumes -n rbd-system
spec:
storageClassName: nfs-client
- デフォルトの NFS に基づいて Rainbond によって作成された StorageClass を削除します。
rainbondsssc
rainbondslsc
kubectl delete sc rainbondsssc rainbondslsc
rbd-system
ネームスペースの下の古い PVCを削除します。PVC を使用している POD がまだ存在するため、この時点では削除されません。ctrl c
最初に終了してください。
kubectl delete pvc data data-rbd-monitor-0 rbd-api rbd-chaos-cache rbd-cpt-grdata rbd-hub -n rbd-system
- Rainbond コンポーネントのコントローラーを削除し、
rainbond-operator
コントロール PVC を再作成します。
kubectl delete deploy rbd-api -n rbd-system
kubectl delete ds rbd-chaos -n rbd-system
kubectl delete sts rbd-monitor -n rbd-system
kubectl delete deploy rbd-worker -n rbd-system
kubectl delete deploy rbd-hub -n rbd-system
kubectl delete deploy rbd-resource-proxy -n rbd-system
kubectl delete sts rbd-eventlog -n rbd-system
kubectl delete ds rbd-node -n rbd-system
kubectl delete pod -l release=rainbond-operator -n rbd-system
すべての POD が再作成されるまで待ちます。作成が完了すると、Rainbond プラットフォームにアクセスして正常に動作できるようになります。
データ復旧
次に、以前にバックアップしたデータを新しく作成した PVC に復元します。
このときrbd-cpt-grdata
、rbd-hub
新しく作成されたディレクトリ内のデータは自動的に作成されますので、先に削除してください。
rm -rf /data/rbd-system-rbd-cpt-grdata-pvc-44167209-1006-4de5-9801-afcce996449c/*
rm -rf /data/rbd-system-rbd-hub-pvc-c326b89f-7c0e-4990-a8e2-31472799ccc8/*
次に、次のコマンドのように、バックアップrbd-cpt-grdata
とデータをそれぞれ新しいディレクトリに同期します。rbd-hub
rsync -avP /data/pvc-9ec619e3-1e20-4d7a-b744-aa04088fb6c3/* /data/rbd-system-rbd-cpt-grdata-pvc-44167209-1006-4de5-9801-afcce996449c
rsync -avP /data/pvc-d0bf09ca-5543-4050-bd08-b02ebb593b4e /data/rbd-system-rbd-hub-pvc-c326b89f-7c0e-4990-a8e2-31472799ccc8
注: データの同期が完了したら、データの整合性を必ず確認してください。
Rainbond の一部のコンポーネントの POD をリセットして有効にします。
kubectl delete pod -l name=rbd-api -n rbd-system
kubectl delete pod -l name=rbd-chaos -n rbd-system
kubectl delete pod -l name=rbd-monitor -n rbd-system
kubectl delete pod -l name=rbd-worker -n rbd-system
kubectl delete pod -l name=rbd-hub -n rbd-system
kubectl delete pod -l name=rbd-resource-proxy -n rbd-system
kubectl delete pod -l name=rbd-eventlog -n rbd-system
kubectl delete pod -l name=rbd-node -n rbd-system
Rainbond のコンポーネント ストレージを変更する
基盤となるストレージを交換した後、現時点では Rainbond 上のコンポーネントのストレージは変更されていないため、Rainbond のコンポーネントに入って現在のストレージを削除し、再度追加する必要があります。
マウント パスとストレージ タイプは変更されません。現在の構成を削除し、新しい同じ構成を追加するだけです。
これでストレージの切り替えが完了しますので、後ほどアプリケーションデータが揃っているか確認してください。
デフォルトのNFSストレージリソースを削除します(オプション)
CRD リソースを変更し、nfs-provisioner
レプリカを 0 に設定します。
$ kubectl edit rbdcomponent nfs-provisioner -n rbd-system
spec:
replicas: 0
nfs-provisioner
コントローラーの削除
kubectl delete sts nfs-provisioner -n rbd-system
nfs-provisionerのPVとPVCを削除します
kubectl delete pvc data-nfs-provisioner-0 -n rbd-system
kubectl delete pv nfs-provisioner
ホストマシン上のNFSデータストレージディレクトリを削除します。
rm -rf /opt/rainbond/data/nfs
Lei Jun氏はXiaomiのThePaper OSの完全なシステムアーキテクチャを発表し、最下層が完全に再構築されたと述べ、
Yuque氏は10月23日に障害の原因と修復プロセスを発表
Microsoft CEOのナデラ氏「Windows Phoneとモバイル事業を放棄したのは間違った決断だった」 .
Java 11 と Java 17 の使用率は両方とも Java 8 を上回りました.
Hugging Face は
Yuque へのアクセスを制限されました. ネットワーク障害は約 10 時間続きましたが、現在は通常に戻っています.
国家データ局が
Oracle を正式に発表しました. Visual Studio 用の Java 開発拡張機能を開始しましたCode.Musk
: Wikipedia が「Weiji Encyclopedia」に名前変更されたら 10 億寄付 USDMySQL
8.2.0 GA