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

Container Service for Kubernetes:kubectlを使用したアプリケーションのバックアップと復元

最終更新日:Dec 12, 2024

Container Service for Kubernetes (ACK) コンソールでバックアップセンターを管理できない場合、またはバックアップとディザスタリカバリを自動化する場合は、kubectlを使用できます。 kubectlを使用すると、BackupLocation、ApplicationBackup、およびApplicationRestore CustomResources (CR) をバックアップおよび復元クラスターにデプロイして、アプリケーションを移行できます。

前提条件

migrate-コントローラがインストールされ、権限が付与されます。 詳細については、「migrate-controllerのインストールと権限の付与」をご参照ください。

利用シナリオ

  • 必要な権限がないため、ACKコンソールでバックアップセンターを使用できません。

  • バックアップ手順を自動化したい場合。

使用上の注意

  • kubectl deleteコマンドを実行してバックアップまたは復元タスクを削除することはできません。 詳細については、「手順4: バックアップセンターに関連するリソースの削除」をご参照ください。

  • migrate-controllerという名前のバックアップセンターコンポーネントの新しいリリースに細心の注意を払い、できるだけ早くコンポーネントを最新バージョンに更新してください。 詳細については、「コンポーネントの管理」をご参照ください。

  • バックアップファイルを復元できない場合は、次のサンプルコードのパラメーターを削除しないでください。

ステップ1: バックアップコンテナーの作成

  1. バックアップクラスターと復元クラスターの両方にbackuplocation.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupLocation
    metadata:
      name: <yourBackuplocationName>
      namespace: csdr
    spec:
      backupSyncPeriod: 0s
      config:
        network: internal
        region: cn-beijing
      objectStorage:
        bucket: <cnfs-oss-yourBucketName>
        prefix: <subDir>
      provider: alibabacloud

    次の表に、指定する必要があるパラメーターを示します。 他のパラメータのデフォルト設定を維持します。

    パラメーター

    必須 / 任意

    説明

    name

    バックアップボールトの名前。 名前はKubernetesの命名規則に準拠している必要があります。

    ネットワーク

    指定されたObject Storage Service (OSS) バケットへのアクセスに使用されるネットワークモード。 有効な値:

    • internal: 内部モード。 関連付けられているすべてのクラスターは、OSSバケットと同じリージョンにデプロイする必要があります。

    • public: パブリックモード。 このモードには領域制限はありません。

    region

    OSS バケットが存在するリージョンです。

    バケット

    OSS バケットの名前。 OSSバケット名が存在し、cnfs-oss-で始まることを確認してください。

    プレフィックス

    不可

    OSSバケット内のサブディレクトリ。 このパラメーターを指定すると、指定したサブディレクトリにバックアップが保存されます。

  2. バックアップクラスターと復元クラスターの両方で次のコマンドを実行して、backuplocationオブジェクトをデプロイします。

    kubectl apply -f backuplocation.yaml
  3. バックアップクラスターと復元クラスターの両方で次のコマンドを実行して、backuplocationオブジェクトのステータスを照会します。

    kubectl describe backuplocation <yourBackuplocationName> -n csdr

    期待される出力:

    ...
    Status:
      Last Validation Time:  2022-12-08T04:00:22Z
      Message:               success by csdr-controller
      Phase:                 Available

    出力は、バックアップコンテナーが [使用可能] 状態であることを示します。 つまり、現在のクラスターにはOSSにアクセスする権限があります。

ステップ2: バックアップタスクを作成する

