为了能够在 vSphere with Tanzu 中自助使用虚拟机 用户必须有权访问虚拟机类。虚拟机类是用于定义虚拟机 CPU、内存和预留值的模板。虚拟机类可通过预测开发需求并考虑资源可用性和限制来帮助为虚拟机的策略和监管设置门槛。

vSphere with Tanzu 提供了几个默认虚拟机类。vSphere 管理员可以像现在一样使用这些类,也可以创建自定义虚拟机类。要使这些类可供 DevOps 用户使用,vSphere 管理员将其添加到命名空间中。分配给命名空间的虚拟机类可由独立虚拟机和构成 Tanzu Kubernetes Grid 集群的虚拟机使用。

使用 vSphere Client 创建自定义虚拟机类

作为 vSphere 管理员,您可以使用可用的默认类。此外,还可以创建非默认的自定义虚拟机类,并将其用于在命名空间中部署虚拟机。

创建新课程时,请记住以下注意事项。
  • vCenter Server 实例中创建的虚拟机类可用于所有 vCenter Server 集群以及这些集群中的所有命名空间。
  • 虚拟机类可用于 vCenter Server 中的所有命名空间。但是,DevOps 工程师只能使用与特定命名空间关联的虚拟机类。
注: 您还可以使用 DCLI 命令创建虚拟机类。请参见 使用数据中心 CLI 创建和管理虚拟机类

前提条件

所需特权:
  • 命名空间.修改集群范围的配置
  • 命名空间.修改命名空间配置
  • 虚拟机类.管理虚拟机类

过程

  1. 转到虚拟机服务页面。
    1. vSphere Client 主菜单中,选择工作负载管理
    2. 单击服务选项卡,然后单击虚拟机服务窗格上的管理
  2. VM 服务页面上,单击VM 类,然后单击创建 VM 类
  3. 配置页面上,指定常规虚拟机类属性。
    虚拟机类属性 描述
    名称 标识虚拟机类。输入遵循以下要求的唯一 DNS 合规名称:
    • 使用与环境中的默认或自定义虚拟机类的名称不重复的唯一名称。
    • 使用最大长度为 63 个字符的字母数字字符串。
    • 请勿使用大写字母或空格。
    • 在除第一个或最后一个字符外的任意位置使用短划线。例如,vm-class1
    创建虚拟机类后,即无法更改其名称。
    vCPU 计数 定义虚拟机的虚拟 CPU (vCPU) 数量。这是虚拟机硬件配置。DevOps 用户向虚拟机分配虚拟机类时,此计数将成为虚拟机的配置 vCPU 数。
    CPU 资源预留 可选参数。指定保证为虚拟机分配的最少 CPU 资源。此值以百分比 (%) 表示。值为 0% 时,表示没有预留 CPU。

    输入的百分比乘以所有集群节点中可用的最小 CPU 量。得到的值(以 MHz 为单位)指定 vSphere 保证为虚拟机分配的 CPU 资源量。

    内存 定义为虚拟机配置的内存(MB、GB 或 TB)。这是虚拟机硬件配置。DevOps 用户向虚拟机分配虚拟机类策略时,虚拟机将收到此属性定义的内存量。

    该值必须介于 4 MB 和 24 TB 之间,且必须是 4 MB 的倍数。

    内存资源预留 可选参数。定义为虚拟机配置的预留内存量。该属性的值介于 0 和 100% 之间。

    如果要将 PCI 设备添加到虚拟机类配置,请将参数设置为 100%。

  4. (可选) 添加高级配置。
    选项 描述
    PCI 设备 如果 vSphere with Tanzu 环境中的 ESXi 主机具有一个或多个 NVIDIA GRID GPU 图形设备,则可以将虚拟机配置为使用 NVIDIA GRID 虚拟 GPU (vGPU) 技术。此外,还可以在 ESXi 主机上配置其他 PCI 设备,使其可用于直通模式下的虚拟机。

    如果选择此选项,则内存资源预留值将自动更改为 100%。

    有关要求和其他详细信息,请参见在 vSphere with Tanzu 中将 PCI 设备添加到虚拟机类

    实例存储 除了持久存储卷,虚拟机还可以使用实例存储。与独立于虚拟机存在的持久卷不同,实例存储卷依赖于虚拟机实例的生命周期。

    使用实例存储选项,可以添加适当的存储策略,并配置要在虚拟机中使用的卷。

    有关其他要求,请参见在 vSphere with Tanzu 中部署具有实例存储的虚拟机

  5. 查看并确认页面上,检查详细信息,然后单击完成

