Container Service for Kubernetes (ACK) コンソールでバックアップセンターを管理できない場合、またはバックアップとディザスタリカバリを自動化する場合は、kubectlを使用できます。 kubectlを使用すると、BackupLocation、ApplicationBackup、およびApplicationRestore CustomResources (CR) をバックアップおよび復元クラスターにデプロイして、アプリケーションを移行できます。
前提条件
migrate-コントローラがインストールされ、権限が付与されます。 詳細については、「migrate-controllerのインストールと権限の付与」をご参照ください。
利用シナリオ
必要な権限がないため、ACKコンソールでバックアップセンターを使用できません。
バックアップ手順を自動化したい場合。
使用上の注意
kubectl
delete
コマンドを実行してバックアップまたは復元タスクを削除することはできません。 詳細については、「手順4: バックアップセンターに関連するリソースの削除」をご参照ください。migrate-controllerという名前のバックアップセンターコンポーネントの新しいリリースに細心の注意を払い、できるだけ早くコンポーネントを最新バージョンに更新してください。 詳細については、「コンポーネントの管理」をご参照ください。
バックアップファイルを復元できない場合は、次のサンプルコードのパラメーターを削除しないでください。
ステップ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バケット内のサブディレクトリ。 このパラメーターを指定すると、指定したサブディレクトリにバックアップが保存されます。
バックアップクラスターと復元クラスターの両方で次のコマンドを実行して、backuplocationオブジェクトをデプロイします。
kubectl apply -f backuplocation.yaml
バックアップクラスターと復元クラスターの両方で次のコマンドを実行して、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: バックアップタスクを作成する
リアルタイムバックアップタスクの作成
バックアップクラスターに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コンソールで作成されたバックアップタスクでは、
IncludeClusterResources
がfalse
に設定されます。defaultPvBackup
ボリュームをバックアップするかどうかを指定します。 有効な値:
true: アプリケーションとボリュームをバックアップします。
false: アプリケーションのみをバックアップします。
storageLocation
可
バックアップボールトの名前。
説明ACKクラスターでVeleroを使用している場合は、DingTalkグループ35532895に参加してテクニカルサポートをリクエストします。
ttl
可
バックアップの有効期間。 期限切れのバックアップからデータを復元することはできません。 期間を720h0m0s形式で指定します。 有効値: 24h0m0s ~ 1572864h0m0s。
バックアップクラスターで次のコマンドを実行して、applicationbackupオブジェクトをデプロイします。
kubectl apply -f applicationbackup.yaml
バックアップクラスターで次のコマンドを実行して、リアルタイムバックアップタスクのステータスを照会します。
kubectl describe applicationbackup <yourApplicationBackupName> -n csdr
期待される出力:
... Status: Completion Timestamp: 2022-12-05T15:02:35Z Expiration: 2023-01-04T15:02:25Z Message: success Phase: Completed
リアルタイムバックアップタスクのステータスが
未進行
から完了
に変わると、タスクが作成されます。
スケジュールされたバックアップタスクの作成
バックアップクラスターに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コンソールで作成されたバックアップタスクでは、
IncludeClusterResources
がfalse
に設定されます。defaultPvBackup
可
ボリュームをバックアップするかどうかを指定します。 有効な値:
true: アプリケーションとボリュームをバックアップします。
false: アプリケーションのみをバックアップします。
storageLocation
可
バックアップボールトの名前。
説明ACKクラスターでVeleroを使用している場合は、DingTalkグループ35532895に参加してテクニカルサポートをリクエストします。
ttl
可
バックアップの有効期間。 期限切れのバックアップからデータを復元することはできません。 期間を720h0m0s形式で指定します。 有効値: 24h0m0s ~ 1572864h0m0s。
バックアップクラスターで次のコマンドを実行して、backupscheduleオブジェクトをデプロイします。
kubectl apply -f backupschedule.yaml
バックアップクラスターで次のコマンドを実行して、スケジュールされたバックアップタスクのステータスを照会します。
kubectl describe backupschedule <yourBackupScheduleName> -n csdr
期待される出力:
... Status: Last Backup: 2022-12-07T20:01:11Z Last Processed Time: 2022-12-08T13:05:37Z Phase: Enabled
バックアップ計画が
有効
の場合、バックアップ計画が作成されます。バックアップクラスターで次のコマンドを実行して、定期的に作成されるバックアップを照会します。
kubectl get applicationbackup -n csdr | grep <yourBackupScheduleName>
期待される出力:
<yourBackupScheduleName>-20221205225845 2d22h <yourBackupScheduleName>-20221206040104 2d17h <yourBackupScheduleName>-20221207040137 41h <yourBackupScheduleName>-20221208040111 17h
ステップ3: 復元タスクを作成する
復元クラスターに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ボリュームの場合、ディスクに復元するときに、ディスクが強制的に分離されないように、レプリカが複数のノードに同時にマウントされないようにします。
復元クラスターで次のコマンドを実行して、applicationrestoreオブジェクトを展開します。
kubectl apply -f applicationrestore.yaml
復元クラスターで次のコマンドを実行して、復元タスクのステータスを照会します。
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
バックアップタスクまたは復元タスクの削除
削除するタスクのクラスターに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オブジェクトと関連リソースを削除します。
説明バックアップタスクを削除しても、クラスターで作成されるバックアップには影響しません。
復元タスクを削除しても、復元されるデータには影響しません。
deleterequestリソースをデプロイするために、削除するタスクのクラスターで次のコマンドを実行します。
kubectl apply -f deleterequest.yaml
次のコマンドを実行して、リソースのステータスを照会します。
削除されたバックアップタスクの照会
次のコマンドを実行して、バックアップタスクのステータスを照会します。
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リソースも削除されることを示します。
関連ドキュメント
コンソールでアプリケーションをバックアップおよび移行する方法の詳細については、以下のトピックを参照してください。
異なるボリュームプラグインを使用し、異なるバージョンのKubernetesを実行するクラスター間でアプリケーションを移行する方法の詳細については、「バックアップセンターを使用して、古いバージョンのKubernetesを実行するACKクラスターでアプリケーションを移行する」をご参照ください。