ACK One の登録済みクラスターにサードパーティの Kubernetes クラスターを接続した後、Cloud Backup を介してアプリケーションとボリュームをバックアップし、Container Service for Kubernetes (ACK) クラスターで復元することで、クラウド間の移行を実現します。
この例では、MySQL アプリケーションをエンドツーエンドで移行します。
制限事項
移行を開始する前に、これらの制約を確認してください。移行中に違反があると、処理がブロックされます。
-
復元先クラスターには CSI プラグインが必須です。 FlexVolume を使用しているクラスター、または FlexVolume と共に
csi-compatible-controllerを使用しているクラスターは、復元をサポートしていません。 -
Kubernetes バージョンの要件。 ソースクラスター:Kubernetes 1.16 以降。ACK 復元先クラスター:Kubernetes 1.18 以降。
-
バックアップボールトの関連付けは 1 回のみ。 各バックアップボールトは、復元先クラスターに 1 回しか関連付けることができません。
登録済みクラスター、ACK クラスター、および OSS バケットは、同じリージョンに存在する必要があります。リージョンをまたいで配置すると、バックアップと復元が失敗します。
仕組み
-
サードパーティの Kubernetes クラスターを ACK One の登録済みクラスターに接続します。
-
Cloud Backup を介して、アプリケーションとそのボリュームを OSS バケットにバックアップします。
-
バックアップボールトをターゲットの ACK クラスターに関連付けます。
-
ACK クラスターでアプリケーションを復元します。このとき、StorageClass は Alibaba Cloud ネイティブのストレージクラスに自動的に変換されます。
前提条件
次の項目を確認してください:
-
ACK One の登録済みクラスターが、サードパーティの Kubernetes クラスター (Kubernetes 1.16 以降) に接続されていること。
-
登録済みクラスターと同じリージョンにあるACK マネージドクラスターまたはACK 専用クラスター (Kubernetes 1.18+)。
-
両方のクラスターでクラスターバックアップが有効になっていること。
-
Cloud Backup が有効化されていること。
-
登録済みクラスターが CEN、Express Connect、または VPN 経由で接続する場合、OSS バケットのリージョンの内部ネットワークへのルートが設定されます。「内部 OSS エンドポイントと VIP レンジ」をご参照ください。
復元する前に、必要な ACK クラスターアドオンをインストールして設定してください:
-
aliyun-acr-credential-helper:クラスターに権限を付与し、
acr-configurationを設定します。 -
alb-ingress-controller:
ALBConfigを設定します。
注意事項
-
ローカルボリュームをバックアップする場合は、PV と PVC を作成してマウントします。
-
サードパーティのオブジェクトストレージ、ファイルストレージ、またはブロックストレージをバックアップする場合は、CSI プラグインを介して PV と PVC でボリュームをマウントします。
事前準備
バックアップを実行する前に、これらを確認してください。
登録済みクラスター内
OSS と Cloud Backup の権限を持つ Resource Access Management (RAM) ユーザーが存在し、そのユーザーの AccessKey ID と Secret を含む alibaba-addon-secret という名前の Secret が csdr 名前空間に存在することを確認します:
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 の権限が付与されています。詳細については、「migrate-controller のインストールと権限付与」をご参照ください。
ステップ 1:外部 Kubernetes クラスターにアプリケーションをデプロイ
すべてのコマンドは、外部 Kubernetes クラスター (登録済みクラスターに接続されているソースクラスター) に対して実行してください。
この例では、mysql-pvc という名前の PVC、mysql-pv という名前の PV、および /mnt のマウントパスを持つ MySQL アプリケーションを使用します。
-
test1という名前の名前空間を作成します:kubectl -n test1 get pod | grep mysql-sts -
CSI プラグインを使用して、PV と PVC で MySQL アプリケーションのボリュームをマウントします。ご利用のクラウドプロバイダーの CSI ドキュメントを確認してください。CSI がサポートされていない場合は、登録済みクラスターに接続して、代わりに Alibaba Cloud CSI プラグインを使用します。
-
アプリケーションが実行中であることを確認します:
kubectl -n test1 get pod | grep mysql-sts想定される出力:
mysql-sts-0 1/1 Running 0 1m02s -
PV に CSI フィールドが含まれていることを確認します:
kubectl -n test1 get pv mysql-pv -oyaml想定される出力 (抜粋):
csi: driver: **** volumeAttributes: xxxx: xxxx xxxx: xxxx volumeHandle: mysql-pv -
MySQL コンテナにログインします:
kubectl -n test1 exec -it mysql-sts-0 -- /bin/bash -
後で復元を確認するためにテストファイルを作成します:
cd /mnt && touch test && ls想定される出力:
test
データ整合性を確保するため、バックアップを開始する前に書き込み操作を一時停止してください。
ステップ 2:登録済みクラスターでアプリケーションをバックアップ
すべての操作は、ACK コンソールの登録済みクラスターに対して実行してください。
-
バックアップボールトが存在しない場合は、作成します。詳細については、「バックアップボールトの作成」をご参照ください。詳細については、Cloud Backup をご参照ください。
-
登録済みクラスターで
mysql-backupという名前のオンデマンドバックアップタスクを作成します。詳細については、「バックアップタスクの作成」をご参照ください。パラメーター 値 名前 mysql-backupバックアップ保管庫 作成したボールトを選択 バックアップ名前空間 test1ボリュームバックアップ 永続データを含めるには [ボリュームバックアップ] を選択 -
[アプリケーションバックアップ] ページで、[バックアップレコード] をクリックします。
mysql-backupが [進行中] から [完了] に変わるまで待ちます。
ステップ 3:バックアップボールトを ACK クラスターに関連付け
すべての操作は、ACK コンソールの ACK クラスターに対して実行してください。
新しく作成したバックアップボールトを使用する場合、またはこの ACK クラスターにまだ関連付けていない場合は、復元する前にボールトを関連付ける必要があります。各ボールトは 1 回しか関連付けることができません。初期化後、バックアップは自動的に同期されます。
-
[アプリケーションバックアップ] ページで、[復元] をクリックします。
-
[復元] パネルで、[名前] を入力し、[バックアップボールト] を選択して、[バックアップボールトの初期化] をクリックします。
-
初期化後、バックアップボールトから解凍タスクを選択し、[OK] をクリックします。
-
[バックアップ履歴] タブで、リストに
mysql-backupが表示されるまで待ちます。
ステップ 4:ACK クラスターでアプリケーションを復元
すべての操作は、ACK コンソールの ACK クラスターに対して実行してください。
復元中、ACK クラスターは MySQL アプリケーション用に StorageClass が alibabacloud-cnfs-nas (Alibaba Cloud NAS) の PVC を動的にマウントし、新しい PV をプロビジョニングして、関連付けられたボリュームにデータを復元します。
-
mysql-restoreという名前の復元タスクを作成します。詳細については、「アプリケーションとボリュームの復元」をご参照ください。パラメーター 値 名前 mysql-restoreバックアップボールト 作成したボールトを選択 バックアップの選択 mysql-backup名前空間のリセット test1をtest2StorageClass 変換 mysql-pvcにはalibabacloud-cnfs-nas -
[復元記録の表示] をクリックします。
mysql-restoreが [進行中] から [完了] に変わるまで待ちます。 -
アプリケーションが実行中であることを確認します:
kubectl -n test2 get pod | grep mysql-sts想定される出力:
mysql-sts-0 1/1 Running 0 4s -
データが復元されたことを確認します:
-
PVC の StorageClass が
alibabacloud-cnfs-nasであることを確認します:kubectl -n test2 get pvc | grep mysql-pvc想定される出力:
mysql-pvc Bound nas-**** 25Gi RWO alibabacloud-cnfs-nas 3m24s -
PVC が MySQL Pod にマウントされていることを確認します:
kubectl -n test2 describe pvc mysql-pvc | grep "Used By"想定される出力:
Used By: mysql-sts-0 -
MySQL コンテナにログインし、テストデータを確認します:
kubectl -n test2 exec -it mysql-sts-0 -- /bin/bashcd /mnt && ls想定される出力:
testテストファイルが存在することから、データが正常に復元されたことが確認できます。
-
次のステップ
-
詳細なバックアップと復元の操作については、「登録済みクラスターの概要」をご参照ください。
-
アプリケーションの互換性のために、追加の ACK システムコンポーネントを設定します。詳細については、「migrate-controller のインストールと権限付与」をご参照ください。