StatefulSet CSI 移行ツールの使用

このドキュメントでは、StatefulSet CSI 移行ツールを使用して、ステートフル ワークロードを in-tree vSphere ボリューム プラグインから GKE on VMware の vSphere CSI ドライバに移行する方法について説明します。

概要

GKE on VMware は、VMware ストレージ、vSphere ストレージ、Kubernetes in-tree Volume プラグイン(または「ドライバ」)、Container Storage Interface(CSI)ドライバを介して、外部ブロック ストレージまたはファイル ストレージ システムと統合されます。

1.15 で Kubernetes CSI 移行機能がデフォルトで有効になっている場合、in-tree vSphere ボリューム プラグインを基盤とする PersistentVolume は CSI のみの環境で引き続き機能します。CSI 移行機能によって、CSI ドライバに in-tree プラグイン オペレーション呼び出しがリダイレクトされます。PersistentVolume の仕様は不変であるため、ツリー内プラグインによって引き続きサポートされます。使用可能な機能のセットは、in-tree ボリューム プラグインと同じです。

ボリューム拡張やボリューム スナップショットなどの CSI 機能の完全なセットは、このようなボリュームでは使用できません。これらの機能を利用するには、vSphere CSI ドライバによってバックアップされる PersistentVolume を再作成して、ステートフル ワークロードを CSI に完全に移行する必要があります。CSI 移行ツールを使用してすると、ステートフル ワークロードを CSI に移行し、CSI 機能のフルセットを使用できます。

このツールには、StatefulSet の PersistentVolume と PersistentVolumeClaim を CSI にローリング マイグレーションする方法があり、アプリケーションのダウンタイムは発生しません。このツールは、ローカル ディレクトリ内に Kubernetes リソースのバックアップを取得し、移行前に ReclaimPolicyRetain に設定します。そのため、データが失われることはありません。

制約事項

  • 自動ツールは、完全にサポートされているバージョンの GKE on VMware でのみサポートされています。

  • StatefulSets でのみ動作します。ツールを使用してプリフライト チェックを実行し、ツールを使用する前にいくつかの安全チェックを実行できます。

./statefulset-csi-migration-tool preflight \
      --kubeconfig ADMIN_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --sts-name STS_NAME \
      --sts-namespace STS_NAMESPACE \
      --intree-storageclass INTREE_STORAGECLASS \
      --csi-storageclass CSI_STORAGECLASS

次のように置き換えます。

  • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス

  • USER_CLUSTER_NAME: StatefulSet がユーザー クラスタで実行されている場合は、ユーザー クラスタの名前を指定します。ワークロードが管理クラスタで実行されている場合は、このフラグを省略します。

  • STS_NAME: StatefulSet の名前。

  • STS_NAMESPACE: StatefulSet の名前空間。

  • INTREE_STORAGECLASS: StatefulSet の PersistentVolume をバックアップする in-tree StorageClass 名。

  • CSI_STORAGECLASS: 移行後に StatefulSet の PersistentVolume をバックアップする CSI StorageClass の名前。

ダウンロード

gs://gke-on-prem-release/statefulset-csi-migration-tool/v0.1/statefulset-csi-migration-tool のツールをダウンロードします。このツールはプレビュー版です。

手順

このセクションでは、StatefulSet を vSphere in-tree vCP 内部プロビジョナー(kubernetes.io/vsphere-volume)から vSphere vCP プロビジョナー(csi.vsphere.vmware.com)に移行するために必要な手順について説明します。

./statefulset-csi-migration-tool rolling-migration all \
      --kubeconfig ADMIN_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --sts-name STS_NAME \
      --sts-namespace STS_NAMESPACE \
      --intree-storageclass INTREE_STORAGECLASS \
      --csi-storageclass CSI_STORAGECLASS \
      --working-directory WORKING_DIRECTORY

次のように置き換えます。

  • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス

  • USER_CLUSTER_NAME: StatefulSet がユーザー クラスタで実行されている場合は、ユーザー クラスタの名前を指定します。ワークロードが管理クラスタで実行されている場合は、このフラグを省略します。

  • STS_NAME: StatefulSet の名前。

  • STS_NAMESPACE: StatefulSet の名前空間。

  • INTREE_STORAGECLASS: StatefulSet の PersistentVolume をバックアップする in-tree StorageClass 名。

  • CSI_STORAGECLASS: 移行後に StatefulSet の PersistentVolume をバックアップする CSI StorageClass の名前。

  • WORKING_DIRECTORY: StatefulSet とその Pod、PersistentVolumeClaim、PersistentVolume の Kubernetes リソース仕様を保存するローカル ディレクトリ。ディレクトリ名は、StatefulSet ごとに一意である必要があります。このディレクトリは空にするか、存在していないことが必要です。ツールでこのディレクトリを作成できるように、このディレクトリを作成しないのが理想的です。

このコマンドによって、次のタスクが実行されます。

  1. StatefulSet とその依存関係(PersistentVolume、PersistentVolumeClaim、Pod レプリカの仕様など)をローカルの作業ディレクトリに作成します。

  2. 孤立した削除ポリシーを持つ StatefulSet を削除します。このステップでは StatefulSet のみを削除しますが、Pod レプリカ、PersistentVolume、PersistentVolumeClaim などの依存関係は削除されません。

  3. 各 Pod を CSI ドライバ(オプション 1 と同様)に移行し、次の操作を行います。

    a. PersistentVolume の ReclaimPolicy フィールドを保持として設定します。

    b. Pod、PersistentVolume、PersistentVolumeClaim を削除します。

    c. 既存の VMDK を FCD に変換します。

    d. PersistentVolume、PersistentVolumeClaim、Pod を再度作成します。

  4. StatefulSet を再作成します。ただし、仕様の PVCTemplate フィールドは CSI StorageClass を指します。StatefulSet コントローラが、孤立したレプリカに再度マッピングされます。