配置存储政策

本文档介绍如何为 GKE on VMware 集群配置虚拟机存储政策

概览

在 vSphere 中,基于存储政策的管理 (SPBM) 可帮助存储与虚拟机的应用需求保持一致。它提供了一个存储政策框架,用作各种数据服务和存储解决方案的单个统一控制台。

在 Anthos cluster on VMware 中,您可以指定存储政策来代替指定数据存储区。您可以根据应用要求定义存储政策,然后 vSphere 会自动选择和管理数据存储区。这样可以减少与存储相关的开销和维护。

沿用情况

您可以为用户集群、用户集群中的节点池或用户集群中的一组控制平面节点指定存储政策。只要管理员集群具有高可用性控制平面并且没有任何 Windows 节点池,您就可以为管理员集群指定存储政策。

如果为用户集群指定存储政策,则用户集群中的节点池会继承该政策。如果您为单个节点池指定存储政策,则系统会使用该政策而不是集群级存储政策。同样,如果您为单个节点池指定数据存储区,则系统会使用该数据存储区,而不是集群级存储政策。

在启用了 Controlplane V2 的用户集群中,控制平面节点会继承集群级存储政策。如果您为控制平面节点指定存储政策或数据存储区,则系统会使用该存储政策或数据存储区,而不是集群级存储政策。

将存储政策应用于数据存储区

您可以将存储政策应用于单个数据存储区或多个数据存储区。如果您将存储政策应用于多个数据存储区,则管理员集群、用户集群或节点池的存储资源可以分布在数据存储区之间。

示例:创建存储政策和用户集群

本部分举例说明了如何创建存储政策和用户集群。该示例阐述了存储政策可应用于两个数据存储区的观点。

将标记应用于数据存储区

如需执行本示例中的步骤,您的 vSphere 环境必须至少有两个数据存储区

将为您的用户集群托管节点的 vSphere 集群必须有权访问您计划用于本练习的数据存储区。有一项用于验证这一点的预检检查。

您用于应用标记的 vCenter 账号必须拥有根 vCenter Server 的以下 vSphere 标记权限

  • vSphere Tagging.Create vSphere Tag
  • vSphere 标记。创建 vSphere 标记类别
  • vSphere 标记。分配或取消分配 vSphere 标记

在 vSphere 客户端中,为您选择用于本练习的每个数据存储区分配相同的标记。如需查看相关说明,请参阅为数据存储区分配标记

如需了解详情,请参阅 vSphere 标记和属性

创建存储政策

在 vSphere 客户端中,为基于标记的放置创建虚拟机存储政策。在存储政策中,指定您应用于所选数据存储区的标记。如需查看相关说明,请参阅为基于标记的放置创建虚拟机存储政策

如需了解详情,请参阅虚拟机存储政策

如果您使用的是 vSAN 数据存储区,请参阅 vSAN 存储政策

创建用户集群

在本练习中,您将创建一个具有高可用性控制平面的用户集群,因此有三个控制平面节点。除了控制平面节点之外,还有六个工作器节点:三个位于一个节点池中,三个位于第二个节点池中。所有节点均使用静态 IP 地址。

首先按照创建用户集群 (ControlPlane V2) 中的说明操作。

填写用户集群配置文件时:

  • vCenter.storagePolicyName 的值设置为现有存储政策的名称。不要为 vCenter.datastore 设置值。

  • 指定两个节点池。对于第一个节点池,请不要指定数据存储区,也不指定存储政策。对于第二个节点池,请将 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 地址块文件也包含七个地址。在集群升级、更新和自动修复期间需要额外的 IP 地址。

  • 三个控制平面节点的静态 IP 地址在用户集群配置文件的 network.controlPlaneIPBlock 部分中指定。此块中不需要额外的 IP 地址。

  • masterNode.replicas 字段设置为 3,因此将有三个控制平面节点。在 masterNode 下,没有为 vsphere.datastorevsphere.storagePolicyName 指定任何内容。因此,控制平面节点会使用 vCenter.storagePolicyName 中指定的存储政策。

  • 用户集群配置文件包含 vCenter.storagePolicy 的值,但不包含 vCenter.datastore 的值。如果池中未指定自己的存储政策或数据存储区,则节点将使用指定的存储政策。

  • node-pool-1 下,没有为 vsphere.datastorevsphere.storagePolicyName 指定任何内容。因此,node-pool-1 中的节点会使用 vCenter.storagePolicyName 中指定的存储政策。

  • node-pool-2 下,vsphere.datastore 的值为 my-np2-datastore,因此 node-pool-2 中的节点使用这一个数据存储区,而不使用存储政策。

继续按照创建用户集群 (Controlplane V2) 中所述创建用户集群。

在与管理员集群不同的数据中心内创建用户集群

用户集群可以与管理员集群位于不同的数据中心。这两个数据中心可以使用同一 vCenter Server 实例,也可以使用不同的 vCenter Server 实例。

本部分举例说明了如何创建使用与管理员集群不同的 vCenter Server 实例的用户集群。由于用户集群和管理员集群使用不同的 vCenter Server 实例,因此它们也位于不同的数据中心。

首先按照创建用户集群 (ControlPlane V2) 中的说明操作。

填写用户集群配置文件时:

  • vCenter.storagePolicyName 的值设置为现有存储政策的名称。不要为 vCenter.datastore 设置值。

  • vCenter 下,为 addressdatacenterclusterresourcePool 指定值。

  • network.vCenter.networkName 指定值。

  • 指定两个节点池。对于第一个节点池,请不要指定数据存储区,也不指定存储政策。对于第二个节点池,请将 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,因此将有三个控制平面节点。在 masterNode 下,没有为 vsphere.datastorevsphere.storagePolicyName 指定任何内容。因此,控制平面节点会使用 vCenter.storagePolicyName 中指定的存储政策。

  • node-pool-1 下,没有为 vsphere.datastorevsphere.storagePolicyName 指定任何内容。因此,node-pool-1 中的节点会使用 vCenter.storagePolicyName 中指定的存储政策。

  • node-pool-2 下,vsphere.datastore 的值为 my-np2-datastore,因此 node-pool-2 中的节点使用这一个数据存储区,而不使用存储政策。

继续按照创建用户集群 (Controlplane V2) 中所述创建用户集群。

使用 Storage vMotion

本部分介绍如何在使用 SPBM 的集群中使用 Storage vMotion。如果要在不使用 SPBM 的集群中使用 Storage vMotion,请参阅使用数据存储区迁移工具

请按照以下步骤操作:

  1. 将所有集群虚拟机迁移到目标数据存储区。有关说明,请参阅将虚拟机迁移到新的计算资源和存储空间

  2. 验证虚拟机是否已成功迁移到新数据存储区。

    获取集群中的 Machine 对象:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get machines --output yaml
    

    在输出中的 status.disks 下,您可以看到挂接到虚拟机的磁盘。例如:

    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. 更新存储政策以排除旧数据存储区。否则,新卷和重新创建的虚拟机可能会分配给旧数据存储区。