リアルタイムバックアップタスクの作成

  1. バックアップクラスターにapplicationbackup.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}}
      name: <yourApplicationBackupName>
      namespace: csdr
    spec:
      includedNamespaces:
        - default
      includedResources:
        - statefulset
      excludedResources:
        - deployment
      labelSelector:
        matchLabels:
          app: mysql-sts
      includeClusterResources: false 
      pvBackup:
        defaultPvBackup: false
      storageLocation: <yourBackuplocationName>
      ttl: 720h0m0s

    次の表に、指定する必要があるパラメーターを示します。 他のパラメータのデフォルト設定を維持します。

    パラメーター

    必須 / 任意

    説明

    csdr.alibabacloud.com/backuplocations

    バックアップを保存するバックアップコンテナー。 情報がバックアップコンテナーの構成と同じであることを確認します。

    name

    リアルタイムバックアップタスクの名前。

    includedNamespaces

    名前空間の名前。

    includedResources

    不可

    バックアップリストに含めるクラスターリソースのタイプ。

    重要

    バックアップが期待どおりに作成されるようにするには、includedResourcesおよびexcludedResourcesのいずれかのパラメーターのみを指定します。 両方のパラメーターを空のままにすると、すべてのリソースタイプがバックアップされます。

    excludedResources

    不可

    バックアップリストから除外するクラスターリソースのタイプ。

    重要

    バックアップが期待どおりに作成されるようにするには、includedResourcesおよびexcludedResourcesのいずれかのパラメーターのみを指定します。 両方のパラメーターを空のままにすると、すべてのリソースタイプがバックアップされます。

    matchLabels

    不可

    バックアップするリソースのラベル。

    includeClusterResources

    不可

    StorageClasses、CustomResourceDefinitions (CRD) 、webhooksなど、すべてのクラスターレベルのリソースをバックアップするかどうかを指定します。

    • true: すべてのクラスターレベルのリソースをバックアップします。

    • false: 指定された名前空間内の名前空間レベルのリソースによって使用されるクラスターレベルのリソースのみをバックアップします。 たとえば、システムがポッドをバックアップすると、ポッドで使用されるサービスアカウントにクラスターロールが割り当てられます。 この場合、クラスターロールは自動的にバックアップされます。 システムがCustomResource (CR) をバックアップすると、対応するCRDがバックアップされます。

    説明

    デフォルトでは、ACKコンソールで作成されたバックアップタスクでは、IncludeClusterResourcesfalseに設定されます。

    defaultPvBackup

    ボリュームをバックアップするかどうかを指定します。 有効な値:

    • true: アプリケーションとボリュームをバックアップします。

    • false: アプリケーションのみをバックアップします。

    storageLocation

    バックアップボールトの名前。

    説明

    ACKクラスターでVeleroを使用している場合は、DingTalkグループ35532895に参加してテクニカルサポートをリクエストします。

    ttl

    バックアップの有効期間。 期限切れのバックアップからデータを復元することはできません。 期間を720h0m0s形式で指定します。 有効値: 24h0m0s ~ 1572864h0m0s。

  2. バックアップクラスターで次のコマンドを実行して、applicationbackupオブジェクトをデプロイします。

    kubectl apply -f applicationbackup.yaml
  3. バックアップクラスターで次のコマンドを実行して、リアルタイムバックアップタスクのステータスを照会します。

    kubectl describe applicationbackup <yourApplicationBackupName> -n csdr

    期待される出力:

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:02:35Z
      Expiration:            2023-01-04T15:02:25Z
      Message:               success
      Phase:                 Completed

    リアルタイムバックアップタスクのステータスが未進行から完了に変わると、タスクが作成されます。

