外部 Kubernetes クラスタを Container Service for Kubernetes (ACK)に登録すると、ACK のバックアップセンターを使用して、クラスタ内のアプリケーションとデータをバックアップし、ACK クラスタにバックアップファイルをリストアできます。このトピックでは、ACK のバックアップセンターを使用して、外部 Kubernetes クラスタから ACK クラスタにアプリケーションを移行する方法について説明します。
前提条件
登録済みクラスタが作成され、Kubernetes バージョンが 1.16 以降の外部クラスタが登録済みクラスタに登録されている。
ACK マネージドクラスターを作成するアプリケーション復元のために、登録済みクラスターと同じリージョンに ACK マネージドクラスターが作成されます。 Kubernetes 1.18 以降を使用することをお勧めします。
重要リストアクラスタは、Container Storage Interface (CSI)プラグインを使用する必要があります。FlexVolume を使用するか、csi-compatible-controller と FlexVolume を使用するクラスタでは、アプリケーションのリストアはサポートされていません。
バックアップセンターは、アプリケーションのバックアップとリストアに使用されます。リストアタスクを実行する前に、リストアクラスタにシステムコンポーネントをインストールして構成する必要があります。例:
aliyun-acr-credential-helper: リストアクラスタに権限を付与し、acr-configuration を構成する必要があります。
alb-ingress-controller: ALBConfig を構成する必要があります。
バックアップコンポーネント migrate-controller がインストールされ、権限が付与されている(登録済みクラスタと作成した ACK クラスタに対して)。
クラスタが Cloud Enterprise Network (CEN)、Express Connect、または VPN 接続を使用して VPC に接続されている場合、登録済みクラスタの Object Storage Service (OSS)バケットが存在するリージョンの内部ネットワークを指すルートが構成されている。詳細については、「内部 OSS エンドポイントと VIP 範囲」をご参照ください。
シナリオ
Cloud Backup for ディザスタリカバリ: 統合バックアップ、ディザスタリカバリ、および移行ソリューションにより、アプリケーションのクラウドへの移行とデータディザスタリカバリを迅速に実現します。詳細については、「登録済みクラスターの概要」をご参照ください。
注意事項
外部クラスタのデータをバックアップする前に、永続ボリューム(PV)と永続ボリューム要求(PVC)を作成して、ローカルボリュームをクラスタにマウントする必要があります。Alibaba Cloud が提供する Container Storage Interface (CSI)プラグインを使用すると、登録済みクラスタにボリュームをマウントできます。詳細については、「ローカルストレージボリューム」をご参照ください。
登録済みクラスタ、ACK クラスタ、および OSS バケットは、同じリージョンにデプロイする必要があります。
始める前に
この例では、外部クラスタで実行されている MySQL アプリケーションをバックアップし、次に ACK クラスタでバックアップファイルをリストアします。アプリケーションを移行する前に、登録済みクラスタと ACK クラスタが同じリージョンにデプロイされており、両方にクラスタバックアップ機能が有効になっていることを確認する必要があります。また、次の条件が満たされていることを確認する必要があります。
登録済みクラスタ:Resource Access Management (RAM)ユーザーが作成され、OSS および Cloud Backup にアクセスするための権限が付与されている。登録済みクラスタの csdr 名前空間に alibaba-addon-secret という名前のシークレットが作成され、RAM ユーザーの AccessKey ID と AccessKey シークレットが格納されている。
次のコマンドを実行して、alibaba-addon-secret シークレットが存在するかどうかを確認します。
kubectl get secret alibaba-addon-secret -n csdr期待される出力:
alibaba-addon-secret Opaque 2 5d22hACK クラスタ:
ACK マネージドクラスターを使用する場合は、Cloud Backup が有効化されており、cnfs-oss-**** という名前の OSS バケットが作成されていることを確認します。
ACK 専用クラスターを使用する場合は、クラスタのワーカー RAM ロールに OSS および Cloud Backup にアクセスするための権限があることを確認します。詳細については、「ACK 専用クラスターに OSS 権限を付与する」および「ACK 専用クラスターまたは登録済みクラスタに Cloud Backup 権限を付与する」をご参照ください。
ステップ 1:外部クラスタにアプリケーションをデプロイする
次のコマンドを実行して、test1 という名前のネームスペースを作成します。
kubectl create namespace test1app-mysql.yaml という名前のファイルを作成し、次の内容をファイルに追加します。
<your-hostname>を、バックアップするノードの名前に置き換えます。usernameパラメーターとpasswordパラメーターを、アプリケーションへのログインに使用するユーザー名とパスワードに設定します。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: mysql:5.7 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> # バックアップするノードの名前を指定します。 --- 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**** # バックアップする MySQL アプリケーションにログインするために使用されるユーザー名に置き換えます。 password: dGVzdDEt**** # バックアップする MySQL アプリケーションにログインするために使用されるパスワードに置き換えます。次のコマンドを実行して、MySQL アプリケーション、PV、および PVC を作成します。PV と PVC は、ローカルディスクを MySQL アプリケーションにマウントするために使用されます。
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:外部クラスタの MySQL アプリケーションとデータをバックアップする
外部クラスタを ACK に登録し、登録済みクラスタでバックアップ操作を実行できます。
登録済みクラスタにバックアップボールトを作成します。詳細については、「バックアップボールトを作成する」をご参照ください。
登録済みクラスタに MySQL という名前のリアルタイムバックアップタスクを作成します。詳細については、「バックアッププランを作成する、または即座にバックアップする」をご参照ください。
[名前] を MySQL に設定し、前の手順で作成したバックアップボールトを [バックアップボールト] ドロップダウンリストから選択し、[test1] を [バックアップネームスペース] ドロップダウンリストから選択します。
[アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。 mysql-backup タスクのステータスが [処理中] から [完了] に変わると、データがバックアップされます。
ステップ 3:ACK クラスタにバックアップファイルをリストアする
この例では、外部クラスタの StorageClass が alibabacloud-cnfs-nas に変換されます。この例では、ACK クラスタに MySQL アプリケーションのバックアップファイルをリストアする方法を示します。次の手順を実行します。
mysql-restore という名前のリストアタスクを作成して、ACK クラスタの test2 ネームスペースに MySQL アプリケーションをデプロイし、その StorageClass を alibabacloud-cnfs-nas に変換します。詳細については、「アプリケーションとボリュームをリストアする」をご参照ください。
パラメーター
例
[名前]
mysql-restore。
[バックアップボールト]
作成したバックアップボールトを選択します。バックアップボールトを選択した後、[バックアップボールトを初期化する] をクリックして、リストアクラスタをバックアップボールトに関連付けます。
[バックアップを選択]
MySQL を選択します。
[ネームスペースをリセット]
[test1] から [test2] に変更します。
[StorageClass の変換]
変換された PVC のリストで、[example-pvc] PVC の [alibabacloud-cnfs-nas] StorageClass を選択します。
[リストア] の右側にある [リストアレコードを表示] をクリックします。 mysql-restore リストアタスクのステータスが [処理中] から [完了] に変わると、MySQL アプリケーションとデータがリストアされます。
ACK クラスタで次のコマンドを実行して、MySQL アプリケーションがデプロイされているかどうかを確認します。
kubectl get pod -n test2 | grep mysql-sts期待される出力:
mysql-sts-0 1/1 Running 0 4sACK クラスタで次のコマンドを実行して、データがリストアされているかどうかを確認します。
PVC の StorageClass が alibaba-cnfs-nas に変更されているかどうかを確認します。
kubectl get pvc -n test2 | grep example-pvc期待される出力:
example-pvc Bound nas-acde4acd-59b6-4332-90af-b74ef6****** 25Gi RWO alibabacloud-cnfs-nas 31mexample-pvc PVC が MySQL アプリケーションにマウントされているかどうかを確認します。
kubectl describe pvc example-pvc -n test2 | grep "Used By"期待される出力:
Used By: mysql-sts-0