vSphere IaaS control plane 提供虚拟机服务功能,因此,除了容器,DevOps 工程师还可以在通用的共享 Kubernetes 环境中部署并运行虚拟机。可以使用虚拟机服务管理命名空间中虚拟机的生命周期。虚拟机服务可以管理独立虚拟机和构成 Tanzu Kubernetes Grid 集群的虚拟机。

虚拟机服务解决了 DevOps 团队的以下需求:使用 Kubernetes,但基于虚拟机的现有工作负载无法轻松容器化。此外,还有助于用户减少同时管理非 Kubernetes 平台和容器平台的开销。在 Kubernetes 平台上运行容器和虚拟机时,DevOps 团队可以将其使用的工作负载整合到一个平台上。

注: 除了独立虚拟机外,虚拟机服务还管理构成 Tanzu Kubernetes Grid 集群的虚拟机。有关集群的信息,请参见 将 TKG Service 与 vSphere IaaS 控制平面结合使用文档。
虚拟机服务管理独立虚拟机和构成 Tanzu Kubernetes Grid 集群的虚拟机

通过虚拟机服务部署的每个虚拟机都作为运行所有组件(包括自己的操作系统)的完整计算机运行在 vSphere IaaS control plane 基础架构之上。虚拟机可以访问 主管 提供的网络和存储,并且使用标准 Kubernetes kubectl 命令进行管理。虚拟机作为完全隔离的系统运行,不受 Kubernetes 环境中其他虚拟机或工作负载的干扰。

何时在 Kubernetes 平台上使用虚拟机?

通常,决定在容器还是虚拟机中运行工作负载取决于您的业务需求和目标。使用虚拟机的原因如下:

  • 应用程序无法容器化。
  • 您具有项目的特定硬件要求。
  • 应用程序专为自定义内核或自定义操作系统而设计。
  • 应用程序更适用于在虚拟机中运行。
  • 您希望具有一致的 Kubernetes 体验并避免开销。您不必为非 Kubernetes 平台和容器平台运行一组单独的基础架构,而是可以整合这些堆栈并使用熟悉的 kubectl 命令进行管理。

虚拟机服务的概念

要描述要在 vSphere 命名空间 中部署的虚拟机的状态,可以使用诸如虚拟机类、虚拟机映像和存储类等参数。然后,虚拟机服务将这些规范汇集在一起,创建独立集群或支持 Tanzu Kubernetes Grid 集群的虚拟机。

虚拟机规范将虚拟机类、虚拟机映像和存储类汇集在一起以创建虚拟机
VM 服务
虚拟机服务是 vSphere IaaS control plane 的一个组件,可提供声明式 Kubernetes 式 API,用于管理虚拟机和关联的 vSphere 资源。虚拟机服务使 vSphere 管理员可以交付资源,并为 Kubernetes 提供虚拟机类和虚拟机映像等模板。DevOps 工程师可以使用这些资源描述虚拟机的所需状态。DevOps 工程师指定虚拟机状态后,虚拟机服务会依据备用基础架构资源将所需状态转换为实际状态。

对于通过虚拟机服务创建的虚拟机,只能从 Kubernetes 命名空间使用 kubectl 命令进行管理。vSphere 管理员无法从 vSphere Client 管理虚拟机,但可以显示其详细信息并监控其使用的资源。有关信息,请参见监控 vSphere IaaS control plane 中可用的虚拟机

VM 类
虚拟机类是虚拟机规范,可用于为虚拟机请求一组资源。虚拟机类由 vSphere 管理员控制和管理,并可定义虚拟 CPU 数量、内存容量和预留设置等参数。定义的参数由 主管 的底层基础架构资源提供支持和保证。

vSphere 管理员可以创建自定义虚拟机类。

此外,工作负载管理提供了几个默认虚拟机类。通常,每个默认类的类型都有两个版本:保证和最大努力。保证版本会完全预留虚拟机规范请求的资源。最大努力类版本则不然,它允许超额分配资源。通常,在生产环境中使用保证类型。

默认虚拟机类的示例如下所示。

CPU 内存 (GB) 预留的 CPU 和内存
guaranteed-large 4 16
best-effort-large 4 16
guaranteed-small 2 4
best-effort-small 2 4

vSphere 管理员可以分配任意数目的现有虚拟机类,使其可用于特定命名空间内的 DevOps 工程师。

