バックアップセンターを使用して、ACK One 登録済みクラスターにデプロイされているアプリケーションとデータをバックアップし、オンラインの ACK クラスターに復元することで、オフライン環境のアプリケーションを迅速にオンライン環境へ移行できます。本トピックでは、ACK One 登録済みクラスターに接続されたオフラインクラスターから、オンラインの ACK クラスターへアプリケーションを移行する方法について説明します。
前提条件
ACK One 登録済みクラスターが作成され、ローカルデータセンタ―クラスターに接続されていること。自己管理型 Kubernetes クラスターのバージョンは 1.16 以上である必要があります。
復元先クラスターとして使用する ACK マネージドクラスターが作成されていること。復元先クラスターは登録済みクラスターと同じリージョン内にある必要があります。Kubernetes バージョン 1.18 以上を推奨します。
重要送信先クラスターは Container Storage Interface (CSI) ストレージプラグインを使用している必要があります。csi-compatible-controller コンポーネント経由で FlexVolume ストレージプラグインを使用しているクラスターや、CSI および FlexVolume の両方を使用しているクラスターにはデータを復元できません。
バックアップセンターはビジネスアプリケーションのバックアップと復元に特化しています。復元ジョブを開始する前に、送信先クラスターに必要なシステムコンポーネントをインストールおよび構成しておく必要があります。例:
ACR パスワードレスコンポーネント: 送信先クラスターに対して権限付与および acr-configuration の構成が必要です。
ALB イングレスコンポーネント: 事前に ALBConfig などの設定を行っておく必要があります。
ACK One 登録済みクラスターおよび ACK クラスターの両方にバックアップサービスコンポーネントがインストールされ、権限が構成されていることを確認してください。
Cloud Enterprise Network (CEN)、Express Connect、または VPN ゲートウェイ経由で Virtual Private Cloud (VPC) に接続されているACK One 登録済みクラスターについては、Object Storage Service (OSS) の内部エンドポイントへのルートが構成されていることを確認してください。詳細については、「内部エンドポイントおよびバケットドメイン名経由での OSS アクセス」をご参照ください。
利用シーン
クラウドバックアップとディザスタリカバリ:バックアップ、ディザスタリカバリ、移行を統合したソリューションにより、アプリケーションをクラウドへ迅速に移行し、データのディザスタリカバリを実現できます。詳細については、「登録済みクラスターの概要」をご参照ください。
注意事項
外部クラスターからデータをバックアップする際は、ローカルボリュームを PV および PVC としてマウントする必要があります。Alibaba Cloud CSI プラグインはACK One 登録済みクラスター上でボリュームのマウントをサポートしています。詳細については、「ローカルボリューム」をご参照ください。
ACK One 登録済みクラスター、ACK クラスター、および OSS バケットは同じリージョン内にある必要があります。
事前準備
本トピックでは MySQL アプリケーションを例に、外部クラスターへのアプリケーションのデプロイおよびバックアップ、その後の ACK クラスターへの復元方法を説明します。アプリケーションを移行する前に、ACK One 登録済みクラスターおよび ACK クラスターが同じリージョン内にあり、両クラスターでクラスターバックアップ機能が有効になっており、以下の要件を満たしていることを確認してください。
ACK One 登録済みクラスターについて:RAM ユーザーを作成し、OSS およびCloud Backup に対する権限を付与します。その後、その RAM ユーザーの AccessKey ID および AccessKey Secret を使用して、ACK One 登録済みクラスターの
csdr名前空間内にalibaba-addon-secretという名前のシークレットを作成します。次のコマンドを実行して、
alibaba-addon-secretシークレットが存在するか確認します。kubectl get secret alibaba-addon-secret -n csdr期待される出力:
alibaba-addon-secret Opaque 2 5d22hACK クラスターについて:
ACK マネージドクラスターを使用する場合、Cloud Backup サービスが有効になっており、名前が
cnfs-oss-****で始まるバケットが作成されていることを確認してください。ACK 専用クラスターを使用する場合、ワーカー RAM ロールが OSS およびCloud Backup にアクセスする権限を持っていることを確認してください。詳細については、「ACK 専用クラスターへの OSS 権限付与」および「ACK 専用クラスターまたは登録済みクラスターへの Cloud Backup 権限付与」をご参照ください。
ステップ 1:外部クラスターへのアプリケーションデプロイ
次のコマンドを実行して、
test1名前空間を作成します。kubectl create namespace test1バックアップ対象のノード上で、次のコマンドを実行してマウントパスを作成します。
mkdir /mnt/diskapp-mysql.yaml という名前のファイルを作成し、以下の内容を記述します。
<YOUR-HOSTNAME>はバックアップ対象のノード名に置き換えます。usernameおよびpasswordの値は、MySQL アプリケーションのユーザー名およびパスワードを Base64 エンコードした値に置き換えてください。apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-sts namespace: test1 spec: selector: matchLabels: app: mysql-sts serviceName: mysql-sts template: metadata: labels: app: mysql-sts spec: containers: - name: mysql-sts image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql-sts volumeMounts: - name: mysql mountPath: /var/lib/mysql volumes: - name: mysql persistentVolumeClaim: claimName: example-pvc --- apiVersion: v1 kind: PersistentVolume metadata: name: example-pv spec: capacity: storage: 100Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage local: path: /mnt/disk nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <YOUR-HOSTNAME> # The name of the node to back up. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc namespace: test1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi storageClassName: local-storage volumeName: example-pv --- apiVersion: v1 kind: Secret metadata: name: mysql-pass namespace: test1 type: Opaque data: username: dGVz**** # The Base64-encoded username of the MySQL application to be backed up. Replace the value with the actual username. password: dGVzdDEt**** # The Base64-encoded password of the MySQL application to be backed up. Replace the value with the actual password.次のコマンドを実行して、MySQL アプリケーションをデプロイし、ローカルディスクを PV としてマウントし、関連する PV および PVC を作成します。
kubectl create -f app-mysql.yaml期待される出力:
statefulset.apps/mysql-sts created persistentvolume/example-pv created persistentvolumeclaim/example-pvc created secret/mysql-pass created次のコマンドを実行して、MySQL アプリケーションが正常にデプロイされたか確認します。
kubectl get pod -n test1 | grep mysql-sts期待される出力:
mysql-sts-0 1/1 Running 1 (4m51s ago) 4m58s
ステップ 2:アプリケーションとデータのバックアップ
外部クラスターはACK One 登録済みクラスターに接続されています。ACK One 登録済みクラスター上でバックアップタスクを実行できます。
ACK One 登録済みクラスター内にバックアップボールトを作成します。詳細については、「バックアップボールトの作成」をご参照ください。
ACK One 登録済みクラスターで、名前を
mysqlとするインスタントバックアップを作成します。詳細については、「バックアッププランまたはインスタントバックアップを作成する」をご参照ください。名前に
mysqlを指定します。バックアップボールトには、前のステップで作成したボールトを選択します。バックアップの名前空間には test1 を選択します。アプリケーションのバックアップページで、バックアップ履歴タブをクリックし、
mysql-backupタスクのステータスを確認します。ステータスが InProgress から Completed に変化すると、バックアップが完了します。
ステップ 3:ACK クラスターへのアプリケーション復元
このセクションでは、ACK クラスターへの MySQL アプリケーションの復元方法と、そのストレージを alibabacloud-cnfs-nas StorageClass に変換する手順を説明します。
mysql-restoreという名前の復元タスクを作成し、MySQL アプリケーションを ACK クラスターのtest2名前空間にデプロイし、StorageClass をalibabacloud-cnfs-nasに変換します。詳細については、「アプリケーションとデータボリュームの復元」をご参照ください。パラメーター
値
名前
mysql-restore
バックアップボールト
作成したバックアップボールトを選択します。リポジトリの初期化ボタンが表示された場合は、クリックしてバックアップレコードがクラスターに同期されるまで待ちます。
バックアップを選択
mysql
名前空間のリセット
test1 から test2 へ名前空間を再マッピングします。
ストレージタイプの変換
変換対象の PVC リストで、example-pvc に対して alibabacloud-cnfs-nas StorageClass を選択します。
今すぐ復元するの右側にある復元履歴の表示をクリックします。タスクのステータスが InProgress から Completed に変化すると、復元が完了します。
ACK クラスター内で次のコマンドを実行し、MySQL アプリケーションが正常にデプロイされたか確認します。
kubectl get pod -n test2 | grep mysql-sts期待される出力:
mysql-sts-0 1/1 Running 0 4sACK クラスター内で次のコマンドを実行し、データが正常に復元されたか確認します。
データが
alibabacloud-cnfs-nasStorageClass に復元されたことを確認します。kubectl get pvc -n test2 | grep example-pvc期待される出力:
example-pvc Bound nas-acde4acd-59b6-4332-90af-b74ef6****** 25Gi RWO alibabacloud-cnfs-nas 31mexample-pvcが MySQL アプリケーションにマウントされていることを確認します。kubectl describe pvc example-pvc -n test2 | grep "Used By"期待される出力:
Used By: mysql-sts-0