vSphere IaaS control plane 提供虚拟机服务功能,因此,除了容器,DevOps 工程师还可以在通用的共享 Kubernetes 环境中部署并运行虚拟机。可以使用虚拟机服务管理命名空间中虚拟机的生命周期。虚拟机服务可以管理独立虚拟机和构成 Tanzu Kubernetes Grid 集群的虚拟机。
虚拟机服务解决了 DevOps 团队的以下需求:使用 Kubernetes,但基于虚拟机的现有工作负载无法轻松容器化。此外,还有助于用户减少同时管理非 Kubernetes 平台和容器平台的开销。在 Kubernetes 平台上运行容器和虚拟机时,DevOps 团队可以将其使用的工作负载整合到一个平台上。
通过虚拟机服务部署的每个虚拟机都作为运行所有组件(包括自己的操作系统)的完整计算机运行在 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 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 工程师 | 将虚拟机映像发布到内容库 |