サードパーティのクラウドプラットフォーム上のKubernetesクラスターを登録済みクラスターに接続した後、バックアップセンターを使用して、元のKubernetesクラスター内のアプリケーションとデータをバックアップできます。 その後、Container Service for Kubernetes (ACK) クラスター内のアプリケーションとデータを復元できます。 これにより、クラウドプラットフォーム間でアプリケーションを移行できます。 このトピックでは、バックアップセンターを使用してアプリケーションを登録済みクラスターからACKクラスターに移行する方法について説明します。
前提条件
登録済みクラスターは、Alibaba Cloud Distributed Cloud Container Platform (ACK One) で作成され、Kubernetes 1.16以降を実行するサードパーティのクラウドプラットフォーム上のKubernetesクラスターに接続されます。 詳細については、「登録済みクラスターの作成」をご参照ください。
アプリケーションの復元に使用される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: バックアップ、ディザスタリカバリ、および移行ソリューションを統合して、クラウドへのアプリケーションの移行とデータディザスタリカバリを迅速に実現します。 詳細については、「登録済みクラスターの概要」をご参照ください。
使用上の注意
ローカルボリュームをバックアップするときに、永続ボリュームと永続ボリュームクレーム (PVC) を作成してローカルボリュームをマウントできます。
サードパーティのサービスプロバイダーが提供するオブジェクトストレージ、ファイルストレージ、またはブロックストレージをバックアップする場合、CSIプラグインを使用して、PVおよびPVCを含むボリュームをマウントする必要があります。
登録済みクラスター、ACKクラスター、およびObject Storage Service (OSS) バケットは、同じリージョンにデプロイする必要があります。
アプリケーションデータの一貫性を確保するには、バックアップが完了するまでビジネスの書き込み操作を一時停止します。
準備
このトピックでは、MySQLアプリケーションを例として使用します。 アプリケーションが外部Kubernetesクラスターにデプロイされたら、クラスターを登録済みクラスターに接続します。 次に、登録済みクラスターでバックアップタスクを作成して実行し、アプリケーションをバックアップし、ACKクラスターでアプリケーションを復元します。 アプリケーションを移行する前に、次の要件が満たされていることを確認してください。
登録済みクラスター
Resource Access Management (RAM) ユーザーが作成され、OSSおよびCloud Backup権限が付与されます。 登録済みクラスターのcsdr名前空間にalibaba-addon-Secretという名前のシークレットが作成され、RAMユーザーのAccessKey IDとAccessKey secretが保存されます。 次のコマンドを実行して、alibaba-addon-secretシークレットが存在するかどうかを確認します。
kubectl get secret alibaba-addon-secret -n csdr想定される出力:
alibaba-addon-secret Opaque 2 5d22hACKクラスター
ACKマネージドクラスターを使用する場合は、クラウドバックアップが有効化され、cnfs-OSS-**** という名前のossバケットが作成されていることを確認してください。
ACK専用クラスターを使用する場合は、ワーカーRAMロールにOSSおよびクラウドバックアップ権限があることを確認します。 詳細については、「migrate-controllerのインストールと権限の付与」をご参照ください。
手順1: 外部Kubernetesクラスターへのアプリケーションのデプロイ
このセクションでは、サードパーティのクラウドプロバイダー上のKubernetesクラスターにデプロイされたMySQLアプリケーションを例として取り上げます。 このアプリケーションのPVCはmysql-pvc、PVはmysql-pv、対応するマウントポイントパスは /mntです。
次のコマンドを実行して、test1という名前の名前空間を作成します。
kubectl create namespace test1CSIプラグインを使用して、MySQLアプリケーションのボリュームをPVとPVCでマウントします。 詳細については、サードパーティのクラウドサービスプロバイダーが提供するCSIドキュメントを参照してください。
KubernetesクラスターがCSIをサポートしていない場合は、登録済みクラスターに接続し、Alibaba Cloudが提供するCSIプラグインを使用します。 詳細については、「Storage - CSI」をご参照ください。
次のコマンドを実行して、MySQLアプリケーションがデプロイされているかどうかを確認します。
kubectl -n test1 get pod| grep mysql-sts想定される出力:
mysql-sts-0 1/1 Running 0 1m02s次のコマンドを実行して、ボリュームの設定を確認します。
kubectl -n test1 get pv mysql-pv -oyaml想定される出力:
csi: driver: **** volumeAttributes: xxxx: xxxx xxxx: xxxx volumeHandle: mysql-pv出力は、ボリューム構成がCSIフィールドを含むことを示す。
次のコマンドを実行して、MySQLコンテナにログインします。
kubectl -n test1 exec -it mysql-sts-0 -- /bin/bashコンテナーで次のコマンドを実行して、バックアップ用のテストファイルを作成します。
cd /mnt && touch test && ls想定される出力:
test
手順2: MySQLアプリケーションとデータを登録済みクラスターにバックアップする
Kubernetesクラスターが登録済みクラスターに接続された後、次の手順を実行して、登録済みクラスターでバックアップタスクを実行できます。
(オプション) 現在のアカウント内にバックアップコンテナーが存在しない場合は、バックアップコンテナーを作成します。 詳細については、「バックアップコンテナーの作成」をご参照ください。
登録済みクラスターにmysql-backupという名前のリアルタイムバックアップタスクを作成します。 次の表に、いくつかのパラメーターを示します。 詳細については、「バックアップタスクの作成」をご参照ください。
パラメーター
例
名前
mysql-backupを入力します。
バックアップボールト
前の手順で作成したバックアップコンテナーを選択します。
バックアップ名前空間
test1を選択します。
ボリュームバックアップ
[ボリュームバックアップ] を選択してデータをバックアップします。
[アプリケーションバックアップ] ページの [バックアップレコード] タブをクリックします。 mysql-backupタスクのステータスがInProgressからCompletedに変更されると、アプリケーションとデータがバックアップされます。
手順3: バックアップコンテナーをACKクラスターに関連付ける
新しく作成されたバックアップコンテナーを使用する場合、またはバックアップコンテナーが復元クラスターに関連付けられていない場合は、最初に関連付けを設定する必要があります。
[アプリケーションバックアップ] ページで、[復元] をクリックします。
[復元] パネルで、[名前] と [バックアップコンテナー] を指定し、右側の [バックアップコンテナーの初期化] をクリックして、バックアップコンテナーを復元クラスターに関連付けます。
各バックアップコンテナーは一度だけ関連付けることができます。 バックアップボールトが初期化されると、登録済みクラスターのバックアップタスクは自動的にACKクラスターに同期されます。
初期化が完了したら、バックアップボールトで復元タスクを選択し、[OK] をクリックします。
[バックアップレコード] タブで、システムがリストにmysql-Backupタスクを追加するのを待ちます。
ステップ4: MySQLアプリケーションとデータをACKクラスターに復元
ACKクラスターでアプリケーションを復元するには、alibabacloud-cnfs-nas StorageClassを使用する動的にプロビジョニングされたPVがMySQLアプリケーションにマウントされ、PVでデータが復元されます。
mysql-restoreという名前の復元タスクを作成し、ACKクラスターのtest2名前空間にMySQLアプリケーションをデプロイします。 次の表に、いくつかのパラメーターを示します。 詳細については、「アプリケーションとボリュームの復元」をご参照ください。
パラメーター
例
名前
mysql-restoreと入力します。
バックアップボールト
作成したバックアップコンテナーを選択します。
[バックアップの選択]
mysql-backupを選択します。
名前空間のリセット
名前空間がtest1からtest2に変わります。
StorageClassの変換
リストでmysql-pvc PVCのalibabacloud-cnfs-nas StorageClassを選択します。
[復元] の右側にある [復元レコードの表示] をクリックします。 mysql-restoreタスクのステータスがInProgressからCompletedに変更されると、アプリケーションとデータが復元されます。
ACKクラスターで次のコマンドを実行して、MySQLアプリケーションがデプロイされているかどうかを確認します。
kubectl -n test2 get pod | grep mysql-sts想定される出力:
mysql-sts-0 1/1 Running 0 4sACKクラスターで次のコマンドを実行して、データが復元されているかどうかを確認します。
PVCのStorageClassがalibaba-cnfs-nasに変更されているかどうかを確認します。
kubectl -n test2 get pvc | grep mysql-pvc想定される出力:
mysql-pvc Bound nas-**** 25Gi RWO alibabacloud-cnfs-nas 3m24smysql-pvc PVCがMySQLアプリケーションにマウントされているかどうかを確認します。
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/bashMySQLコンテナ内のテストデータを照会します。
cd /mnt && ls想定される出力:
test出力は、テストデータが復元されたことを示します。