すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:外部 Kubernetes クラスタから ACK クラスタへのアプリケーションの移行

最終更新日:May 01, 2025

外部 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 が有効化されている

シナリオ

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      5d22h
  • ACK クラスタ:

ステップ 1:外部クラスタにアプリケーションをデプロイする

  1. 次のコマンドを実行して、test1 という名前のネームスペースを作成します。

    kubectl create namespace test1
  2. 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: 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 アプリケーションにログインするために使用されるパスワードに置き換えます。
  3. 次のコマンドを実行して、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
  4. 次のコマンドを実行して、MySQL アプリケーションが作成されているかどうかを確認します。

    kubectl get pod -n test1 | grep mysql-sts

    期待される出力:

    mysql-sts-0   1/1     Running   1 (4m51s ago)   4m58s

ステップ 2:外部クラスタの MySQL アプリケーションとデータをバックアップする

外部クラスタを ACK に登録し、登録済みクラスタでバックアップ操作を実行できます。

  1. 登録済みクラスタにバックアップボールトを作成します。詳細については、「バックアップボールトを作成する」をご参照ください。

  2. 登録済みクラスタに MySQL という名前のリアルタイムバックアップタスクを作成します。詳細については、「バックアッププランを作成する、または即座にバックアップする」をご参照ください。

    [名前]MySQL に設定し、前の手順で作成したバックアップボールトを [バックアップボールト] ドロップダウンリストから選択し、[test1][バックアップネームスペース] ドロップダウンリストから選択します。

  3. [アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。 mysql-backup タスクのステータスが [処理中] から [完了] に変わると、データがバックアップされます。

ステップ 3:ACK クラスタにバックアップファイルをリストアする

この例では、外部クラスタの StorageClass が alibabacloud-cnfs-nas に変換されます。この例では、ACK クラスタに MySQL アプリケーションのバックアップファイルをリストアする方法を示します。次の手順を実行します。

  1. mysql-restore という名前のリストアタスクを作成して、ACK クラスタの test2 ネームスペースに MySQL アプリケーションをデプロイし、その StorageClass を alibabacloud-cnfs-nas に変換します。詳細については、「アプリケーションとボリュームをリストアする」をご参照ください。

    パラメーター

    [名前]

    mysql-restore。

    [バックアップボールト]

    作成したバックアップボールトを選択します。バックアップボールトを選択した後、[バックアップボールトを初期化する] をクリックして、リストアクラスタをバックアップボールトに関連付けます。

    [バックアップを選択]

    MySQL を選択します。

    [ネームスペースをリセット]

    [test1] から [test2] に変更します。

    [StorageClass の変換]

    変換された PVC のリストで、[example-pvc] PVC の [alibabacloud-cnfs-nas] StorageClass を選択します。

  2. [リストア] の右側にある [リストアレコードを表示] をクリックします。 mysql-restore リストアタスクのステータスが [処理中] から [完了] に変わると、MySQL アプリケーションとデータがリストアされます。

  3. ACK クラスタで次のコマンドを実行して、MySQL アプリケーションがデプロイされているかどうかを確認します。

    kubectl get pod -n test2 | grep mysql-sts

    期待される出力:

    mysql-sts-0   1/1     Running   0          4s
  4. ACK クラスタで次のコマンドを実行して、データがリストアされているかどうかを確認します。

    1. 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
    2. example-pvc PVC が MySQL アプリケーションにマウントされているかどうかを確認します。

      kubectl describe pvc example-pvc -n test2 | grep "Used By"

      期待される出力:

      Used By:       mysql-sts-0