使用 vSphere Client 编辑或删除虚拟机类

创建虚拟机类后,可以编辑其参数。您还可以编辑 vSphere with Tanzu 提供的默认虚拟机类。如果不再需要现有的虚拟机类,可以将其从环境中删除。

编辑虚拟机类不会自动重新配置先前从此类部署的虚拟机。例如,如果 DevOps 用户使用虚拟机类创建了 Tanzu Kubernetes Grid 集群,而您随后更改了虚拟机类定义,则现有 Tanzu Kubernetes Grid 虚拟机不受影响。新的 Tanzu Kubernetes Grid 虚拟机将使用已修改的类定义。
小心: 如果在编辑该集群使用的虚拟机类后扩大 Tanzu Kubernetes Grid 集群,新集群节点将使用更新的类定义,但现有集群节点继续使用初始类定义,从而导致不匹配。可以扩展控制平面节点和工作线程节点。有关扩展的信息,请参见 《将 Tanzu Kubernetes Grid 2 与 vSphere with Tanzu 结合使用》中的 扩展工作负载集群

删除虚拟机类时,会将其从所有关联的命名空间中移除。DevOps 用户无法再使用此虚拟机类来实现虚拟机的自助服务。先前使用此虚拟机类创建的虚拟机不受影响。

前提条件

所需特权:
  • 命名空间.修改集群范围的配置
  • 命名空间.修改命名空间配置
  • 虚拟机类.管理虚拟机类

过程

  1. vSphere Client 中,显示可用的虚拟机类。
    1. vSphere Client 主菜单中,选择工作负载管理
    2. 单击服务选项卡,然后单击虚拟机服务窗格。
    3. VM 服务页面上,单击VM 类
      所有默认或用户创建的虚拟机类都显示在 可用虚拟机类下。
  2. 编辑或删除现有的虚拟机类。
    选项 描述
    编辑虚拟机类
    1. 在选定的虚拟机类窗格中,单击管理,然后单击编辑
    2. 修改虚拟机类参数。
      注: 无法更改虚拟机类的名称。
    删除虚拟机类
    1. 在选定的虚拟机类窗格中,单击管理,然后单击删除
    2. 确认您要删除虚拟机类。

使用 vSphere Client 将虚拟机类与命名空间相关联

作为 vSphere 管理员,可以将默认或自定义虚拟机类添加到 主管 上的一个或多个命名空间。将虚拟机类添加到命名空间时,您可以将此类提供给 DevOps 用户,以便他们可以在 Kubernetes 命名空间环境中启动自助虚拟机。分配给命名空间的虚拟机类也由构成 Tanzu Kubernetes Grid 集群的虚拟机使用。

可以将多个虚拟机类添加到单个命名空间。不同的虚拟机类是不同服务级别的指示器。如果发布多个虚拟机类,DevOps 用户在命令空间中创建和管理虚拟机时可在所有自定义类和默认类之间进行选择。

注:

为了能够在新创建的命名空间中部署 Tanzu Kubernetes Grid 集群,DevOps 工程师必须有权访问虚拟机类。作为 vSphere 管理员,您必须将默认或自定义虚拟机类明确关联到任何部署了 Tanzu Kubernetes Grid 集群的新命名空间。

前提条件

所需特权:
  • 命名空间.修改集群范围的配置
  • 命名空间.修改命名空间配置
  • 虚拟机类.管理虚拟机类

过程

  1. vSphere Client 中,转到命名空间。
    1. vSphere Client 主菜单中,选择工作负载管理
    2. 单击命名空间选项卡,然后单击命名空间。
  2. 添加虚拟机类。
    1. 虚拟机服务窗格中,单击添加虚拟机类
    2. 选择一个或多个虚拟机类,然后单击确定

