バックアップセンターを使用して、FlexVolume を使用する Container Service for Kubernetes (ACK) クラスタから CSI を使用する ACK クラスタにアプリケーションを移行できます。 また、バックアップセンターを使用して、古い Kubernetes バージョンを実行する ACK クラスタから新しい Kubernetes バージョンを実行する ACK クラスタにアプリケーションを移行することもできます。 バックアップセンターは、異なるボリュームプラグインを使用する、または異なる Kubernetes バージョンを実行するクラスタ間でアプリケーションを移行するのに役立ちます。 たとえば、アイドル状態のクラスタレベルリソースをバックアップする場合、またはリソースがリストアされるクラスタでサポートされている API バージョンに自動的に切り替える場合に、バックアップセンターを使用できます。 このトピックでは、バックアップセンターを使用してアプリケーションを移行する方法について説明します。 このトピックでは、FlexVolume を使用し、Kubernetes 1.16 を実行するクラスタ内のアプリケーションが、CSI を使用し、Kubernetes 1.28 を実行するクラスタに移行されます。
使用上の注意
バックアップクラスタとリストアクラスタは、同じリージョンにデプロイする必要があります。 バックアップクラスタは、Kubernetes 1.16 以降を実行する必要があります。 API バージョンの互換性の問題が発生した場合に備えて、新しい Kubernetes バージョンを実行するクラスタから古い Kubernetes バージョンを実行するクラスタにアプリケーションを移行するためにバックアップセンターを使用しないことをお勧めします。
バックアップセンターは、削除中のリソースはバックアップしません。
CNFS によって管理されている NAS ファイルシステム ([StorageClass] を [alibabacloud-cnfs-nas] に設定することにより)にバックアップをリストアするには、最初に StorageClass を作成する必要があります。 詳細については、「CNFS を使用して NAS ファイルシステムを管理する(推奨)」をご参照ください。
バックアップセンターは、できればリストアクラスタに推奨される API バージョンにアプリケーションをリストアします。 リソースの古い Kubernetes バージョンと新しい Kubernetes バージョンの両方でサポートされている API バージョンがない場合は、リソースを手動でデプロイする必要があります。 例:
Kubernetes 1.16 を実行するクラスタ内のデプロイメントは、
extensions/v1beta1、apps/v1beta1、apps/v1beta2、およびapps/v1をサポートしています。 このシナリオでは、Kubernetes 1.28 を実行するクラスタ内のデプロイメントの API バージョンはapps/v1にリストアされます。Kubernetes 1.16 を実行するクラスタ内の Ingress は、
extensions/v1beta1およびnetworking.k8s.io/v1beta1をサポートしています。 このシナリオでは、Kubernetes 1.22 以降を実行するクラスタ内の Ingress をリストアすることはできません。
異なる Kubernetes バージョンの API 更新の詳細については、「ACK でサポートされている Kubernetes バージョンのリリースノート」および「非推奨の API 移行ガイド」をご参照ください。
重要Kubernetes 1.16 を実行するクラスタでは、
appsやrbac.authorization.k8s.ioなどのグループはすでに API バージョン v1 をサポートしています。 アプリケーションを Kubernetes 1.28 を実行するクラスタに移行した後、Ingress と CronJob リソースを手動でリストアする必要があります。
使用シナリオ
異なるボリュームプラグインを使用するクラスタ間でアプリケーションを移行する
Kubernetes バージョンが 1.20 以降の ACK クラスタは、FlexVolume をサポートしなくなりました。 バックアップセンターを使用して、FlexVolume を使用するクラスタから CSI を使用するクラスタにステートフル アプリケーションを移行できます。
説明バックアップクラスタは FlexVolume または CSI を使用できますが、リストアクラスタは CSI を使用する必要があります。
異なる Kubernetes バージョンを実行するクラスタ間でアプリケーションを移行する
シナリオによっては、古い Kubernetes バージョン(1.16 以降)を実行するクラスタからアプリケーションを移行する必要がある場合があります。 たとえば、ネットワークプラグインを Flannel から Terway に切り替えることができます。 バックアップセンターを使用して、複数の Kubernetes バージョン間でアプリケーションを移行できます。 バックアップセンターは、API バージョンなどのアプリケーションテンプレートの基本構成を新しい Kubernetes バージョンに自動的に適合させることができます。
前提条件
Cloud Backup がアクティブ化されています。 NAS ファイルシステム、OSS バケット、およびローカルディスクを使用するボリュームをバックアップする場合、またはハイブリッドクラウドシナリオでボリュームをバックアップする場合は、Cloud Backup を使用してバックアップを作成するようにバックアップセンターを構成する必要があります。 詳細については、 Cloud Backup をご参照ください。
ボリュームが解凍されるクラスターが作成されます。Elastic Compute Service (ECS) インスタンスのスナップショットを使用してディスクデータを解凍できるように、クラスターの Kubernetes バージョンを 1.18 以降に更新することをお勧めします。詳細については、「ACK マネージドクラスターを作成する」、「ACK 専用クラスターを作成する (廃止)」、または「クラスター登録プロキシを作成し、データセンターにデプロイされている Kubernetes クラスターを登録する」をご参照ください。
重要リストアクラスタは、Container Storage Interface (CSI) プラグインを使用する必要があります。 FlexVolume を使用するか、csi-compatible-controller と FlexVolume を使用するクラスタでは、アプリケーションのリストアはサポートされていません。
バックアップセンターは、アプリケーションのバックアップとリストアに使用されます。 リストアタスクを実行する前に、リストアクラスタにシステムコンポーネントをインストールして構成する必要があります。 例:
aliyun-acr-credential-helper: リストアクラスタに権限を付与し、acr-configuration を構成する必要があります。
alb-ingress-controller: ALBConfig を構成する必要があります。
ディスクスナップショットを作成してボリュームをバックアップするには、CSI 1.1.0 以降をインストールする必要があります。 詳細については、「CSI プラグインを管理する」をご参照ください。
移行ワークフロー
移行ワークフローは、バックアップクラスタで使用されるボリュームプラグインによって異なります。 次の図は詳細を示しています。
バックアップクラスタ内のアプリケーションはボリュームを使用していません
バックアップクラスタは FlexVolume を使用します
バックアップクラスタは CSI を使用します
手順
この例では、FlexVolume を使用し、Kubernetes 1.16 を実行する ACK クラスタが使用されます。 この例では、クラスタから CSI を使用し、Kubernetes 1.28 を実行する ACK クラスタにアプリケーション、構成、およびボリュームを移行する方法を示します。 移行は、データソースを変更するか、データソースを変更せずに実行できます。 ボリュームを使用しないアプリケーションを移行する場合、または CSI を使用するクラスタからアプリケーションを移行する場合は、オプションの手順をスキップできます。
データソースを変更しない場合は、バックアップクラスタの永続ボリューム (PV) の再利用ポリシーを Retain に設定します。 そうしないと、ボリュームを削除した後にデータが削除されます。
kubectl patch pv/<pv-name> --type='json' -p '[{"op":"replace","path":"/spec/persistentVolumeReclaimPolicy","value":"Retain"}]'方法 | 説明 | 使用シナリオ |
データソースを変更する | バックアップクラスタのボリュームに格納されているデータをバックアップし、バックアップをリストアクラスタに同期します。 これは、バックアップクラスタとリストアクラスタがそれぞれデータソースを使用することを意味します。 データ復旧プロセスでは、動的にプロビジョニングされたボリュームが使用されます。 StorageClass を変更することで、ボリュームタイプを変換できます。 たとえば、NAS ボリュームをディスクボリュームに変換できます。 |
|
データソースを変更しない | リストアプロセスでは、バックアップの永続ボリューム (PV) と永続ボリューム要求 (PVC) からリストアされた静的にプロビジョニングされたボリュームが使用されます。 したがって、バックアップクラスタとリストアクラスタは、ディスク ID や Object Storage Service (OSS) バケットなど、同じデータソースを使用します。 アプリケーションを FlexVolume から CSI に移行する場合は、CSI は FlexVolume YAML テンプレートをサポートしていないため、静的にプロビジョニングされた PV と PVC を手動で作成する必要があります。 | データ復旧中にビジネスの書き込み操作を中断できず、ビジネスにはデータ整合性が必要な場合。 |
環境を準備する
方法 | バックアップクラスタ | リストアクラスタ |
Kubernetes バージョン | 1.16.9-aliyun.1 | 1.28.3-aliyun.1 |
ランタイムバージョン | Docker 19.03.5 | containerd 1.6.20 |
ボリュームプラグインバージョン | FlexVolume: v1.14.8.109-649dc5a-aliyun | CSI: v1.26.5-56d1e30-aliyun |
その他 |
| csi-plugin プラグインと csi-provisioner プラグインをインストールします。 詳細については、「コンポーネントを管理する」をご参照ください。 |
ステップ 1: テストアプリケーションをデプロイする
次のコマンドを実行して、動的にプロビジョニングされたディスクボリュームをデプロイします。
alicloud-disk-topologyを、クラスタ内の FlexVolume プラグインによってインストールされたデフォルトのディスク StorageClass の名前に置き換えます。cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-essd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-topology resources: requests: storage: 20Gi EOF次のコマンドを実行して、静的にプロビジョニングされた NAS ボリュームをデプロイします。
serverを、NAS ファイルシステムのマウントポイントに置き換えます。cat << EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas spec: capacity: storage: 5Gi storageClassName: nas accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "1758axxxxx-xxxxx.cn-beijing.nas.aliyuncs.com" vers: "3" options: "nolock,tcp,noresvport" --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany storageClassName: nas resources: requests: storage: 5Gi EOF次のコマンドを実行して、アプリケーションをデプロイし、ディスクボリュームと NAS ボリュームをアプリケーションにマウントします。
次のコードの
apiVersionは extensions/v1beta1 に設定されています。 このAPI バージョンは、Kubernetes 1.28 では非推奨です。cat << EOF | kubectl apply -f - apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: nas mountPath: /cold - name: disk mountPath: /hot volumes: - name: nas persistentVolumeClaim: claimName: pvc-nas - name: disk persistentVolumeClaim: claimName: disk-essd EOF次のコマンドを実行して、アプリケーションが正常に実行されていることを確認します。
kubectl get pod -l app=nginx予期される結果:
NAME READY STATUS RESTARTS AGE nginx-5ffbc895b-xxxxx 1/1 Running 0 2m28s
ステップ 2: バックアップクラスタにバックアップセンターをインストールする
migrate-controller をインストールするをバックアップ クラスターにインストールします。
説明ACK コンソールのアドオンページから、Kubernetes バージョンが 1.16 以後のクラスタに migrate-controller 1.7.6 以降を直接インストールできます。
バックアップ クラスターが ACK 専用クラスター、登録済みクラスター、または CSI 以外のボリューム プラグイン (FlexVolume など) を使用するクラスターの場合、追加の権限を付与する必要があります。詳細については、「登録済みクラスター」をご参照ください。
(オプション) クラスタが FlexVolume を使用している場合は、次のコマンドを実行して、必要な権限が付与されていることを確認します。
kubectl -n csdr get secret alibaba-addon-secret(オプション) クラスタが FlexVolume を使用している場合は、次のコマンドを実行して、kube-system 名前空間に migrate-controller をデプロイするための
USE_FLEXVOLUME環境変数を追加します。重要FlexVolume を使用するクラスタに migrate-controller がインストールされると、migrate-controller ポッドが例外的に終了し、アプリケーションバックアップページに 404 エラーが表示されます。 この場合は、migrate-controller の YAML ファイルに USE_FLEXVOLUME 環境変数を追加する必要があります。
kubectl -n kube-system patch deployment migrate-controller --type json -p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"USE_FLEXVOLUME","value":"true"}}]'次のコマンドを実行して、migrate-controller が正常に実行されていることを確認します。
kubectl -n kube-system get pod -l app=migrate-controller kubectl -n csdr get pod予期される結果:
NAME READY STATUS RESTARTS AGE migrate-controller-6c8b9c6cbf-967x7 1/1 Running 0 3m55s NAME READY STATUS RESTARTS AGE csdr-controller-69787f6dc8-f886h 1/1 Running 0 3m39s csdr-velero-58494f6bf4-52mv6 1/1 Running 0 3m37s
ステップ 3: バックアップクラスタにバックアップを作成する
OSS バケットを作成するという名前で、バックアップ クラスタのリージョンに
cnfs-oss-*という名前の OSS バケットを作成して、バックアップを保存します。説明デフォルトでは、ACK マネージドクラスターには、
cnfs-oss-*migrate-controller をインストールし、権限を付与する という名前の OSS バケットに対する権限があります。 OSS バケットがこの命名規則に準拠していない場合は、追加の権限を付与する必要があります。 詳細については、「」をご参照ください。次のコマンドを実行して、リアルタイム バックアップ タスクを作成します。
コンソールでバックアップ パラメーターを構成する方法の詳細については、「ACK クラスタで アプリケーション をバックアップおよびリストアする」をご参照ください。実際のシナリオに基づいて、このステップで推奨される構成を変更できます。
cat << EOF | kubectl apply -f - apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: '{"name":"<Backup vault name>","region":"<Region ID, such as cn-beijing>","bucket":"<Name of the OSS bucket associated with the backup vault>","provider":"alibabacloud"}' // バックアップ場所に関するアノテーション。{"name":"<バックアップ ボールト名>","region":"<リージョン ID、例: cn-beijing>","bucket":"<バックアップ ボールトに関連付けられた OSS バケットの名前>","provider":"alibabacloud"} labels: csdr/schedule-name: fake-name name: <Backup name> // バックアップ名 namespace: csdr spec: excludedNamespaces: // 除外する名前空間のリスト - csdr - kube-system - kube-public - kube-node-lease excludedResources: // 除外するリソースのリスト - storageclasses - clusterroles - clusterrolebindings - events - persistentvolumeclaims - persistentvolumes includeClusterResources: true // クラスタレベルのリソースを含めるかどうか pvBackup: defaultPvBackup: true // ボリューム内のデータをバックアップするかどうか storageLocation: <Backup vault name> // バックアップ ボールト名 ttl: 720h0m0s // バックアップの有効期限 EOFパラメーター
説明
excludedNamespaces
バックアップ タスクから除外する名前空間のリスト。次の名前空間を除外することをお勧めします。
csdr: バックアップ センターの名前空間。バックアップ センターは、クラスタ間でデータを自動的に同期します。 csdr 名前空間のバックアップおよびリストア タスクを手動でバックアップしないでください。そうしないと、例外が発生する可能性があります。kube-system、kube-public、およびkube-node-lease: ACK クラスタのデフォルトの名前空間。これらの名前空間は、クラスタのパラメーターまたは構成が異なるため、直接リストアすることはできません。
excludedResources
バックアップ タスクから除外するリソースのリスト。ビジネス要件に基づいてリストを構成します。
includeClusterResources
StorageClass、CustomResourceDefinitions(CRD)、Webhook など、すべてのクラスタレベルのリソースをバックアップするかどうかを指定します。
true: すべてのクラスタレベルのリソースをバックアップします。false: 指定された名前空間の名前空間レベルのリソースで使用されるクラスタレベルのリソースのみをバックアップします。たとえば、システムがポッドをバックアップすると、ポッドで使用される サービスアカウント にクラスタ ロールが割り当てられます。この場合、クラスタ ロールは自動的にバックアップされます。システムがCustomResource(CR)をバックアップすると、対応するCRDがバックアップされます。
説明IncludeClusterResourcesfalseデフォルトでは、ACK コンソール で作成されたバックアップ タスクの場合、IncludeClusterResources は false に設定されています。defaultPvBackup
ボリューム内のデータをバックアップするかどうかを指定します。
true: 実行中のポッドで使用される アプリケーション とボリューム内のデータをバックアップします。false: アプリケーションのみをバックアップします。
重要デフォルトでは、Kubernetes と CSI のバージョンが両方とも 1.18 以降のクラスタでは、Elastic Compute Service(ECS)スナップショットが作成されてディスク ボリュームがバックアップされます。Cloud Backup は、前述のクラスタ内の他のタイプのボリューム、または Kubernetes と CSI のバージョンが 1.16 から 1.18(1.18 を除く)のクラスタ内のディスク ボリュームをバックアップするために使用されます。
実行中のポッドで使用されていないボリュームの場合、リストア クラスタに静的にプロビジョニングされた PV と PVC を手動で作成し、ディスク ID や OSS バケットなどのボリューム ソースを指定する必要があります。これは、このシナリオではデータ ソースを変更できないことを意味します。
ビジネスがデータ整合性に強く依存している場合は、バックアップ プロセス中に書き込み操作を一時停止する必要があります。データ ソースを変更せずに アプリケーション のみバックアップすることもできます。
次のコマンドを実行して、バックアップタスクのステータスをクエリします。
kubectl -ncsdr describe applicationbackup <バックアップ名>出力の
Status列のPhaseがCompletedに変わると、バックアップ タスクが作成されます。次のコマンドを実行して、バックアップが正常に作成されたことを確認します。
kubectl get backups.velero.io -n csdrバックアップリストでスキップされたリソースを表示し、バックアップパラメーターを変更してから、バックアップタスクを再実行できます。
NAME STATUS CREATED EXPIRES STORAGE LOCATION SELECTOR nginx-backup Completed 2023-11-28 12:00:00 +0000 UTC <never> default app=nginx
ステップ 4: リストアクラスタにバックアップセンターをインストールする
復元クラスターにバックアップセンターをインストールします。詳細については、「手順 2: バックアップクラスターにバックアップセンターをインストールする」をご参照ください。
上記のバックアップボールトを復元クラスターに関連付けます。
ACK コンソール にログオンします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[アプリケーションバックアップ] ページで、[復元] をクリックします。
[バックアップボールト] ドロップダウンリストからバックアップボールトを選択し、[バックアップボールトの初期化] をクリックして、システムが現在のクラスターにバックアップを同期するまで待ちます。
ステップ 5: アプリケーションをリストアする
ほとんどのシナリオでは、リストア クラスタでリストア タスクを作成するために 手順 6 を実行するだけで済みます。バックアップ センターがバックアップから PV と PVC を自動的に作成します。
データを保護するために、バックアップ センターがリストア タスクを実行する場合、バックアップと同じ名前の既存の PV および PVC を再作成したり、上書きしたりすることはありません。以下のシナリオでは、リストア タスクが開始される前に PV および PVC を作成できます。
一部のボリュームに保存されているログをスキップして、ボリュームをバックアップする場合。
実行中のポッドで使用されていないボリュームをバックアップする場合。
ボリュームをバックアップしたくない、excludedResources リストに persistentvolumeclaims と persistentvolumes が指定されている、または FlexVolume から CSI にアプリケーションを移行する場合。
手順:
ゾーンをまたいでディスクをマウントすることはできません。リストア クラスター内の別のゾーンにリソースをリストアする場合は、次のソリューションのいずれかを使用します。
データソースを変更してデータを同期します。
ECS コンソール にログインします。スナップショットを作成する ディスクのスナップショットを作成し、新しいゾーンのスナップショットからディスクを作成します。詳細については、「ディスクのスナップショットを作成する」をご参照ください。
outputfile.txtという名前の次の YAML ファイルで、nodeAffinity のゾーン ID とディスク ID を置き換えます。
(オプション) バックアップ クラスタが FlexVolume を使用している場合は、FlexVolume と CSI によって管理される PV と PVC の YAML ファイルが異なるため、Flexvolume2CSI CLI を使用して YAML ファイルを一括変換する必要があります。詳細については、「FlexVolume2CSI CLI を使用して YAML ファイルを一括変換する」をご参照ください。
次のコマンドを実行して、Flexvolume2CSI を使用して CSI でサポートされている YAML ファイルを生成します。
outputfile.txtは、Flexvolume2CSI によって生成された YAML ファイルです。kubectl apply -f outputfile.txt次のコマンドを実行して、リストア クラスタの PVC が Bound 状態であることを確認します。
kubectl get pvc期待される結果:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-essd Bound d-2ze88915lz1il0xxxxxx 20Gi RWO alicloud-disk-essd 29m pvc-nas Bound pv-nas 5Gi RWX nas 29m
ステップ 6: リストア クラスタでリストア タスクを作成する
復元クラスターに同じ名前のリソースが既に存在する場合、復元タスクはそのリソースをスキップします。
バックアップセンターは、アプリケーションのバックアップと復元のために開発されました。復元タスクを実行する前に、復元クラスターにシステムコンポーネントをインストールして構成する必要があります。例:
コンテナーレジストリ パスワード不要イメージプルコンポーネント: 解凍クラスターで acr-configuration に権限を付与し、構成する必要があります。
ALB Ingress コンポーネント: ALBConfig を構成する必要があります。
サービスを解凍する場合は、次の点に注意してください。
NodePort サービス: デフォルトでは、クラスター間でサービスを解凍する場合、サービス ポートは保持されます。
LoadBalancer サービス: デフォルトでは、ExternalTrafficPolicy が Local に設定されている場合、ランダムな HealthCheckNodePort が使用されます。ポートを保持するには、解凍タスクを作成するときに
spec.preserveNodePorts: trueを指定します。バックアップ クラスター内の既存の SLB インスタンスを使用するサービスを解凍する場合、解凍されたサービスは同じ SLB インスタンスを使用し、デフォルトでリスナーを無効にします。 SLB コンソールにログインして、リスナーを設定する必要があります。
LoadBalancer サービスは、バックアップ クラスターのクラウド コントローラー マネージャー ( CCM ) によって管理されます。 LoadBalancer サービスを解凍すると、CCM は解凍されたサービスの SLB インスタンスを自動的に作成します。詳細については、「LoadBalancer タイプのサービスを構成する場合の考慮事項」をご参照ください。
ボリュームをバックアップすることを選択した場合、リストア クラスターは異なるデータソースを使用します。 convertedarg を使用してボリューム タイプを変換できます。たとえば、NAS ボリュームをディスク ボリュームに変換できます。ビジネス要件に基づいて StorageClass を選択できます。
この例では、バックアップ クラスターは Kubernetes 1.16 を実行し、FlexVolume を使用します。ディスク ボリュームは、Cloud Backup を使用してバックアップされます。そのため、disk-essd PVC には alicloud-disk ストレージクラスを指定できます。これにより、ボリュームは CSI によって管理されるディスク ボリュームに変換されます。デフォルトの StorageClass は alicloud-disk-topology-alltype です。バックアップ クラスターが Kubernetes 1.18 以降を実行し、CSI を使用している場合は、ディスク ボリュームを変換する必要はありません。
この例では、pvc-nas PVC に alibabacloud-cnfs-nas StorageClass が指定されています。 これにより、FlexVolume によって管理される NAS ボリュームが CNFS によって管理される NAS ボリュームに変換されます。 クラスタで alibabacloud-cnfs-nas StorageClass を使用していない場合は、「CNFS を使用して NAS ファイルシステムを管理する(推奨)」をご参照ください。
手順:
復元タスクを作成するには、次のコマンドを実行します。
コンソールで復元タスクを構成する方法の詳細については、「ACK クラスタで アプリケーション をバックアップおよび復元する」をご参照ください。実際のシナリオに基づいて、この手順で推奨される構成を変更できます。
cat << EOF | kubectl apply -f - apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: csdr.alibabacloud.com/backuplocations: >- '{"name":"<Backup vault name>","region":"<Region ID, such as cn-beijing>","bucket":"<Name of the OSS bucket associated with the backup vault>","provider":"alibabacloud"}' // バックアップボールト名、リージョンID、関連付けられたOSSバケット名などを指定します。 name: <Restore name> // 復元名 namespace: csdr spec: backupName: <Backup name> // バックアップ名 excludedNamespaces: // 除外する名前空間のリスト - arms-prom excludedResources: // 除外するリソースのリスト - secrets appRestoreOnly: false convertedarg: // StorageClass変換リスト - convertToStorageClassType: alicloud-disk-topology-alltype // 目的のStorageClass namespace: default // PVCの名前空間 persistentVolumeClaim: alicloud-disk // PVCの名前 - convertToStorageClassType: alibabacloud-cnfs-nas // 目的のStorageClass namespace: default // PVCの名前空間 persistentVolumeClaim: pvc-nas // PVCの名前 namespaceMapping: // 名前空間マッピング <backupNamespace>: <restoreNamespace> EOFパラメーター
説明
excludedNamespaces
除外する名前空間のリスト。バックアップリストにある名前空間を復元タスクから除外できます。
excludedResources
除外するリソースのリスト。バックアップリストにあるリソースを復元タスクから除外できます。
appRestoreOnly
ボリュームバックアップからボリュームを復元するかどうかを指定します。
true: バックアップセンターは、新しいデータソースを指す動的にプロビジョニングされた PV と PVC を作成します。このパラメーターは、コンソールで作成された復元タスクに対して true に設定されます。false: 復元タスクが開始される前に、静的にプロビジョニングされたボリュームを手動で作成する必要があります。
説明ほとんどの場合、データソースを変更する場合はパラメーターを
trueに設定し、データソースを変更しない場合はfalseに設定します。convertedarg
StorageClass 変換リスト。 OSS、NAS、CPFS、ローカルボリュームなどのファイルシステムタイプのボリュームの場合、このパラメーターを構成して、復元プロセス中に PVC の StorageClass を指定された StorageClass に変換できます。たとえば、NAS ボリュームをディスクボリュームに変換できます。
convertToStorageClassType: 目的の StorageClass。 StorageClass が現在のクラスターに存在することを確認してください。ディスクまたは NAS StorageClass のみ指定できます。
namespace: PVC の名前空間。
persistentVolumeClaim: PVC の名前。
上記は、StorageClass 変換機能に必要なパラメーターです。
復元タスクのステータスを照会するには、次のコマンドを実行します。
kubectl -ncsdr describe applicationrestore <Backup name>出力の
Status列のPhaseがCompletedに変わると、復元タスクが作成されます。リソースが復元できなかったかどうかを確認し、原因を表示するには、次のコマンドを実行します。
kubectl -ncsdr get pod | grep csdr-velero kubectl -ncsdr exec -it <Name of the csdr-velero pod> -- /velero describe restore <Restore name> --details期待される結果:
Warnings: Velero: <none> Cluster: could not restore, ClusterRoleBinding "kubernetes-proxy" already exists. Warning: the in-cluster version is different than the backed-up version. // ClusterRoleBinding "kubernetes-proxy" はすでに存在するため復元できませんでした。警告: クラスタ内のバージョンはバックアップされたバージョンと異なります。 Namespaces: demo-ns: could not restore, ConfigMap "kube-root-ca.crt" already exists. Warning: the in-cluster version is different than the backed-up version. // ConfigMap "kube-root-ca.crt" はすでに存在するため復元できませんでした。警告: クラスタ内のバージョンはバックアップされたバージョンと異なります。 could not restore, Endpoints "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version. // Endpoints "kubernetes" はすでに存在するため復元できませんでした。警告: クラスタ内のバージョンはバックアップされたバージョンと異なります。 could not restore, Service "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version. // Service "kubernetes" はすでに存在するため復元できませんでした。警告: クラスタ内のバージョンはバックアップされたバージョンと異なります。 Errors: Velero: <none> Cluster: <none> Namespaces: demo-ns: error restoring endpoints/xxxxxx/kubernetes: Endpoints "kubernetes" is invalid: subsets[0].addresses[0].ip: Invalid value: "169.254.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10) // エンドポイント/xxxxxx/kubernetes の復元エラー: エンドポイント "kubernetes" が無効です: subsets[0].addresses[0].ip: 無効な値: "169.254.128.9": リンクローカル範囲 (169.xxx.0.0/16, fe80::/10) にあってはなりません error restoring endpointslices.discovery.k8s.io/demo-ns/kubernetes: EndpointSlice.discovery.k8s.io "kubernetes" is invalid: endpoints[0].addresses[0]: Invalid value: "169.xxx.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10) // endpointslices.discovery.k8s.io/demo-ns/kubernetes の復元エラー: EndpointSlice.discovery.k8s.io "kubernetes" が無効です: endpoints[0].addresses[0]: 無効な値: "169.xxx.128.9": リンクローカル範囲 (169.xxx.0.0/16, fe80::/10) にあってはなりません error restoring services/xxxxxx/kubernetes-extranet: Service "kubernetes-extranet" is invalid: spec.ports[0].nodePort: Invalid value: 31882: provided port is already allocated // サービス/xxxxxx/kubernetes-extranet の復元エラー: サービス "kubernetes-extranet" が無効です: spec.ports[0].nodePort: 無効な値: 31882: 指定されたポートはすでに割り当てられています上記の出力の Warnings 情報は、一部のリソースが復元タスクによってスキップされたことを示しています。 Errors 情報は、NodePort の再利用に失敗したことを示しています。元のポートは、サービスがクラスター間で復元されるときに保持されます。
アプリケーションが正常に動作するかどうかを確認します。
アプリケーションが復元された後、ビジネス制限、コンテナーの例外、またはその他の問題が原因でリソースが異常な状態になっていないかどうかを確認します。異常な状態になっている場合は、手動で問題を修正します。
問題を修正した後、アプリケーションの
apiVersionは自動的に apps/v1 に設定されます。これは、Kubernetes 1.28 を実行する ACK クラスタに推奨されます。