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

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

最終更新日:Dec 12, 2024

外部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が有効化されています。 詳しくは、「API を介したメトリックデータのアクセス」をご参照ください。

    参照Cloud Backup.

シナリオ

ディザスタリカバリ用の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クラスター:

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

  1. 次のコマンドを実行して、test1という名前の名前空間を作成します。

    kubectl create namespace test1
  2. という名前のファイルを作成します。app-mysql.yaml次の内容をファイルに追加します。

    <your-hostname> を、バックアップするノードの名前に置き換えます。 usernamepasswordパラメーターを、アプリケーションへのログインに使用するユーザー名とパスワードに設定します。

    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.

  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に登録し、登録したクラスターでバックアップ操作を実行できます。 MySQLアプリケーションとデータをバックアップするには、次の操作を実行します。

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

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

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

  3. [アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。 MySQLバックアップタスクのステータスがInProgressからCompletedに変わると、MySQLアプリケーションとデータがバックアップされます。

ステップ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復元タスクのステータスがInProgressからCompletedに変わると、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