结果

您添加的虚拟机类可在命名空间中供 DevOps 用于自助虚拟机。这些类也可以由构成 Tanzu Kubernetes Grid 集群的虚拟机使用。

使用 vSphere Client 管理命名空间上的虚拟机类

将虚拟机类与命名空间关联后,可以添加更多虚拟机类,也可以移除虚拟机类以将其从 Kubernetes 命名空间中取消发布。

前提条件

  • 如果要从命名空间移除虚拟机类,请确认 Tanzu Kubernetes Grid 未使用该虚拟机类。移除该虚拟机类可能会影响 Tanzu Kubernetes Grid 上的操作。
  • 所需特权:
    • 命名空间.修改集群范围的配置
    • 命名空间.修改命名空间配置
    • 虚拟机类.管理虚拟机类

过程

  1. vSphere Client 中,转到命名空间。
    1. vSphere Client 主菜单中,选择工作负载管理
    2. 单击命名空间选项卡,然后单击命名空间。
  2. 添加或移除虚拟机类。
    1. 虚拟机服务窗格中,单击管理 VM 类
    2. 执行以下操作之一。
      选项 描述
      移除虚拟机类 取消选择虚拟机类,然后单击确定
      添加虚拟机类 选择一个或多个虚拟机类,然后单击确定

使用数据中心 CLI 创建和管理虚拟机类

除了 vSphere Client,还可以使用数据中心 CLI (DCLI) 命令创建和管理虚拟机类。使用 DCLI 命令时,可以更加灵活地访问 vSphere Client 中未提供的虚拟机配置选项。

必备条件

使用 root 用户帐户登录到 vCenter Server,然后键入 dcli +i 以在交互模式下使用 DCLI。

有关 DCLI 命令的信息,请参见 DCLI 命令运行概述

可用的 DCLI 命令

命令 描述
namespacemanagement virtualmachineclasses create 创建虚拟机类对象。
namespacemanagement virtualmachineclasses delete 删除虚拟机类对象。
namespacemanagement virtualmachineclasses get 返回有关虚拟机类的信息。
namespacemanagement virtualmachineclasses list 返回有关所有虚拟机类的信息。
namespacemanagement virtualmachineclasses update 更新虚拟机类对象的配置。

使用数据中心 CLI 创建虚拟机类

对于 vSphere 管理员,请使用 DCLI com vmware vcenter namespacemanagement virtualmachineclasses create 命令创建虚拟机类。您可以配置 CPU、内存、内存预留、网络适配器等虚拟机属性。

命令采用以下参数。
参数 描述
-h、--help 显示此帮助消息并退出。
--config-spec CONFIG_SPEC 与虚拟机类关联的 VirtualMachineConfigSpec(json 输入)。
--cpu-count CPU_COUNT 必需。为此类虚拟机配置的 CPU 数量(整数)。
--cpu-reservation CPU_RESERVATION 为虚拟机预留的总可用 CPU 的百分比(整数)。
--description DESCRIPTION 虚拟机类的描述(字符串)。
--devices-dynamic-direct-path-io-devices DEVICES_DYNAMIC_DIRECT_PATH_IO_DEVICES 动态 DirectPath I/O 设备列表(json 输入)。
--devices-vgpu-devices DEVICES_VGPU_DEVICES vGPU 设备列表(json 输入)。
--id ID 必需。虚拟机类的标识符(字符串)。
--instance-storage-policy INSTANCE_STORAGE_POLICY 与实例存储对应的存储策略(字符串)。
--instance-storage-volumes INSTANCE_STORAGE_VOLUMES 实例存储卷列表(json 输入)。
--memory-mb MEMORY_MB 必需。为此类虚拟机配置的内存量(以 MB 为单位)(整数)。
--memory-reservation MEMORY_RESERVATION 为此类虚拟机预留的可用内存百分比。

以下示例说明如何创建具有不同属性的虚拟机类。

CPU 和内存

com vmware vcenter namespacemanagement virtualmachineclasses create --id cpu-mem-class --cpu-count 2 --memory-mb 2048 --config-spec '{"_typeName":"VirtualMachineConfigSpec","numCPUs":2,"memoryMB":2048}'