スケジュールされたバックアップタスクの作成

  1. バックアップクラスターにbackupschedule.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupSchedule
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}
      name: <yourBackupScheduleName>
      namespace: csdr
    spec:
      schedule: 1 4 * * *
      template:
        includedNamespaces:
          - default
        includedResources:
          - statefulset
        excludedResources:
          - deployment
        labelSelector:
          matchLabels:
            app: mysql-sts
        includeClusterResources: false 
        pvBackup:
          defaultPvBackup: true
        storageLocation: <yourBackuplocationName>
        ttl: 720h0m0s

    次の表に、指定する必要があるパラメーターを示します。 他のパラメータのデフォルト設定を維持します。

    パラメーター

    必須 / 任意

    説明

    csdr.alibabacloud.com/backuplocations

    バックアップを保存するバックアップコンテナー。 情報がバックアップコンテナーの構成と同じであることを確認します。

    name

    スケジュールされたバックアップタスクの名前。

    スケジュール

    cron式で指定されたバックアップサイクル。

    includedNamespaces

    名前空間の名前。

    includedResources

    不可

    バックアップリストに含めるクラスターリソースのタイプ。

    重要

    バックアップが期待どおりに作成されるようにするには、includedResourcesおよびexcludedResourcesのいずれかのパラメーターのみを指定します。 両方のパラメーターを空のままにすると、すべてのリソースタイプがバックアップされます。

    excludedResources

    不可

    バックアップリストから除外するクラスターリソースのタイプ。

    重要

    バックアップが期待どおりに作成されるようにするには、includedResourcesおよびexcludedResourcesのいずれかのパラメーターのみを指定します。 両方のパラメーターを空のままにすると、すべてのリソースタイプがバックアップされます。

    matchLabels

    不可

    バックアップするリソースのラベル。

    includeClusterResources

    不可

    StorageClasses、CustomResourceDefinitions (CRD) 、webhooksなど、すべてのクラスターレベルのリソースをバックアップするかどうかを指定します。

    • true: すべてのクラスターレベルのリソースをバックアップします。

    • false: 指定された名前空間内の名前空間レベルのリソースによって使用されるクラスターレベルのリソースのみをバックアップします。 たとえば、システムがポッドをバックアップすると、ポッドで使用されるサービスアカウントにクラスターロールが割り当てられます。 この場合、クラスターロールは自動的にバックアップされます。 システムがCustomResource (CR) をバックアップすると、対応するCRDがバックアップされます。

    説明

    デフォルトでは、ACKコンソールで作成されたバックアップタスクでは、IncludeClusterResourcesfalseに設定されます。

    defaultPvBackup

    ボリュームをバックアップするかどうかを指定します。 有効な値:

    • true: アプリケーションとボリュームをバックアップします。

    • false: アプリケーションのみをバックアップします。

    storageLocation

    バックアップボールトの名前。

    説明

    ACKクラスターでVeleroを使用している場合は、DingTalkグループ35532895に参加してテクニカルサポートをリクエストします。

    ttl

    バックアップの有効期間。 期限切れのバックアップからデータを復元することはできません。 期間を720h0m0s形式で指定します。 有効値: 24h0m0s ~ 1572864h0m0s。

  2. バックアップクラスターで次のコマンドを実行して、backupscheduleオブジェクトをデプロイします。

    kubectl apply -f backupschedule.yaml
  3. バックアップクラスターで次のコマンドを実行して、スケジュールされたバックアップタスクのステータスを照会します。

    kubectl describe backupschedule <yourBackupScheduleName> -n csdr

    期待される出力:

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled

    バックアップ計画が有効の場合、バックアップ計画が作成されます。

  4. バックアップクラスターで次のコマンドを実行して、定期的に作成されるバックアップを照会します。

    kubectl get applicationbackup -n csdr | grep <yourBackupScheduleName>

    期待される出力:

    <yourBackupScheduleName>-20221205225845   2d22h
    <yourBackupScheduleName>-20221206040104   2d17h
    <yourBackupScheduleName>-20221207040137   41h
    <yourBackupScheduleName>-20221208040111   17h

