Kubernetes の StorageClass 間移行、Rainbond のデフォルト SC の切り替え

ホストにインストールされている、または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 ストレージに移行する方法について説明します。移行は大まかに次の手順に分かれています。

  1. 外部 NFS ストレージを展開し、K8 に接続します。
  2. NFS に保存されたデータをバックアップします。
  3. バックアップ データを復元し、Rainbond のデフォルト ストレージを外部ストレージに切り替えます。

知らせ:

  • 実行中のアプリケーションを閉じて、増分データによって引き起こされるデータの不整合を回避します。
  • コンポーネントによってマウントされるストレージは共有ストレージである必要があり、他のストレージは個別に移行する必要があります。

NFS を展開して K8 に接続する

外部 NFS ストレージの場合は、NFS デュアル マシン ホット バックアップまたはその他のソリューションの展開を選択できますが、ここでは説明しません。シングル ノード NFS を例に挙げます。

Centos に NFS を展開する

  1. インストールnfs-utils
yum install -y nfs-utils
  1. 共有ディレクトリを作成する
mkdir -p /data
  1. /etc/exportsファイルを編集し、次の内容を追加します。
$ vim /etc/exports

/data *(rw,sync,insecure,no_subtree_check,no_root_squash)
  1. 構成が完了したら、次のコマンドを実行して NFS サービスを開始します。
systemctl enable nfs-server
systemctl start nfs-server
  1. NFS が利用可能であることを確認する
showmount -e 172.20.251.94

K8s に NFS クライアントを導入する

次に、外部 NFS ストレージを Kubernetes に接続し、Kubernetes に NFS Client Provisioner をデプロイします。

  1. Helmコマンドのインストール

  2. Helm チャート リポジトリを追加

helm repo add rainbond https://openchart.goodrain.com/goodrain/rainbond
  1. 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
  1. 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-grdatarbd-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 のデフォルトのストレージを変更する

  1. rainbondclusterCRDリソースを変更して追加するstorageClassName
$ kubectl edit rainbondcluster -n rbd-system

spec:
  rainbondVolumeSpecRWX:
    storageClassName: nfs-client #由 NFS-Client-Provisioner 创建的 sc
  1. rainbondvolumes CRD リソースを次storageClassNameのように変更します。nfs-client
$ kubectl edit rainbondvolumes -n rbd-system

spec:
  storageClassName: nfs-client
  1. デフォルトの NFS に基づいて Rainbond によって作成された StorageClass を削除します。rainbondsssc rainbondslsc
kubectl delete sc rainbondsssc rainbondslsc
  1. 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
  1. 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-grdatarbd-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
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/rainbond/blog/10124668