在 configSpec 中设置 numCPUsmemoryMB 是可选操作。如果选择设置这些参数,则这些参数必须与必填 --cpu-count--memory-mb vAPI 字段具有相同的值。

CPU 和内存预留

com vmware vcenter namespacemanagement virtualmachineclasses create --id cpu-res-class-1 --config-spec '{"_typeName":"VirtualMachineConfigSpec","numCPUs":2,"memoryMB":2048,"cpuAllocation":{"_typeName":"ResourceAllocationInfo","reservation":200,"limit":200},"memoryAllocation":{"_typeName":"ResourceAllocationInfo","reservation":200,"limit":200}}' --cpu-count 2 --memory-mb 2048

网络适配器

com vmware vcenter namespacemanagement virtualmachineclasses create --id class-w-e1000 --cpu-count 2 --memory-mb 2048 --config-spec '{"_typeName":"VirtualMachineConfigSpec","deviceChange":[{"_typeName":"VirtualDeviceConfigSpec","operation":"add","device":{"_typeName":"VirtualE1000","key":-100}}]}'

vGPU

com vmware vcenter namespacemanagement virtualmachineclasses create --id vmclass-1 --devices-vgpu-devices '[{"profile_name": "mockup-vmiop-8c"}]' --memory-reservation 100 --cpu-count 2 --memory-mb 4096
com vmware vcenter namespacemanagement virtualmachineclasses create --id vmclass-2 --cpu-count 2 --memory-mb 4096 --config-spec '{"_typeName":"VirtualMachineConfigSpec","deviceChange":[{"_typeName":"VirtualDeviceConfigSpec","operation":"add","device":{"_typeName":"VirtualPCIPassthrough","key":20,"backing":{"_typeName":"VirtualPCIPassthroughVmiopBackingInfo","vgpu":"mockup-vmiop-8c"}}}]}' --memory-reservation 100

实例存储

com vmware vcenter namespacemanagement virtualmachineclasses create --id vmclass-ist-1 --instance-storage-volumes '[{"size":47}]' --instance-storage-policy "e28d4352-1d1e-431b-b3f7-528bef5838a0" --cpu-count 2 --memory-mb 4096
com vmware vcenter namespacemanagement virtualmachineclasses create --id vmclass-ist-2 --cpu-count 2 --memory-mb 2048 --config-spec '{"_typeName":"VirtualMachineConfigSpec","deviceChange":[{"_typeName":"VirtualDeviceConfigSpec","operation":"add","fileOperation":"create","device":{"_typeName":"VirtualDisk","key":0,"backing":{"_typeName":"VirtualDiskFlatVer2BackingInfo","fileName":"","diskMode":"","thinProvisioned":false},"capacityInKB":0,"capacityInBytes":49283072,"vDiskId":{"_typeName":"ID","id":"cc737f33-2aa3-4594-aa60-df7d6d4cb984"}},"profile":[{"_typeName":"VirtualMachineDefinedProfileSpec","profileId":"e28d4352-1d1e-431b-b3f7-528bef5838a0","profileData":{"_typeName":"VirtualMachineProfileRawData","extensionKey":"com.vmware.vim.sps"}}]}]}'

使用数据中心 CLI 更新虚拟机类

作为 vSphere 管理员,请使用 DCLI com vmware vcenter namespacemanagement virtualmachineclasses update 命令修改虚拟机类。

可参考以下示例。

修改 CPU 和内存

com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class cpu-mem-class 
com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class cpu-mem-class --cpu-count 4 --memory-mb 4096

修改 CPU 和内存预留

com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class cpu-res-class-1
com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class cpu-res-class-1 --cpu-reservation 100 --memory-reservation 100
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class cpu-res-class-1

此外,还可以使用配置规范更新 CPU 和内存预留。将覆盖任何现有的 CPU 或内存预留。可参考以下示例:

com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class  cpu-res-class-1 --config-spec '{"_typeName":"VirtualMachineConfigSpec","cpuAllocation":{"_typeName":"ResourceAllocationInfo","reservation":200,"limit":200},"memoryAllocation":{"_typeName":"ResourceAllocationInfo","reservation":200,"limit":200}}'

