既存の Container Service for Kubernetes (ACK) クラスターのネットワークプラグインまたは Virtual Private Cloud (VPC) は直接変更できません。既存の ACK クラスターのネットワークプラグインまたは VPC を変更する場合、同一リージョン内の別の VPC に新しいクラスターを作成し、元のクラスターから新しいクラスターにアプリケーションを移行する必要があります。ほとんどの場合、新しいクラスターを元のクラスターとは異なるリージョンにデプロイする必要はありません。新しいクラスターは、元のクラスターで使用されている Server Load Balancer (SLB) インスタンスや、ディスク、File Storage NAS (NAS) ファイルシステム、Object Storage Service (OSS) バケットなどのストレージリソースを再利用できます。ACK のバックアップセンター機能を使用して、VPC をまたいでアプリケーションを移行できます。
前提条件
カテゴリ | 前提条件 | 関連操作 |
クラスターとコンポーネント | 新しい Kubernetes バージョンを実行するクラスターから古い Kubernetes バージョンを実行するクラスターにアプリケーションを移行することは推奨されません。
バックアップクラスターとリストアクラスターに次のコンポーネントをインストールする必要があります:
| |
リージョン | バックアップクラスターとリストアクラスターは、同じリージョンに存在する必要があります。 | なし |
バックアップセンター機能で必要なクラウドサービス | ECS スナップショット |
注意事項
バックアップに関する注意事項
バックアップセンターは、削除中のリソースをバックアップしません。
同一 VPC 内の異なるクラスターの Pod は相互に通信できます。バックアップクラスターから別の VPC の新しいクラスターにアプリケーションを移行した後、新しいクラスターの Pod は、バックアップクラスターが存在する VPC 内の Pod および Elastic Compute Service (ECS) インスタンスと通信できません。詳細については、「ACK マネージドクラスターのネットワーク計画」をご参照ください。
リストアに関する注意事項
バックアップセンターは、リストアクラスターに推奨される API バージョンにアプリケーションを優先的にリストアします。リソースの古い Kubernetes バージョンと新しい Kubernetes バージョンの両方でサポートされている API バージョンがない場合、リソースを手動でデプロイする必要があります。例:
Kubernetes 1.16 を実行するクラスターの Deployment は、
extensions/v1beta1、apps/v1beta1、apps/v1beta2、およびapps/v1をサポートします。このシナリオでは、Kubernetes 1.28 を実行するクラスターの Deployment の 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 リソースを手動でリストアする必要があります。リストアクラスターでバックアップクラスターが使用する NAS ボリュームまたは OSS バケットを再利用する場合、両方のクラスターが NAS ボリュームまたは OSS バケットからデータを読み書きできます。ただし、リストアクラスターでバックアップクラスターが使用するディスクを再利用する場合、ディスクはバックアップクラスターからデタッチされ、リストアクラスターにアタッチされます。この場合、バックアップクラスターが使用するディスクボリュームをバックアップし、リストアクラスター用に新しいディスクを作成することを推奨します。
説明移行中にバックアップクラスターのサービスの可用性を確保する必要がある場合や、データ整合性を損なうことができない場合は、バックアップクラスターが使用するディスクを強制的にデタッチしないことを推奨します。
デフォルトでは、Enterprise SSD (ESSD) は高速スナップショット機能をサポートしています。この機能は、バックアッププロセス中のデータセキュリティを確保し、移行プロセスを大幅に高速化します。
課金
バックアップセンター機能は無料です。ただし、この機能を使用する際に、以下の関連サービスに対して課金される場合があります:
OSS は、YAML ファイルなど、ACK クラスター内のリソースのバックアップファイルを保存するために使用できます。OSS の課金ルールに関する詳細については、「課金の概要」をご参照ください。
ディスクスナップショットは、ディスクボリュームのバックアップに使用できます。スナップショットの課金ルールに関する詳細については、「スナップショットの課金」をご参照ください。
説明2023 年 10 月 12 日 11:00 (UTC+08:00) 以降、スナップショットの高速スナップショットストレージや高速スナップショット機能の有効化に対しては課金されなくなりました。詳細については、「高速スナップショット機能の使用」をご参照ください。
デフォルトでは、PL0、PL1、PL2、PL3 のパフォーマンスレベルの ESSD または ESSD AutoPL ディスク用に作成されたスナップショットに対して、高速スナップショット機能が有効になります。
例
このケースでは、NGINX アプリケーション用に nginx-svc という名前の LoadBalancer Service が作成されます。対応する SLB インスタンスは、クラウドコントローラーマネージャー (CCM) によって作成されます。SLB インスタンスの作成方法については、「LoadBalancer Service の設定に関する考慮事項」をご参照ください。
アプリケーションを作成する際は、RAM ユーザーがバケットを操作する権限を持っていることを確認し、url をバケットの実際のエンドポイントに置き換えてください。OSS 静的ボリュームの使用方法に関する詳細については、「権限の付与と OSS 静的ボリュームのマウント」をご参照ください。
移行手順
移行を開始する前に、NAS、OSS、およびディスクボリュームのリクレームポリシーが Retain であることを確認してください。
ステップ 1:新しい VPC での新しい NAS マウントターゲットの作成
バックアップクラスターで使用される NAS ボリュームのタイプに基づいて、新しいマウントターゲットを作成します。
NAS ボリュームが Container Network File System (CNFS) を使用して管理されている場合、まず CNFS によって管理されている NAS ファイルシステムの ID を取得する必要があります。CNFS を使用して管理されている NAS ボリュームをリストアする場合、関連する CNFS オブジェクトと StorageClass もリストアする必要があります。
NAS ボリュームがカスタム StorageClass に基づいて静的または動的にプロビジョニングされている場合、新しい VPC に NAS ファイルシステム用の新しいマウントターゲットを作成し、リストアクラスターに新しい StorageClass とボリュームを作成する必要があります。
CNFS を使用して管理される NAS ボリューム
バックアップクラスターで次のコマンドを実行して、クラスター内の CNFS オブジェクトをクエリします:
kubectl get cnfs -o=custom-columns=name:.metadata.name,filesystemId:.status.fsAttributes.filesystemId想定される出力:
name filesystemId cnfs-nas-c529e33c3f8704e27a8e2abff******** 1caa64****出力に複数の CNFS オブジェクトが表示される場合、複数の NAS ファイルシステムが使用されています。この場合、ファイルシステムごとに新しいマウントターゲットを作成する必要があります。
NAS コンソールにログインして、各ファイルシステムのマウントターゲットを作成します。マウントターゲットにはリストアクラスターが存在する VPC を選択します。マウントターゲットにはリストアクラスターが使用する vSwitch を選択します。詳細については、「マウントターゲットの作成」をご参照ください。
説明同じ VPC 内の異なる vSwitch を使用する ECS インスタンスは、マウントターゲットを使用して NAS ファイルシステムにアクセスできます。
汎用 NAS ファイルシステムまたは Extreme NAS ファイルシステムは、最大 2 つのマウントターゲットをサポートします。使用していないマウントターゲットは解放することを推奨します。
ファイルシステムリスト ページで、目的のファイルシステムを見つけ、管理 をクリックします。[ファイルシステムの詳細] ページで、マウント使用 をクリックします。[マウントポイント] リストの [マウントポイント] 列で、ポインターを
アイコンの上に移動し、マウントポイントのドメイン名を表示して記録します。
次の YAML ファイルを使用して、リストアクラスターに CNFS オブジェクトを作成します。
serverパラメーターの値を、前のステップで取得したマウントターゲットのドメイン名に置き換えます。詳細については、「CNFS を使用した NAS ファイルシステムの管理 (推奨)」をご参照ください。apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-nas-restore-from-c529e33c3f8704e27a8e2abff******** spec: description: cnfs-nas parameters: server: 1caa64****-h****.cn-beijing.nas.aliyuncs.com # マウントターゲットのドメイン名。 storageType: Capacity # 容量型 NAS ファイルシステム。 reclaimPolicy: Retain type: nas任意。クラスター作成時に作成された alibabacloud-cnfs-nas StorageClass を削除します。
説明解凍クラスターの作成時に [デフォルトの NAS ファイルシステムと CNFS を使用したボリュームの動的プロビジョニング、NAS ごみ箱の有効化、および高速データ解凍のサポート] チェックボックスを選択した場合は、
alibabacloud-cnfs-nasStorageClass を削除してから、alibabacloud-cnfs-nasという名前の新しい StorageClass を作成する必要があります。kubectl delete sc alibabacloud-cnfs-nas次の YAML ファイルを使用して、リストアクラスターに alibabacloud-cnfs-nas StorageClass を再作成します。
containerNetworkFileSystemを、ステップ 4 で作成した CNFS オブジェクトの名前に設定します。allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-cnfs-nas mountOptions: - nolock,tcp,noresvport - vers=3 parameters: archiveOnDelete: "false" # 作成した CNFS オブジェクトの名前。 containerNetworkFileSystem: cnfs-nas-restore-from-c529e33c3f8704e27a8e2abff******** path: / volumeAs: subpath provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Delete volumeBindingMode: Immediate
カスタム StorageClass に基づいて静的または動的にプロビジョニングされる NAS ボリューム
NAS コンソールにログインして、各ファイルシステムのマウントターゲットを作成します。マウントターゲットにはリストアクラスターが存在する VPC を選択します。マウントターゲットにはリストアクラスターが使用する vSwitch を選択します。詳細については、「マウントターゲットの作成」をご参照ください。
説明同じ VPC 内の異なる vSwitch を使用する ECS インスタンスは、マウントターゲットを使用して NAS ファイルシステムにアクセスできます。
汎用 NAS ファイルシステムまたは Extreme NAS ファイルシステムは、最大 2 つのマウントターゲットをサポートします。使用していないマウントターゲットは解放することを推奨します。
バックアップクラスターでの元の NAS ボリュームのプロビジョニング方法に基づいて、新しい NAS ボリュームまたは StorageClass を作成します。
静的プロビジョニング:リストアクラスターに永続ボリューム要求 (PVC) と永続ボリューム (PV) を作成し、PV の設定で NAS ファイルシステムの新しいマウントターゲットを指定します。たとえば、次の YAML ファイルは元の PV の設定を示しています。リストアクラスターで PV を作成する際、
serverの値を新しい VPC の新しいマウントターゲットのドメイン名に置き換えます。リストアクラスターで PVC を作成する際、元の PVC の設定をそのまま使用できます。apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 5Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas # PV の名前を指定します。 volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountOptions: - nolock,tcp,noresvport - vers=3動的プロビジョニング:リストアクラスターに StorageClass を作成し、StorageClass の設定で NAS ファイルシステムの新しいマウントターゲットを指定します。たとえば、次の YAML ファイルは元の StorageClass の設定を示しています。リストアクラスターで StorageClass を作成する際、
serverの値を新しい VPC の新しいマウントターゲットのドメイン名に置き換えます。リストアクラスターで PVC を作成する際、元の PVC の設定をそのまま使用できます。allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
ステップ 2:NAS および OSS ボリュームの移行
バックアップクラスターで NAS および OSS ボリュームをプロビジョニングするために使用される永続ボリューム要求 (PVC) と永続ボリューム (PV) にラベルを追加します。これにより、バックアッププロセス中にラベルに基づいて PVC と PV を選択できます。
kubectl label pvc pvc-nas pvc-oss backup="true" kubectl label pv `kubectl get pvc -l backup="true" | grep Bound | awk '{print $3}'| xargs` backup="true"NAS の PVC と PV にタグを付けることで、タグに基づいてマウントポイントの設定をバッチで簡単に変更できます。
kubectl label pvc pvc-nas nas-volume="true" kubectl label pv `kubectl get pvc -l nas-volume="true" | grep Bound | awk '{print $3}'| xargs` nas-volume="true"バックアップクラスターで NAS および OSS ボリュームのバックアップタスクを作成します。詳細については、「バックアッププランの作成または即時バックアップ」の「即時バックアップ」セクションをご参照ください。
重要バックアップタスクを設定するときは、[ラベル] を
backup=trueに、[リソースの指定] をpvc,pvに、[ボリュームのバックアップ] をDisabledに設定します (これにより、ボリュームの YAML ファイルのみがバックアップされます。アプリケーションが解凍されると、ボリュームは新しいマウントポイントを介して VPC をまたいで元のデータソースにアクセスできるため、ボリュームのコピーを作成する必要はありません)。[アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。バックアップレコードの [ステータス] 列に [完了] と表示されている場合、バックアップは作成済みです。
[アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。バックアップレコードの名前をクリックします。次の例は、バックアップレコードの詳細を示します。この例は、すべての NAS および OSS ボリュームがバックアップされていることを示しています。
{ "v1/PersistentVolume": [ "nas-916c0c04-e91e-4fc3-9115-d8a9********", # PV は動的にプロビジョニングされます。 "pv-oss" ], "v1/PersistentVolumeClaim": [ "default/pvc-nas", "default/pvc-oss" ] }
次の YAML ファイルを使用して、リストアクラスターに ConfigMap を作成します。この ConfigMap は、Velero が提供するリソース修飾子を使用して NAS マウントターゲットを変更します。
説明リソース修飾子を使用するには、リストアクラスターに migrate-controller 1.8.2 以降がインストールされており、使用する Resource Access Management (RAM) ユーザーにクラスターに対するロールベースアクセス制御 (RBAC) の管理者権限が付与されていることを確認してください。コンポーネントの更新方法に関する詳細については、「コンポーネントの管理」をご参照ください。RBAC 管理者権限の付与方法に関する詳細については、「RAM ユーザーまたは RAM ロールへの RBAC 権限の付与」をご参照ください。
次の YAML ファイルは一例です。この例では、元の NAS ボリュームはデフォルトの alibabacloud-cnfs-nas StorageClass を使用しています。元の NAS ボリュームが静的または動的にプロビジョニングされている場合は、ボリュームのプロビジョニングに使用される PVC と PV に基づいて YAML ファイルを修正する必要があります。
apiVersion: v1 data: modifier: | version: v1 resourceModifierRules: - conditions: groupResource: pvcs labelSelector: matchLabels: nas-volume: "true" patches: - operation: replace path: "/spec/storageClassName" value: "alibabacloud-cnfs-nas" - conditions: groupResource: pods labelSelector: matchLabels: nas-volume: "true" patches: - operation: replace path: "/spec/csi/volumeAttributes/containerNetworkFileSystem" value: "cnfs-nas-restore-from-c529e33c3f8704e27a8e2abff********" - operation: replace path: "/spec/storageClassName" value: "alibabacloud-cnfs-nas" - operation: remove path: "/spec/csi/volumeAttributes/storage.kubernetes.io/csiProvisionerIdentity" kind: ConfigMap metadata: name: <Backup task name>-resource-modifier namespace: csdr任意:次の YAML テンプレートを使用して、backuplocation.yaml という名前のファイルを作成します。このファイルは、リストアクラスターでバックアップボールトを初期化するために使用されます。バックアップボールトがすでに初期化されている場合は、このステップをスキップしてください。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupLocation metadata: name: <Backup vault name> namespace: csdr spec: backupSyncPeriod: 0s # 次のパラメーターに元のバックアップボールトの設定を指定します。ACK コンソールでリストアクラスターのバックアップボールトを迅速に初期化することもできます。 config: network: internal region: <Region of the OSS bucket associated with the backup vault> objectStorage: bucket: <OSS bucket associated with the backup vault> prefix: <OSS subdirectory associated with the backup vault> provider: alibabacloud次のコマンドを実行して、バックアップがリストアクラスターに同期されているかどうかを確認します:
kubectl get -ncsdr applicationbackup <Backup name>出力が空でない場合、バックアップタスクは同期されています。
次の YAML テンプレートを使用して、applicationrestore.yaml という名前のファイルを作成します。このファイルは、リストアクラスターでリストアタスクを作成するために使用されます。
説明リソース修飾子を使用して高度な操作を実行する場合は、CLI を使用する必要があります。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: name: nas-oss-restore namespace: csdr spec: backupName: <Backup task name> resourceModifier: kind: ConfigMap name: <Backup task name>-resource-modifierkubectl apply -f applicationrestore.yaml解凍タスクが [完了] 状態であることを確認してください。解凍クラスター内の PVC と PV が完全に解凍され、Bound 状態になっていることを確認してください。また、PVC と PV の構成の特定のパラメーターが、解凍クラスターに基づいて変更されていることを確認してください。
ステップ 3:ディスクボリュームの移行
ACK コンソールで即時バックアップタスクを作成する際に、[ボリュームのバックアップ] を選択すると、Bound 状態のボリュームがバックアップされます。
次の YAML テンプレートを使用して、applicationbackup.yaml という名前のファイルを作成します。このファイルは、バックアップクラスター内のすべてのディスクボリュームをバックアップするために使用されます。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: # バックアップボールトがすでにバックアップクラスターで使用されている場合、このアノテーションを追加する必要はありません。 # csdr.alibabacloud.com/backuplocations: >- # {"name":"<Backup vault name>","region":"<Region of the OSS bucket associated with the backup vault>","bucket":"<OSS bucket associated with the backup vault>","prefix":"<OSS subdirectory associated with the backup vault>","provider":"alibabacloud"} name: backup-disk namespace: csdr spec: # includedNamespaces: # ボリュームをバックアップする名前空間 (ディスクボリュームやその他のタイプのボリュームを含む)。このパラメーターまたは pvcList を設定する必要があります。 # - default backupType: PvBackup pvBackup: defaultPvBackup: true pvcList: # バックアップする PVC。このパラメーターを設定すると、includedNamespaces パラメーターは有効になりません。 - name: pvc-disk namespace: default storageLocation: <Backup vault name> ttl: 720h0m0sバックアップクラスターで次のコマンドを実行して、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即時バックアップタスクのステータスが
InprogressからCompletedに変わると、タスクは作成されます。次のコマンドを実行して、バックアップがリストアクラスターに同期されているかどうかを確認します:
kubectl get -ncsdr applicationbackup <Backup name>次の YAML テンプレートを使用して、applicationrestore.yaml という名前のファイルを作成します。このファイルは、リストアクラスターでリストアタスクを作成するために使用されます。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: name: disk-restore namespace: csdr spec: backupName: <Backup task name>kubectl apply -f applicationrestore.yaml解凍タスクが [完了] 状態であることを確認します。解凍クラスター内の PVC と PV が完全に解凍され、Bound 状態になっているかどうかを確認します。また、PV で指定されているディスク ID が更新されていることを確認します。
ステップ 4:Service および Ingress のアノテーション上書きポリシーの設定
バックアップクラスターに nginx-svc という名前の Service を作成します。対応する SLB インスタンスは CCM によって作成されます。SLB インスタンスには、次のアノテーションとラベルがあります:
アノテーション:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.smallラベル:
service.k8s.alibaba/loadbalancer-id: lb-2ze2hxgbuw145******この例では、nginx-svc Service 用に作成された SLB インスタンスの ID は lb-2ze2hxgbuw145****** です。リストアクラスターでこのインスタンスを再利用する場合は、次の YAML ファイルを使用してアノテーション上書きポリシーを設定します:
apiVersion: v1
data:
# use-nlb: "true" は新しい SLB インスタンスが作成される場合にのみ有効です。
default.nginx-svc: |
{"service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id":"lb-2ze2hxgbuw145******","xxx":"yyy"}
# <ns>.<svc>
# {"xxx": "yyy", ...}
kind: ConfigMap
metadata:
name: service-annotation-overwrite
namespace: csdr上記の上書きポリシーは、nginx-svc Service の設定にある service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec アノテーションを service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションに置き換えます。このポリシーを使用して、他のアノテーションを保持または変更することもできます。
Service アノテーションに関する詳細については、「アノテーションを使用した CLB インスタンスの設定」および「アノテーションを使用した NLB インスタンスの設定」をご参照ください。
アノテーション上書きポリシーはすべての設定を上書きします。ポリシーを使用して新しい SLB インスタンスを作成できます。
デフォルトでは、再利用された SLB インスタンスのリスナーは上書きされません。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenersアノテーションのデフォルト値はfalseです。クラスター内のアプリケーションが起動したことを確認してから、トラフィックをリストアクラスターに切り替えることを推奨します。
ingress-annotation-overwrite という名前の ConfigMap を作成して、Ingress を上書きできます。
ステップ 5:アプリケーションの移行 (ボリュームを除く)
アプリケーションのリストア中にリソース設定を変更する場合は、「アプリケーションのリストア中にリソース設定を変更する」をご参照ください。
バックアップクラスターで、移行するアプリケーションをバックアップします。バックアップタスクを設定するときは、[ボリュームデータをバックアップ] を選択しないでください。詳細については、バックアッププランの作成または即時バックアップの「即時バックアップ」セクションをご参照ください。
[アプリケーションバックアップ] ページで、[バックアップレコード] タブをクリックします。バックアップレコードが [完了] 状態であるかどうかを確認します。
バックアップがリストアクラスターに同期されるまで待ってから、バックアップからアプリケーションをリストアします。詳細については、「アプリケーションのリストア」をご参照ください。
[アプリケーションバックアップ] ページで、[復元レコードの表示] をクリックします。復元タスクが [完了] 状態であることを確認します。
リストアクラスターの Deployment ページで、NGINX アプリケーションが起動しているか、また同じボリュームがアプリケーションにマウントされているかを確認します。アプリケーション詳細ページに移動し、nginx-svc Service を見つけて [詳細] をクリックします。Service の詳細ページで、同じ SLB インスタンスが再利用されているかを確認します。
関連ドキュメント
kubectl を使用したアプリケーションの移行方法に関する詳細については、「kubectl を使用したアプリケーションのバックアップとリストア」をご参照ください。
Terraform を使用したアプリケーションのバックアップとリストア方法に関する詳細については、「Terraform を使用したアプリケーションのバックアップとリストア」をご参照ください。