このドキュメントでは、GKE on VMware クラスタの VM ストレージ ポリシーを構成する方法について説明します。
概要
vSphere では、ストレージ ポリシーベースの管理(SPBM)を使用して、仮想マシンのアプリケーション需要に合わせてストレージを調整できます。これは、幅広いデータサービスとストレージ ソリューションにわたって単一の統合コントロール パネルとして機能するストレージ ポリシー フレームワークを提供します。
Anthos clusters on VMware では、データストアを指定する代わりに、ストレージ ポリシーを指定できます。アプリケーションの要件に基づいてストレージ ポリシーを定義すると、vSphere が自動的にデータストアを選択して管理します。これにより、ストレージに伴うオーバーヘッドとメンテナンスを減らすことができます。
継承
ストレージ ポリシーは、ユーザー クラスタ、ユーザー クラスタ内のノードプール、またはユーザー クラスタ内のコントロール プレーン ノードのセットに指定できます。管理クラスタに高可用性コントロール プレーンがあり、Windows ノードプールがない場合は、管理クラスタのストレージ ポリシーを指定することもできます。
ユーザー クラスタのストレージ ポリシーを指定すると、そのポリシーはユーザー クラスタ内のノードプールに継承されます。個々のノードプールにストレージ ポリシーを指定すると、そのポリシーがクラスタレベルのストレージ ポリシーの代わりに使用されます。同様に、個々のノードプールにデータストアを指定すると、そのデータストアがクラスタレベルのストレージ ポリシーの代わりに使用されます。
Controlplane V2 が有効になっているユーザー クラスタでは、クラスタレベルのストレージ ポリシーがコントロール プレーン ノードに継承されます。コントロール プレーン ノードにストレージ ポリシーまたはデータストアを指定すると、そのストレージ ポリシーまたはデータストアが、クラスタレベルのストレージ ポリシーの代わりに使用されます。
データストアへのストレージ ポリシーの適用
ストレージ ポリシーは、1 つのデータストアまたは複数のデータストアに適用できます。 複数のデータストアにストレージ ポリシーを適用した場合、管理クラスタ、ユーザー クラスタ、ノードプールのストレージ リソースは、データストアに分散できます。
例: ストレージ ポリシーとユーザー クラスタを作成する
このセクションでは、ストレージ ポリシーとユーザー クラスタを作成する例を示します。この例は、ストレージ ポリシーが 2 つのデータストアに適用できることを示しています。
データストアにタグを適用する
この例の手順を行うには、vSphere 環境に少なくとも 2 つのデータストアが必要です。
ユーザー クラスタのノードをホストする vSphere クラスタは、この演習で使用するデータストアにアクセスできる必要があります。これを検証するプリフライト チェックがあります。
タグの適用に使用する vCenter アカウントには、ルート vCenter Server に対する次の vSphere のタグ付け権限が必要です。
- vSphere Tagging.Create vSphere タグ
- vSphere Tagging.Create vSphere タグカテゴリ
- vSphere Tagging.Assign または vSphere タグ付け解除
vSphere クライアントで、この演習に使用するすべてのデータストアに同じタグを割り当てます。手順については、データストアへのタグの割り当てをご覧ください。
詳細については、vSphere のタグおよび属性をご覧ください。
ストレージ ポリシーを作成する
vSphere クライアントで、タグベースのプレースメント用の VM ストレージ ポリシーを作成します。ストレージ ポリシーで、選択したデータストアに適用したタグを指定します。手順については、タグベースの配置用に仮想マシン ストレージ ポリシーを作成をご覧ください。
詳細については、仮想マシン ストレージ ポリシーの作成と管理をご覧ください。
vSAN データストアを使用している場合は、vSAN のポリシーをご覧ください。
ユーザー クラスタの作成
この演習では、高可用性コントロール プレーンを持つユーザー クラスタを作成するため、3 つのコントロール プレーン ノードがあります。コントロール プレーン ノードに加えて、6 つのワーカーノード(3 つは 1 つのノードプールに、3 つは 2 番目のノードプールに)があります。すべてのノードが静的 IP アドレスを使用します。
まず、ユーザー クラスタを作成する(ControlPlane V2)の手順を行います。
ユーザー クラスタの構成ファイルに次のように入力します。
vCenter.storagePolicyName
の値を既存のストレージ ポリシーの名前に設定します。vCenter.datastore
には値を設定しないでください。ノードプールを 2 つ指定します。最初のノードプールには、データストアとストレージ ポリシーを指定しないでください。2 番目のノードプールでは、
vsphere.datastore
の値を既存のデータストアの名前に設定します。
クラスタ構成ファイルの例
次に、IP ブロック ファイルとユーザー クラスタ構成ファイルの一部の例を示します。
user-ipblock.yaml
blocks: - netmask: 255.255.255.0 gateway: 172.16.21.1 ips: - ip: 172.16.21.2 - ip: 172.16.21.3 - ip: 172.16.21.4 - ip: 172.16.21.5 - ip: 172.16.21.6 - ip: 172.16.21.7 - ip: 172.16.21.8
user-cluster-yaml
apiVersion: v1 kind: UserCluster ... vCenter: storagePolicyName: "my-storage-policy" network: hostConfig: dnsServers: - "203.0.113.2" - "198.51.100.2" ntpServers: - "216.239.35.4" ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" controlPlaneIPBlock: netmask: "255.255.255.0" gateway: "172.16.21.1" ips: - ip: "172.16.21.9" hostname: "cp-vm-1" - ip: "172.16.21.10" hostname: "cp-vm-2" - ip: "172.16.21.11" hostname: "cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" ingressVIP: "172.16.21.30" kind: MetalLB metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.21.30-172.16.21.39" ... enableControlplaneV2: true masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-pool-1" enableLoadBalancer: true - name: "worker-pool-2" vSphere: datastore: "my-np2-datastore" ...
上記の例で理解しておくべき重要なポイントは、次のとおりです。
ワーカーノードの静的 IP アドレスは、IP ブロック ファイルに指定されています。IP ブロック ファイルには、ワーカーノードが 6 つしかなくてもアドレスが 7 つあります。その追加の IP アドレスは、クラスタのアップグレード、更新、自動修復に必要なものです。
コントロール プレーン ノード 3 つの静的 IP アドレスは、ユーザー クラスタ構成ファイルの
network.controlPlaneIPBlock
セクションで指定されます。このブロックに追加の IP アドレスは必要ありません。masterNode.replicas
フィールドは3
に設定されているため、コントロール プレーン ノードが 3 つになります。masterNode
で、vsphere.datastore
またはvsphere.storagePolicyName
に何も指定されていません。そのため、コントロール プレーン ノードはvCenter.storagePolicyName
で指定されたストレージ ポリシーを使用します。ユーザー クラスタ構成ファイルには
vCenter.storagePolicy
の値は含まれていますが、vCenter.datastore
の値は含まれていません。指定したストレージ ポリシーは、独自のストレージ ポリシーまたは独自のデータストアを指定していないプール内のノードで使用されます。node-pool-1
で、vsphere.datastore
またはvsphere.storagePolicyName
に何も指定されていません。そのため、node-pool-1
内のノードはvCenter.storagePolicyName
で指定されたストレージ ポリシーを使用します。node-pool-2
ではvsphere.datastore
の値はmy-np2-datastore
であるため、node-pool-2
のノードはそのデータストアを使用し、ストレージ ポリシーを使用しません。
ユーザー クラスタを作成する(Controlplane V2)の説明に沿って、ユーザー クラスタの作成を続行します。
管理クラスタとは別のデータセンターにユーザー クラスタを作成する
ユーザー クラスタは、管理クラスタとは別のデータセンターに配置できます。2 つのデータセンターでは、vCenter Server の同じインスタンス、または異なる vCenter Server のインスタンスを使用できます。
このセクションでは、管理クラスタとは別の vCenter Server のインスタンスを使用するユーザー クラスタを作成する方法の例を示します。ユーザー クラスタと管理クラスタは vCenter Server の個別のインスタンスを使用するため、別々のデータセンターに配置されます。
まず、ユーザー クラスタを作成する(ControlPlane V2)の手順を行います。
ユーザー クラスタの構成ファイルに次のように入力します。
vCenter.storagePolicyName
の値を既存のストレージ ポリシーの名前に設定します。vCenter.datastore
には値を設定しないでください。vCenter
で、address
、datacenter
、cluster
、resourcePool
の値を指定します。network.vCenter.networkName
の値を指定します。ノードプールを 2 つ指定します。最初のノードプールには、データストアとストレージ ポリシーを指定しないでください。2 番目のノードプールでは、
vsphere.datastore
の値を既存のデータストアの名前に設定します。
クラスタ構成ファイルの例
次に、IP ブロック ファイルとユーザー クラスタ構成ファイルの一部の例を示します。
user-ipblock.yaml
blocks: - netmask: 255.255.255.0 gateway: 172.16.21.1 ips: - ip: 172.16.21.2 - ip: 172.16.21.3 - ip: 172.16.21.4 - ip: 172.16.21.5 - ip: 172.16.21.6 - ip: 172.16.21.7 - ip: 172.16.21.8
user-cluster-yaml
apiVersion: v1 kind: UserCluster ... vCenter: address: "my-vcenter-server-2.my-domain.example" datacenter: "my-uc-data-center" cluster: "my-uc-vsphere-cluster" resourcePool: "my-uc-resource-pool" storagePolicyName: "my-storage-policy" network: vCenter: networkName: "my-uc-network" hostConfig: dnsServers: - "203.0.113.2" - "198.51.100.2" ntpServers: - "216.239.35.4" ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" controlPlaneIPBlock: netmask: "255.255.255.0" gateway: "172.16.21.1" ips: - ip: "172.16.21.9" hostname: "cp-vm-1" - ip: "172.16.21.10" hostname: "cp-vm-2" - ip: "172.16.21.11" hostname: "cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" ingressVIP: "172.16.21.30" kind: MetalLB metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.21.30-172.16.21.39" ... enableControlplaneV2: true masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-pool-1" enableLoadBalancer: true - name: "worker-pool-2" vSphere: datastore: "my-np2-datastore" ...
上記の例で理解しておくべき重要なポイントは、次のとおりです。
ユーザー クラスタ構成ファイルには
vCenter.storagePolicy
の値は含まれていますが、vCenter.datastore
の値は含まれていません。指定したストレージ ポリシーは、独自のストレージ ポリシーまたは独自のデータストアを指定しないノードプール内のノードで使用されます。vCenter
では、address
、datacenter
、cluster
、resourcePool
に指定された値があります。したがって、ユーザー クラスタは、管理クラスタとは異なる vCenter Server、データセンター、vSphere クラスタ、リソースプールを使用します。network.vCenter.networkName
に指定された値があります。masterNode.replicas
フィールドは3
に設定されているため、コントロール プレーン ノードが 3 つになります。masterNode
で、vsphere.datastore
またはvsphere.storagePolicyName
に何も指定されていません。したがって、コントロール プレーン ノードではvCenter.storagePolicyName
で指定されたストレージ ポリシーを使用します。node-pool-1
では、vsphere.datastore
またはvsphere.storagePolicyName
に何も指定されていません。そのため、node-pool-1
内のノードはvCenter.storagePolicyName
で指定されたストレージ ポリシーを使用します。node-pool-2
ではvsphere.datastore
の値はmy-np2-datastore
であるため、node-pool-2
のノードはそのデータストアを使用し、ストレージ ポリシーを使用しません。
ユーザー クラスタを作成する(Controlplane V2)の説明に沿って、ユーザー クラスタの作成を続行します。
ストレージの vMotion の使用
このセクションでは、SPBM を使用するクラスタでストレージ vMotion を使用する方法について説明します。SPBM を使用しないクラスタでストレージ vMotion を使用する場合は、データストア移行ツールの使用をご覧ください。
以下の手順に沿って登録してください。
すべてのクラスタ VM をターゲット データストアに移行します。手順については、仮想マシンを新しいコンピューティング リソースとストレージに移行するをご覧ください。
VM が新しいデータストアに正常に移行されたことを確認します。
クラスタの Machine オブジェクトを取得します。
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines --output yaml
出力の
status.disks
で、VM にアタッチされているディスクを確認できます。次に例を示します。status: addresses: – address: 172.16.20.2 type: ExternalIP disks: – bootdisk: true datastore: pf-ds06 filepath: ci-bluecwang-head-xvz2ccv28bf9wdbx-2/ci-bluecwang-head-xvz2ccv28bf9wdbx-2.vmdk uuid: 6000C29d-8edb-e742-babc-9c124013ba54 – datastore: pf-ds06 filepath: anthos/gke-admin-nc4rk/ci-bluecwang-head/ci-bluecwang-head-2-data.vmdk uuid: 6000C29e-cb12-8ffd-1aed-27f0438bb9d9
クラスタ内のすべてのマシンのすべてのディスクがターゲット データストアに移行されたことを確認します。
gkectl diagnose
を実行して、クラスタが正常であることを確認します。ストレージ ポリシーを更新して、古いデータストアを除外します。そうしないと、新しいボリュームと再作成された VM が古いデータストアに割り当てられる場合があります。