外部KubernetesクラスターをContainer Service for Kubernetes (ACK) に登録した後、ACKのバックアップセンターを使用してクラスター内のアプリケーションとデータをバックアップし、ACKクラスター内のバックアップファイルを復元できます。 このトピックでは、ACKのバックアップセンターを使用して、アプリケーションを外部KubernetesクラスターからACKクラスターに移行する方法について説明します。
前提条件
登録済みクラスターが作成され、Kubernetesバージョンが1.16以降の外部クラスターが登録済みクラスターを使用してACKに登録されます。 詳細については、「登録済みクラスターの作成」をご参照ください。
アプリケーションの復元に使用されるACKクラスターは、登録済みクラスターと同じリージョンにデプロイされ、クラスターのKubernetesバージョンは1.18以降です。 詳細については、「ACK管理クラスターの作成」および「ACK専用クラスターの作成」をご参照ください。
重要復元クラスターでは、Container Storage Interface (CSI) プラグインを使用する必要があります。 FlexVolumeを使用するクラスター、またはcsi-compatible-controllerとFlexVolumeを使用するクラスターでは、アプリケーションの復元はサポートされません。
バックアップセンターは、アプリケーションのバックアップと復元に使用されます。 復元タスクを実行する前に、復元クラスターにシステムコンポーネントをインストールして構成する必要があります。 例:
aliyun-acr-credential-helper: 復元クラスターにアクセス許可を付与し、acr-configurationを設定する必要があります。
alb-ingress-controller: ALBConfigを設定する必要があります。
登録済みクラスターと作成したACKクラスターに対して、クラスターバックアップ機能が有効になっています。 詳細については、「migrate-controllerのインストールと権限の付与」をご参照ください。
クラスターがcloud Enterprise network (CEN) 、Express Connect、またはVPN接続を使用して仮想プライベートクラウド (VPC) に接続されている場合、登録済みクラスターのObject Storage Service (OSS) バケットが存在するリージョンの内部ネットワークを指すルートが設定されます。 詳細については、「内部OSSエンドポイントとVIP範囲」をご参照ください。
Cloud Backupが有効化されています。 詳しくは、
参照Cloud Backup.「API を介したメトリックデータのアクセス」 をご参照ください。
シナリオ
ディザスタリカバリ用のCloud Backup: データのバックアップ、バックアップファイルの復元、アプリケーションとデータのクラウドへの移行が必要です。
使用上の注意
外部クラスターのデータをバックアップする前に、永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成して、ローカルボリュームをクラスターにマウントする必要があります。 Alibaba Cloudが提供するContainer Storage Interface (CSI) プラグインを使用すると、登録済みクラスターにボリュームをマウントできます。 詳細については、「ローカルボリューム」をご参照ください。
登録済みクラスター、ACKクラスター、およびOSSバケットは、同じリージョンにデプロイする必要があります。
始める前に
この例では、外部クラスターで実行されるMySQLアプリケーションがバックアップされ、バックアップファイルがACKクラスターに復元されます。 アプリケーションを移行する前に、登録済みクラスターとACKクラスターが同じリージョンにデプロイされ、両方ともクラスターのバックアップ機能が有効になっていることを確認する必要があります。 また、次の条件が満たされていることを確認する必要があります。
登録済みクラスター: Resource Access Management (RAM) ユーザーが作成され、OSSとCloud Backupにアクセスする権限が付与されます。 alibaba-addon-Secretという名前のシークレットが登録済みクラスターのcsdr名前空間に作成され、RAMユーザーのAccessKey IDとAccessKey secretが格納されます。
次のコマンドを実行して、alibaba-addon-secretシークレットが存在するかどうかを確認します。
kubectl get secret alibaba-addon-secret -n csdr
期待される出力:
alibaba-addon-secret Opaque 2 5d22h
ACKクラスター:
ACKマネージドクラスターを使用する場合は、Cloud Backupが有効化され、cnfs-OSS-**** という名前のossバケットが作成されていることを確認してください。
ACK専用クラスターを使用する場合は、クラスターのワーカーRAMロールにOSSとCloud Backupにアクセスする権限があることを確認してください。 詳細については、「ACK専用クラスターへのOSS権限の付与」および「ACK専用クラスターまたは登録済みクラスターへのクラウドバックアップ権限の付与」をご参照ください。
手順1: 外部クラスターにアプリケーションをデプロイする
次のコマンドを実行して、test1という名前の名前空間を作成します。
kubectl create namespace test1
という名前のファイルを作成します。app-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: 80 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> # Specify the name of the node that you want 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**** # Replace the value with the username that is used to log on to the MySQL application that you want to back up. password: dGVzdDEt**** # Replace the value with the password that is used to log on to the MySQL application that you want to back up.
次のコマンドを実行して、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という名前のリアルタイムバックアップタスクを作成します。 詳細については、「バックアップ計画の作成または即時バックアップ」をご参照ください。
[名前] を [MySQL] に設定し、前の手順で作成したバックアップボールトを [バックアップボールト] ドロップダウンリストから選択し、[バックアップ名前空間] ドロップダウンリストから [バックアップ名前空間] を選択します。
[アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。 MySQLバックアップタスクのステータスがInProgressからCompletedに変わると、MySQLアプリケーションとデータがバックアップされます。
ステップ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復元タスクのステータスがInProgressからCompletedに変わると、MySQLアプリケーションとデータが復元されます。
ACKクラスターで次のコマンドを実行して、MySQLアプリケーションがデプロイされているかどうかを確認します。
kubectl get pod -n test2 | grep mysql-sts
期待される出力:
mysql-sts-0 1/1 Running 0 4s
ACKクラスターで次のコマンドを実行して、データが復元されているかどうかを確認します。
次のコマンドを実行して、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 31m
次のコマンドを実行して、example-pvc PVCがMySQLアプリケーションにマウントされているかどうかを確認します。
kubectl describe pvc example-pvc -n test2 | grep "Used By"
期待される出力:
Used By: mysql-sts-0