ストレージ ポリシーを構成する

このドキュメントでは、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 で、addressdatacenterclusterresourcePool の値を指定します。

  • 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 では、addressdatacenterclusterresourcePool に指定された値があります。したがって、ユーザー クラスタは、管理クラスタとは異なる 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 を使用する場合は、データストア移行ツールの使用をご覧ください。

以下の手順に沿って登録してください。

  1. すべてのクラスタ VM をターゲット データストアに移行します。手順については、仮想マシンを新しいコンピューティング リソースとストレージに移行するをご覧ください。

  2. 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
    

    クラスタ内のすべてのマシンのすべてのディスクがターゲット データストアに移行されたことを確認します。

  3. gkectl diagnose を実行して、クラスタが正常であることを確認します。

  4. ストレージ ポリシーを更新して、古いデータストアを除外します。そうしないと、新しいボリュームと再作成された VM が古いデータストアに割り当てられる場合があります。