ステップ3: 復元タスクを作成する

  1. 復元クラスターにapplicationrestore.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationRestore
    metadata:
      annotations:    
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}
      name: <yourApplicationRestoreName>
      namespace: csdr
    spec:
      appRestoreOnly: false
      preserveNodePorts: true
      includedNamespaces:
        - default
      includedResources:
        - statefulset
      excludedResources:
        - secret
      convertedarg:
      - convertToStorageClassType: alicloud-disk-topology-alltype
        namespace: nas
        persistentVolumeClaim: pvc-nas
      - convertToStorageClassType: alicloud-disk-topology-alltype
        namespace: oss
        persistentVolumeClaim: pvc-oss
      backupName: <yourApplicationBackupName>
      namespaceMapping:
        <backupNamespace>: <restoreNamespace>

    次の表に、指定する必要があるパラメーターを示します。 他のパラメータのデフォルト設定を維持します。

    パラメーター

    必須 / 任意

    説明

    csdr.alibabacloud.com/backuplocations

    バックアップを保存するバックアップコンテナー。 情報がバックアップコンテナーの構成と同じであることを確認します。

    name

    復元タスクの名前。

    appRestoreOnly

    不可

    ボリュームデータを含むバックアップからアプリケーションのみを復元するかどうかを指定します。 永続ボリュームクレーム (PVC) 、永続ボリューム (PV) 、および関連データは復元されません。 有効な値:

    • true: アプリケーションのみを復元します。 アプリケーションをバックアップするデータソースを変更する場合は、手動でPVCとPVを作成し、復元タスクを作成してから、このパラメーターをtrueに設定する必要があります。

    • false: アプリケーションと関連するボリュームデータを復元します。 デフォルト値:false

    preserveNodePorts

    不可

    アプリケーションのNodePortを保持するかどうかを指定します。 バックアップクラスターと復元クラスターで同じNodePortを使用している場合は、このパラメーターをfalseに設定して、NodePortをランダムなポートに変更します。 他のシナリオでは、パラメーターをtrueに設定します。

    includedNamespaces

    復元する名前空間の名前。 このパラメーターを空のままにすると、バックアップされたすべての名前空間が復元されます。

    includedResources

    不可

    復元リストに含めるクラスターリソースのタイプ。

    重要

    バックアップが期待どおりに作成されるようにするには、includedResourcesおよびexcludedResourcesのいずれかのパラメーターのみを指定します。 両方のパラメーターを空のままにすると、すべてのリソースタイプがバックアップされます。

    excludedResources

    不可

    リストアリストから除外するクラスターリソースのタイプ。

    重要

    バックアップが期待どおりに作成されるようにするには、includedResourcesおよびexcludedResourcesのいずれかのパラメーターのみを指定します。 両方のパラメーターを空のままにすると、すべてのリソースタイプがバックアップされます。

    backupName

    復元するバックアップの名前。 スケジュールバックアップ機能を使用する場合は、ある時点で作成されるバックアップの名前を指定する必要があります。 例: <yourBackupScheduleName>-20221205225845

    namespaceMapping

    不可

    このパラメーターは、バックアップクラスターの名前空間を復元クラスターの名前空間にマップします。 有効な値:

    • <backupNamespace>: バックアップクラスター内のバックアップの名前空間。

    • <restoreNamespace>: 復元クラスターでリソースが復元される名前空間。 このパラメーターを指定しない場合、リソースはバックアップクラスターの名前空間と同じ名前を使用する名前空間に復元されます。

    説明

    <restoreNamespace> が存在しない場合、システムは自動的に作成します。

    convertedarg

    不可

    StorageClass変換リスト。 OSS、NAS、CPFS、ローカルボリュームなどのFileSystemタイプのボリュームの場合、このパラメーターを設定して、復元プロセス中にPVCのStorageClassesを指定されたStorageClassに変換できます。 たとえば、NASボリュームをディスクボリュームに変換できます。

    • convertToStorageClassType: 目的のStorageClass。 現在のクラスターにStorageClassが存在することを確認します。 指定できるのは、ディスクまたはNAS StorageClassのみです。

    • namespace: PVCの名前空間。

    • persistentVolumeClaim: PVCの名前。

    kubectl -ncsdr describe <backup-name> コマンドを実行して、バックアップのPVC情報を照会できます。 返されたstatus.resourceList.dataResource.pvcBackupInfoリストのdataTypeフィールドには、PVCのデータ型 (FileSystemまたはSnapshot) が表示されます。 nameSpaceフィールドとpvcNameフィールドには、PVCの名前空間と名前が表示されます。

    重要

    ReadWriteManyボリュームの場合、ディスクへの復元はサポートされません。 ReadOnlyManyボリュームの場合、ディスクに復元するときに、ディスクが強制的に分離されないように、レプリカが複数のノードに同時にマウントされないようにします。

  2. 復元クラスターで次のコマンドを実行して、applicationrestoreオブジェクトを展開します。

    kubectl apply -f applicationrestore.yaml
  3. 復元クラスターで次のコマンドを実行して、復元タスクのステータスを照会します。

    kubectl describe applicationrestore <yourApplicationRestoreName> -n csdr

    期待される出力:

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:52:19Z
      Phase:                 Completed
      Start Timestamp:       2022-12-05T15:52:09Z

    復元タスクのステータスが未完了から完了に変わると、タスクが作成されます。