虚拟机类为 DevOps 工程师提供了简化的体验。DevOps 不需要了解他们计划创建的每个虚拟机的完整配置。他们可以从可用选项中选择虚拟机类,并且由虚拟机服务管理虚拟机配置。

在 Kubernetes 端,虚拟机类显示为 VirtualMachineClass 资源。

虚拟机映像
虚拟机映像是一个包含软件配置(包括操作系统、应用程序和数据)的模板。

DevOps 工程师创建虚拟机时,可以从与命名空间关联的内容库中选择映像。对于 DevOps,映像将公开为 VirtualMachineImage 对象。

vSphere 管理员可以创建与 vSphere IaaS control plane 兼容的虚拟机映像,并将其上载到内容库。

内容库
DevOps 工程师使用内容库作为映像源来创建虚拟机。与虚拟机类类似,vSphere 管理员将现有内容库分配给命名空间或集群,使其可供 DevOps 工程师使用。vSphere 管理员还可以使命名空间内容库可写。此额外权限允许 DevOps 用户将其映像发布到库。
存储类
虚拟机服务使用存储类来放置虚拟磁盘和动态附加持久卷。有关存储类的详细信息,请参见 在 vSphere IaaS control plane 中将持久存储与 主管 工作负载结合使用
虚拟机规范
DevOps 工程师在 YAML 文件中描述了虚拟机的所需状态,此状态汇集了虚拟机映像、虚拟机类和存储类。
适用于 Kubernetes 的 VM Operator
通过 VM Operator 可以使用 Kubernetes 风格的声明性 API 来管理虚拟机。
从 vSphere 8.0 Update 3 版本开始, vSphere IaaS control plane 支持 VM Operator v1alpha2。此版本提供了以下功能及其他优点:
  • 增强了引导提供程序支持,包括内嵌 Cloud-Init 和 Windows 支持。
  • 增强了客户机网络配置。
  • 增强了状态功能。
  • 支持用户定义的就绪状态门控。
  • 新的 VirtualMachineWebConsoleRequest API。

除了特定于 v1alpha2 的新 API 变更外,v1alpha2 中的大多数其他 API 都能以与 v1alpha1 相同的方式工作。虚拟机规范中的大多数字段都向后兼容 v1alpha1。

v1alpha2 发布后,可以继续使用 v1alpha1 对象。所有 v1alpha1 对象将使用 VM Operator 中内置的转换 Webhook 自动转换为 v1alpha2 对象。

有关 VM Operator v1alpha2 和支持的字段的信息,请参见https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/

网络
虚拟机服务没有任何特定要求,它依赖于 vSphere IaaS control plane 中提供的网络。虚拟机服务支持两种类型的网络连接:vSphere 网络连接或 NSX。部署虚拟机时,可用网络提供商为虚拟机分配静态 IP 地址。有关信息,请参见 vSphere IaaS 控制平面概念和规划文档中的 主管网络连接

虚拟机服务和具有 vSphere 区域的 主管

在三区域 主管 上创建虚拟机时,将在所有可用区域之间复制虚拟机实例。要通过 YAML 文件控制虚拟机放置,DevOps 团队可以使用 Kubernetes 标签 topology.kubernetes.io/zone。例如, topology.kubernetes.io/zone: zone-a02

用于置备和监控虚拟机的工作流

作为 vSphere 管理员,您可以为虚拟机的策略和监管设置门槛,以及向 DevOps 工程师提供虚拟机资源(如虚拟机类和虚拟机模板)。部署虚拟机后,可以使用 vSphere Client 来监控虚拟机。

步骤 执行者 描述
1 vSphere 管理员 创建内容库并将其分配给命名空间或 主管
2 vSphere 管理员 创建虚拟机类并将其分配给命名空间

要使用 NVIDIA vGPU,请在虚拟机类中配置 PCI 设备。请参见在 vSphere IaaS control plane 中部署具有 vGPU 和其他 PCI 设备的虚拟机

3 DevOps 工程师 在 Kubernetes 命名空间中置备虚拟机

对于 Tanzu Kubernetes Grid 集群虚拟机,请参见将 TKG Service 与 vSphere IaaS 控制平面结合使用

4 vSphere 管理员 监控部署的虚拟机
5 DevOps 工程师 将虚拟机映像发布到内容库