添加 vGPU

com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class class-w-e1000 
com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class class-w-e1000 --devices-vgpu-devices '[{"profile_name": "mockup-vmiop-8c"}]' 
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class class-w-e1000
 
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-1
com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class vmclass-1 --config-spec '{"_typeName":"VirtualMachineConfigSpec","deviceChange":[{"_typeName":"VirtualDeviceConfigSpec","operation":"add","device":{"_typeName":"VirtualPCIPassthrough","key":20,"backing":{"_typeName":"VirtualPCIPassthroughVmiopBackingInfo","vgpu":"mockup-vmiop-8c"}}},{"_typeName":"VirtualDeviceConfigSpec","operation":"add","device":{"_typeName":"VirtualPCIPassthrough","key":20,"backing":{"_typeName":"VirtualPCIPassthroughVmiopBackingInfo","vgpu":"mockup-vmiop"}}}]}' 
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-1

移除 vGPU

com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class vmclass-1 --devices-vgpu-devices '[]'
 com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-1

添加实例存储

com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class class-w-e1000 --instance-storage-volumes '[{"size":47}]' --instance-storage-policy "e28d4352-1d1e-431b-b3f7-528bef5838a0"
 com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class class-w-e1000
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-ist-2
com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class vmclass-ist-2 --instance-storage-volumes '[{"size":51},{"size":50}]' --instance-storage-policy "e28d4352-1d1e-431b-b3f7-528bef5838a0"
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-ist-2
com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class vmclass-ist-2 --config-spec '{"_typeName":"VirtualMachineConfigSpec","deviceChange":[{"_typeName":"VirtualDeviceConfigSpec","operation":"add","fileOperation":"create","device":{"_typeName":"VirtualDisk","key":0,"backing":{"_typeName":"VirtualDiskFlatVer2BackingInfo","fileName":"","diskMode":"","thinProvisioned":false},"capacityInKB":0,"capacityInBytes":52428800,"vDiskId":{"_typeName":"ID","id":"cc737f33-2aa3-4594-aa60-df7d6d4cb984"}},"profile":[{"_typeName":"VirtualMachineDefinedProfileSpec","profileId":"e28d4352-1d1e-431b-b3f7-528bef5838a0","profileData":{"_typeName":"VirtualMachineProfileRawData","extensionKey":"com.vmware.vim.sps"}}]}]}'
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-ist-2

移除实例存储

com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class vmclass-ist-1 --instance-storage-volumes '[]' --instance-storage-policy ""
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-ist-1

添加网络适配器

com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class vmclass-ist-2 --config-spec '{"_typeName":"VirtualMachineConfigSpec","deviceChange":[{"_typeName":"VirtualDeviceConfigSpec","operation":"add","fileOperation":"create","device":{"_typeName":"VirtualDisk","key":0,"backing":{"_typeName":"VirtualDiskFlatVer2BackingInfo","fileName":"","diskMode":"","thinProvisioned":false},"capacityInKB":0,"capacityInBytes":52428800,"vDiskId":{"_typeName":"ID","id":"cc737f33-2aa3-4594-aa60-df7d6d4cb984"}},"profile":[{"_typeName":"VirtualMachineDefinedProfileSpec","profileId":"e28d4352-1d1e-431b-b3f7-528bef5838a0","profileData":{"_typeName":"VirtualMachineProfileRawData","extensionKey":"com.vmware.vim.sps"}}]},{"_typeName":"VirtualDeviceConfigSpec","operation":"add","device":{"_typeName":"VirtualE1000","key":-100}}]}' 
com vmware vcenter namespacemanagement virtualmachineclasses get --vm-class vmclass-ist-2

空配置规范

com vmware vcenter namespacemanagement virtualmachineclasses update --vm-class class-w-e1000 --config-spec ''

下一步操作

使用 DCLI 创建的虚拟机类将在 vCenter Server 中可用。可以使用 vSphere Client 将这些虚拟机类分配给命名空间。请参见使用 vSphere Client 将虚拟机类与命名空间相关联