ステップ4: バックアップセンターに関連するリソースを削除する

重要

他のクラスターでも、作成したバックアップコンテナーを使用できます。 したがって、バックアップセンターではBackupLocationオブジェクトを削除できません。

バックアップスケジュールの削除

次のスケジュールを実行して、バックアップスケジュールのBackupScheduleリソースを削除し、バックアップスケジュールを停止します。

kubectl delete backupschedule <yourBackupSchedule> - ncsdr

バックアップタスクまたは復元タスクの削除

  1. 削除するタスクのクラスターにdeleterequest.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: DeleteRequest
    metadata:
      name: <objectName-dbr>
      namespace: csdr
    spec:
      deleteObjectName: <objectName>
      deleteObjectType: "Backup"

    次の表に、指定する必要があるパラメーターを示します。 他のパラメータのデフォルト設定を維持します。

    パラメーター

    必須 / 任意

    説明

    name

    削除リクエストの名前。

    • バックアップタスクを削除するには、バックアップタスクのApplicationBackup name + "-dbr" の形式でリクエスト名を指定します。

    • 復元タスクを削除するには、復元タスクのApplicationRestore name + "-dbr" の形式でリクエスト名を指定します。

    deleteObjectName

    削除するリソースの名前。

    deleteObjectType

    削除するリソースのタイプ。 有効な値:

    • "Backup": ApplicationBackupオブジェクトとバックアップタスクの関連リソースを削除します。

    • "Restore": 復元タスクのApplicationRestoreオブジェクトと関連リソースを削除します。

    説明
    • バックアップタスクを削除しても、クラスターで作成されるバックアップには影響しません。

    • 復元タスクを削除しても、復元されるデータには影響しません。

  2. deleterequestリソースをデプロイするために、削除するタスクのクラスターで次のコマンドを実行します。

    kubectl apply -f deleterequest.yaml
  3. 次のコマンドを実行して、リソースのステータスを照会します。

    • 削除されたバックアップタスクの照会

      • 次のコマンドを実行して、バックアップタスクのステータスを照会します。

        kubectl get applicationbackup <yourApplicationBackupName> -n csdr

        期待される出力:

        Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "yourApplicationBackupName" not found

        出力は、バックアップタスクのリソースが削除されたことを示します。

      • 次のコマンドを実行して、deleterequestリソースのステータスを照会します。

        kubectl get deleterequest <yourApplicationBackupName-dbr> -n csdr

        期待される出力:

        Error from server (NotFound): deleterequests.csdr.alibabacloud.com "yourApplicationBackupName-dbr" not found

        出力は、deleterequestリソースも削除されることを示します。

    • 削除された復元タスクの表示

      • 次のコマンドを実行して、復元タスクのステータスを照会します。

        kubectl get applicationrestore <yourApplicationRestoreName> -n csdr

        期待される出力:

        Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "yourApplicationRestoreName" not found

        出力は、復元タスクのリソースが削除されたことを示します。

      • 次のコマンドを実行して、deleterequestリソースのステータスを照会します。

        kubectl get deleterequest <yourApplicationRestoreName-dbr> -n csdr

        期待される出力:

        Error from server (NotFound): deleterequests.csdr.alibabacloud.com "yourApplicationRestoreName-dbr" not found

        出力は、deleterequestリソースも削除されることを示します。

関連ドキュメント