このドキュメントでは、vSphere データストアをストレージ ポリシーベースの管理(SPBM)に移行する方法について説明します。
このページは、ストレージのパフォーマンス、使用状況、費用を構成および管理するストレージ スペシャリストを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザー ロールとタスクをご覧ください。
1.30: GA
1.29: プレビュー
1.16 およびそれ以前: 利用不可
コンテキスト
クラスタ構成ファイルでデータストアを指定できる場所は 4 か所あります。
管理クラスタ: vCenter.datastore
クラスタレベルのユーザー クラスタ(コントロール プレーンノードとすべてのワーカー ノードプールを含む): vCenter.datastore
ユーザー クラスタのコントロール プレーンノード: masterNode.vsphere.datastore
ユーザー クラスタのワーカー ノードプール: nodePools[i].vsphere.datastore
これらのフィールドの継承は次のとおりです。
adminCluster.vCenter.datastore ->
userCluster.vCenter.datastore ->
(userCluster.masterNode.vsphere.datastore and userCluster.nodePools[i].vsphere.datastore)
例:
userCluster.vCenter.datastoreが空の場合、adminCluster.vCenter.datastoreから値を継承します。userCluster.nodePools[i].vsphere.datastoreが空の場合、userCluster.vCenter.datastoreから値を継承します。
同様に、ストレージ ポリシーを指定できる場所は 4 か所あります。
管理クラスタ vCenter.storagePolicyName
クラスタレベルのユーザー クラスタ(コントロール プレーンノードとすべてのワーカー ノードプールを含む): vCenter.storagePolicyName
ユーザー クラスタのコントロール プレーンノード: masterNode.vsphere.storagePolicyName
ユーザー クラスタのワーカー ノードプール: nodePools[i].vsphere.storagePolicyName
storagePolicyName フィールドの継承は、datastore フィールドの場合と同じです。
始める前に
- このプロセスは一方向の移行です。以前の状態に戻すことはできません。
- データストアは、設定する新しいストレージ ポリシーに対応している必要があります。
- 高可用性(HA)管理クラスタのみがサポートされます。管理クラスタが非 HA 管理クラスタの場合は、まず管理クラスタを HA に移行する必要があります。
ユーザー クラスタを移行する
移行に使用する手順は、ユーザー クラスタ全体を移行するか、コントロール プレーンノードとワーカー ノードプールを個別に移行するかによって異なります。このオプションを使用すると、コントロール プレーンノードとワーカー ノードプールに異なるストレージ ポリシーを選択できます。
メンテナンスの時間枠を計画する際は、次の点に注意してください。
クラスタ全体を移行する場合、クラスタの更新は 1 回しか必要ありません。
コントロール プレーンノードとワーカーノード プールを個別に移行するには、2 回のクラスタ更新が必要です。
クラスタ全体
すべてのコントロール プレーンノードとワーカー ノードプールを含むクラスタ全体を移行する場合は、次の手順を使用します。ユーザー クラスタのバージョンは 1.30 以降である必要があります。
ユーザー クラスタ構成ファイルを次のように変更します。
vCenter.storagePolicyNameフィールドにストレージ ポリシーの名前を設定します。以下のものが指定されているなら、削除するかコメントアウトします。
vCenter.datastoreフィールドmasterNode.vsphereセクションnodepools[i].vsphere.datastorenodepools[i].vsphere.storagePolicyName
これらの変更を、次の構成例に示します。
変更前:
vCenter: datastore: ds-1変更後:
vCenter: storagePolicyName: sp-1 # datastore: ds-1ユーザー クラスタを更新します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
次のように置き換えます。
ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。USER_CLUSTER_CONFIG: ユーザー クラスタの構成ファイルのパス。
バンドルされている StorageClass を更新する
クラスタの構成設定を更新してから、バンドルされている StorageClass を更新する必要があります。
バンドルされている
vsphere-csi-driverの現在のデフォルトStorageClass(standard-rwoという名前)を取得し、storage-class.yamlというローカル ファイルに保存します。kubectl get storageclass standard-rwo -oyaml \ --kubeconfig USER_CLUSTER_KUBECONFIG > storage-class.yamlUSER_CLUSTER_KUBECONFIGは、ユーザー クラスタの kubeconfig ファイルのパスに置き換えます。ファイルに変更を加える必要があるため、万一の場合に備えて
storage-class.yamlのコピーを作成します。cp storage-class.yaml storage-class.yaml-backup.yaml
クラスタからデフォルトの
StorageClassを削除します。kubectl delete storageclass standard-rwo \ --kubeconfig USER_CLUSTER_KUBECONFIGstorage-class.yamlの構成を次のように更新します。次のフィールドを削除するか、コメントアウトします。
parameters.datastoreURLresourceVersion
parameters.storagePolicyNameフィールドを追加し、ストレージ ポリシーの名前に設定します。
これらの変更を、次の構成例に示します。
変更前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1変更後:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1変更した
StorageClassをユーザー クラスタに適用します。kubectl apply -f storage-class.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Kubeception ユーザー クラスタのみ
Kubeception ユーザー クラスタの場合は、管理クラスタ内のユーザー クラスタ コントロール プレーンノードの StorageClass を更新する必要があります。Kubeception クラスタでは、構成フィールド enableControlplaneV2 が false に設定されています。Controlplane V2 が有効になっている場合、ユーザー クラスタのコントロール プレーンはユーザー クラスタ自体で実行されます。Controlplane V2 が有効になっていない場合、ユーザー クラスタのコントロール プレーンは管理クラスタで実行されます。これは、kubeception と呼ばれます。
次のコマンドを実行して、クラスタで Controlplane V2 が有効になっているかどうかを確認します。
kubectl get onpremuserclusters --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system -o jsonpath='{.items[0].spec.enableControlplaneV2}' && echo
出力が false の場合は、次の手順で管理クラスタ内のユーザー クラスタ コントロール プレーンノードのデフォルトの StorageClass を更新します。
バンドルされている
vsphere-csi-driverの現在のデフォルトStorageClass(USER_CLUSTER_NAME-csiという名前)を取得し、storage-class-kubeception.yamlというローカル ファイルに保存します。kubectl get storageclass USER_CLUSTER_NAME-csi -oyaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG > storage-class-kubeception.yamlADMIN_CLUSTER_KUBECONFIGは、管理クラスタの kubeconfig のパスに置き換えます。ファイルに変更を加える必要があるため、万一の場合に備えて
storage-class-kubeception.yamlのコピーを作成します。cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
クラスタからデフォルトの
StorageClassを削除します。kubectl delete storageclass USER_CLUSTER_NAME-csi \ --kubeconfig ADMIN_CLUSTER_KUBECONFIGstorage-class-kubeception.yamlの構成を次のように更新します。次のフィールドを削除するか、コメントアウトします。
parameters.datastoreURLresourceVersion
parameters.storagePolicyNameフィールドを追加し、ストレージ ポリシーの名前に設定します。
これらの変更を、次の構成例に示します。
変更前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1変更後:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1変更した
StorageClassを管理クラスタに適用します。kubectl apply -f storage-class-kubeception.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
移行後
移行後に新しいノードプールを作成すると、新しいプールには更新されたクラスタに従って継承ルールが適用されます。
たとえば、vCenter.datastore を特定のストレージ ポリシーに移行したとします。
新しいノードプールを作成し、nodePools[i].vsphere.datastore と nodePools[i].vsphere.storagePolicyName の両方を空のままにすると、新しいノードプールは vCenter.storagePolicyName で指定されたストレージ ポリシーを継承します。
ノードごとに移行する
コントロール プレーンノードとワーカー ノードプールを個別に移行する場合は、次の手順を使用します。
バージョン 1.29 のみ: 現在のクラスタ構成を取得します。ユーザー クラスタのバージョンが 1.30 以降の場合は、この手順は必要ありません。
gkectl get-config cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --cluster-name USER_CLUSTER_NAME \ --output-dir ./gen-files
次のように置き換えます。
ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。USER_CLUSTER_NAME: ユーザー クラスタの名前。
./gen-filesで、user-cluster.yamlを見つけます。構成ファイルの取得の詳細については、クラスタから構成ファイルを生成するをご覧ください。
生成された構成ファイルには、次の例に示すように、クラスタ、
masterNode(コントロール プレーンノード用)、nodepools(ワーカーノード用)の各レベルでdatastore名が設定されています。apiVersion: v1 kind: UserCluster ... # VCenter config in cluster level: vCenter: datastore: ds-1 ... # VCenter config in master node level: masterNode: vsphere: datastore: ds-1 ... # VCenter config in nodepool level: nodepools: - name: pool-1 vsphere: datastore: ds-1 - name: pool-2 vsphere: datastore: ds-1
コントロール プレーンノードを移行する
コントロール プレーンノードを移行する手順は次のとおりです。
ユーザー クラスタの構成ファイルを次のように変更します。
masterNode.vsphere.storagePolicyNameフィールドにストレージ ポリシーの名前を設定します。masterNode.vsphere.datastoreフィールドを削除するか、コメントアウトします。
これらの変更を、次の構成例に示します。
変更前:
masterNode: vsphere: datastore: ds-1変更後:
masterNode: vsphere: # datastore: ds-1 storagePolicyName: sp-1ユーザー クラスタを更新します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
次のように置き換えます。
ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。USER_CLUSTER_CONFIG: ユーザー クラスタの構成ファイルのパス。
更新コマンドが完了するまで待ってから、ノードプールを更新します。
ノードプールを移行する
すべてのノードプールを移行する手順は次のとおりです。
ユーザー クラスタの構成ファイルを次のように変更します。
- 各
nodePools[i].vsphere.storagePolicyNameフィールドにストレージ ポリシーの名前を設定します。 - 各
nodePools[i].vsphere.datastoreフィールドを削除するか、コメントアウトします。
これらの変更を、次の構成例に示します。
変更前:
nodepools: - name: pool-1 vsphere: datastore: ds-1 - name: pool-2 vsphere: datastore: ds-1変更後:
nodepools: - name: pool-1 vsphere: # datastore: ds-1 storagePolicyName: sp-1 - name: pool-2 vsphere: # datastore: ds-1 storagePolicyName: sp-1- 各
ユーザー クラスタを更新します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
必要に応じて、クラスタレベルでストレージ ポリシーを更新する
ユーザー クラスタの場合、クラスタレベルの vCenter セクションの datastore フィールドと storagePolicyName フィールドは、masterNode セクションと nodepools セクションで使用されるデフォルト値です。上記の手順を完了すると、クラスタレベルの vCenter datastore と storagePolicyName の設定は、クラスタ コンポーネントで使用されなくなります。クラスタレベルの vCenter セクションはそのままにするか、masterNode および nodepools と一致するように更新します。
設定をそのままにする場合は、クラスタレベルの vCenter セクションの上に、この設定は masterNode セクションと nodepools セクションの設定によってオーバーライドされ、無視されるというコメントを追加することをおすすめします。
必要に応じて、クラスタレベルの vCenter セクションを masterNode および nodepools セクションと一致するように変更し、次の手順でクラスタを更新できます。
ユーザー クラスタ構成ファイルを次のように変更します。
vCenter.storagePolicyNameフィールドにストレージ ポリシーの名前を設定します。vCenter.datastoreフィールドを削除するか、コメントアウトします。
ユーザー クラスタを更新します。
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
この更新コマンドはクラスタに変更を加えませんが、サーバーサイド(
OnPremUserCluster)のvCenter.datastoreおよびvCenter.storagePolicyNameフィールドを更新します。
バンドルされている StorageClass を更新する
構成設定を更新したら、バンドルされている StorageClass を更新する必要があります。
バンドルされている
vsphere-csi-driverの現在のデフォルトStorageClass(standard-rwoという名前)を取得し、storage-class.yamlというローカル ファイルに保存します。kubectl get storageclass standard-rwo -oyaml \ --kubeconfig USER_CLUSTER_KUBECONFIG > storage-class.yamlUSER_CLUSTER_KUBECONFIGは、ユーザー クラスタの kubeconfig ファイルのパスに置き換えます。ファイルに変更を加える必要があるため、万一の場合に備えて
storage-class.yamlのコピーを作成します。cp storage-class.yaml storage-class.yaml-backup.yaml
クラスタからデフォルトの
StorageClassを削除します。kubectl delete storageclass standard-rwo \ --kubeconfig USER_CLUSTER_KUBECONFIGstorage-class.yamlの構成を次のように更新します。次のフィールドを削除するか、コメントアウトします。
parameters.datastoreURLresourceVersion
parameters.storagePolicyNameフィールドを追加し、ストレージ ポリシーの名前に設定します。
これらの変更を、次の構成例に示します。
変更前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1変更後:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1変更した
StorageClassをユーザー クラスタに適用します。kubectl apply -f storage-class.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
Kubeception ユーザー クラスタのみ
Kubeception ユーザー クラスタの場合は、管理クラスタ内のユーザー クラスタ コントロール プレーンノードの StorageClass を更新する必要があります。Kubeception クラスタでは、構成フィールド enableControlplaneV2 が false に設定されています。Controlplane V2 が有効になっている場合、ユーザー クラスタのコントロール プレーンはユーザー クラスタ自体で実行されます。Controlplane V2 が有効になっていない場合、ユーザー クラスタのコントロール プレーンは管理クラスタで実行されます。これは、kubeception と呼ばれます。
次のコマンドを実行して、クラスタで Controlplane V2 が有効になっているかどうかを確認します。
kubectl get onpremuserclusters --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system -o jsonpath='{.items[0].spec.enableControlplaneV2}' && echo
出力が false の場合は、次の手順で管理クラスタ内のユーザー クラスタ コントロール プレーンノードのデフォルトの StorageClass を更新します。
バンドルされている
vsphere-csi-driverの現在のデフォルトStorageClass(USER_CLUSTER_NAME-csiという名前)を取得し、storage-class-kubeception.yamlというローカル ファイルに保存します。kubectl get storageclass USER_CLUSTER_NAME-csi -oyaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG > storage-class-kubeception.yamlADMIN_CLUSTER_KUBECONFIGは、管理クラスタの kubeconfig のパスに置き換えます。ファイルに変更を加える必要があるため、万一の場合に備えて
storage-class-kubeception.yamlのコピーを作成します。cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
クラスタからデフォルトの
StorageClassを削除します。kubectl delete storageclass USER_CLUSTER_NAME-csi \ --kubeconfig ADMIN_CLUSTER_KUBECONFIGstorage-class-kubeception.yamlの構成を次のように更新します。次のフィールドを削除するか、コメントアウトします。
parameters.datastoreURLresourceVersion
parameters.storagePolicyNameフィールドを追加し、ストレージ ポリシーの名前に設定します。
これらの変更を、次の構成例に示します。
変更前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1変更後:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1変更した
StorageClassを管理クラスタに適用します。kubectl apply -f storage-class-kubeception.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
管理クラスタを移行する
管理クラスタもストレージ ポリシー名で更新されていることを確認します。
管理クラスタの構成ファイルを次のように変更します。
vCenter.datastoreフィールドを削除するか、コメントアウトします。vCenter.storagePolicyNameフィールドにストレージ ポリシーの名前を設定します。
管理クラスタを更新します。
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
次のように置き換えます。
ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルへのパス。ADMIN_CLUSTER_CONFIG: 管理クラスタの構成ファイルへのパス。
SPBM を使用したストレージの移行
データストアから SPBM への移行後、クラスタは SPBM を使用するようになります。ただし、この移行では、古いデータストアからストレージ ワークロード(マシン データディスクやコンテナ ボリュームなど)は移動されません。
ストレージ ワークロードを移動するには、ストレージ ポリシーベースの管理によるストレージの移行をご覧ください。