可以使用 vSphere IaaS control plane 将 vSphere 转换为在 Hypervisor 层上以本机方式运行 Kubernetes 工作负载的平台。在 vSphere 集群上启用 vSphere IaaS control plane 后,可直接在 ESXi 主机上运行 Kubernetes 工作负载,并可在称为 vSphere 命名空间 的专用命名空间中创建上游 Kubernetes 集群。

当今应用体系的挑战

如今的分布式系统由多个通常运行大量 Kubernetes Pod 和虚拟机的微服务构成。不以 vSphere IaaS control plane 为基础的典型堆栈包含一个底层虚拟环境,其中,Kubernetes 基础架构部署在虚拟机内,Kubernetes pod 也分别运行在这些虚拟机中。有三个单独的角色分别控制该体系的每个部分,即应用程序开发人员、Kubernetes 集群管理员和 vSphere 管理员。

图 1. 当今的应用体系
具有 3 层的堆栈 - Kubernetes 工作负载、Kubernetes 集群、虚拟环境。管理它们的角色有 3 个 - 开发人员、集群管理员、vSphere 管理员。
不同角色无法看到或控制其他角色的环境:
  • 作为应用程序开发人员,您可以运行 Kubernetes pod,并部署和管理基于 Kubernetes 的应用程序。您看不到运行数百个应用程序的整个体系。
  • 作为 DevOps 工程师或集群管理员,您只能控制 Kubernetes 基础架构,没有任何工具可以管理或监控虚拟环境和解决与资源相关的任何问题以及其他问题。
  • 作为 vSphere 管理员,您对底层虚拟环境具有完全控制权,但看不到 Kubernetes 基础架构、虚拟环境中不同 Kubernetes 对象的位置以及它们使用资源的方式。

整个堆栈上的操作可能会非常困难,因为这些操作需要所有三个角色之间进行通信。堆栈的不同层之间缺乏集成,这也可能带来难题。例如,Kubernetes 调度程序无法查看 vCenter Server 清单,并且无法智能地放置容器。

vSphere IaaS control plane 如何提供帮助?

vSphere IaaS control plane 直接在 Hypervisor 层上创建 Kubernetes 控制平面。作为 vSphere 管理员,您可以为 vSphere IaaS control plane 激活现有 vSphere 集群,从而在属于该集群的 ESXi 主机中创建 Kubernetes 层。为 vSphere IaaS control plane 激活的 vSphere 集群称为 主管

图 2. vSphere IaaS control plane

具有工作负载的 IaaS 平台堆栈位于顶部,虚拟环境堆栈位于底部。管理它们的角色有两个:开发人员和 vSphere 管理员。
在 Hypervisor 层上具有 Kubernetes 控制平面后,可以在 vSphere 中启用以下功能:
  • 作为 vSphere 管理员,您可以在 主管 上创建命名空间(称为 vSphere 命名空间),然后为其配置特定的内存量、CPU 和存储量。您可将 vSphere 命名空间 提供给 DevOps 工程师。
  • 作为 DevOps 工程师,您可以使用 vSphere 命名空间 内的共享资源池在同一平台上运行 Kubernetes 工作负载。您可以部署和管理使用 Tanzu Kubernetes Grid 创建的多个上游 Kubernetes 集群。此外,还可以直接在称为 vSphere Pod 的特殊虚拟机内的 主管 上部署 Kubernetes 容器。您还可以部署常规虚拟机。
  • 作为 vSphere 管理员,您可以使用 vSphere Client 管理和监控 vSphere Pod、虚拟机和 Tanzu Kubernetes Grid 集群。
  • 作为 vSphere 管理员,您可以全面了解在不同命名空间中运行的 vSphere Pod、虚拟机和 Tanzu Kubernetes Grid 集群、它们在环境中的放置以及它们使用资源的情况。

通过在 Hypervisor 层上运行 Kubernetes,还可以简化 vSphere 管理员和 DevOps 工程师之间的协作,因为这两个角色使用相同的对象。

什么是工作负载?

vSphere IaaS control plane 中,工作负载是通过以下方式之一部署的应用程序:

  • 包含在 vSphere Pod 中运行的容器的应用程序。
  • 通过虚拟机服务置备的工作负载。
  • 使用 Tanzu Kubernetes Grid 部署的 Tanzu Kubernetes Grid 集群。
  • Tanzu Kubernetes Grid 集群中运行的应用程序。

什么是 vSphere 区域?

vSphere 区域可以提供高可用性,防止在 vSphere IaaS control plane 上部署的工作负载发生集群级别故障。作为 vSphere 管理员,您可以在 vSphere Client 中创建 vSphere 区域,然后将 vSphere 集群映射到区域。可以使用这些区域在 vSphere IaaS control plane 环境中部署 主管

可以在三个 vSphere 区域中部署 主管,以实现集群级别高可用性。或者,可以在单个 vSphere 集群上部署一个 主管,这将自动创建一个 vSphere 区域并将其映射到该集群,也可以使用已映射到某个区域的集群。有关详细信息,请参见主管 架构主管 分区和集群部署

什么是 Tanzu Kubernetes Grid 集群?

Tanzu Kubernetes Grid 集群是由 VMware 构建、签名并提供支持的 Kubernetes 的完整分发版。可以通过使用 Tanzu Kubernetes Grid主管 上置备和运行上游 Tanzu Kubernetes Grid 集群。

Tanzu Kubernetes Grid 置备的 Tanzu Kubernetes Grid 集群具有以下特性:
TKG 集群特性,从左到右 - 个性化、紧密集成、可用于生产、完全受支持、由 Kubernetes 管理
  • Kubernetes 的个性化安装。Tanzu Kubernetes Grid 提供经过深思熟虑的默认设置,并针对 vSphere 进行了优化,可用于置备 Tanzu Kubernetes Grid 集群。通过使用 Tanzu Kubernetes Grid,可以减少部署和运行企业级 Kubernetes 集群时通常需要的时间和工作量。
  • 与 vSphere 基础架构集成。Tanzu Kubernetes Grid 集群与 vSphere SDDC 堆栈相集成,包括存储、网络连接和身份验证。此外,Tanzu Kubernetes Grid 集群还构建于映射到 vSphere 集群的 主管 之上。由于这种紧密集成,运行 Tanzu Kubernetes Grid 集群是统一的产品体验。
  • 生产就绪。Tanzu Kubernetes Grid 置备可用于生产的 Tanzu Kubernetes Grid 集群。您可以运行生产工作负载,而无需执行任何其他配置。此外,您可以确保可用性并允许 Kubernetes 软件进行滚动升级,并可在单独的集群中运行不同版本的 Kubernetes。
  • Kubernetes 工作负载的高可用性。在三 vSphere 区域 主管 上部署的 Tanzu Kubernetes Grid 集群可防止在 vSphere 集群级别发生故障。Tanzu Kubernetes Grid 集群的工作负载和控制平面节点分布在全部三个 vSphere 区域,这使得在其中运行的 Kubernetes 工作负载具有高可用性。在单区域 主管 上运行的 Tanzu Kubernetes Grid 集群通过 vSphere HA 受到保护,可免于在 ESXi 主机级别发生故障。
  • VMware 提供全面支持。Tanzu Kubernetes Grid 集群使用 VMware 提供的开源、基于 Linux 的 Photon OS,部署在 vSphere 基础架构上,并在 ESXi 主机上运行。如果您在使用堆栈的任何一层(从 Hypervisor 到 Kubernetes 集群)时遇到问题,只需与 VMware 这一家供应商联系即可。
  • Kubernetes 代管。Tanzu Kubernetes Grid 集群构建于 主管 之上,后者本身就是一个 Kubernetes 集群。Tanzu Kubernetes Grid 集群在 vSphere 命名空间 中通过自定义资源进行定义。可以使用熟悉的 kubectl 命令和 Tanzu CLI 以自助方式置备 Tanzu Kubernetes Grid 集群。整个工具链保持一致,无论是置备集群还是部署工作负载,您都可以使用相同的命令、熟悉的 YAML 和通用工作流。

有关详细信息,请参见“Tanzu Kubernetes Grid 架构和组件”将 TKG Service 与 vSphere IaaS 控制平面结合使用

什么是 vSphere Pod

vSphere IaaS control plane 引入了一个名为 vSphere Pod 的构造,它等效于 Kubernetes Pod。vSphere Pod 是一个占用空间较小的虚拟机,可运行一个或多个 Linux 容器。每个 vSphere Pod 根据其容纳的工作负载精确地调整大小,并拥有与该工作负载对应的确切资源预留。它会分配待运行工作负载所需的确切存储、内存和 CPU 资源量。仅配置了 NSX 作为网络连接堆栈的 主管 支持 vSphere Pod

图 3. vSphere Pod
包含两个 vSphere Pod 框的 ESXi 主机。每个 vSphere Pod 内都有正在其中运行的容器、Linux 内核、内存、CPU 和存储资源。
vSphere PodvCenter Server 中的对象,并支持工作负载的以下功能:
  • 强隔离。像隔离虚拟机一样隔离 vSphere Pod。每个 vSphere Pod 都有自己的唯一 Linux 内核,它基于 Photon OS 中使用的内核。像在裸机配置中一样,在 vSphere Pod 中,每个容器都具有唯一的 Linux 内核,而不是多个容器共享一个内核
  • 资源管理:vSphere DRS 处理 vSphere Pod主管 上的放置位置。
  • 高性能:vSphere Pod 会获得与虚拟机相同级别的资源隔离,既能消除邻居吵闹的问题,又能保持快速启动和减少容器开销。
  • 诊断。作为 vSphere 管理员,您可对工作负载使用可用于 vSphere 的所有监控和自检工具。
vSphere Pod 与 Open Container Initiative (OCI) 兼容,并且可从任何操作系统运行容器(前提是这些容器也与 OCI 兼容)。
图 4. vSphere Pod 网络连接和存储
内部包含容器、容器引擎和 Pod 引擎的 vSphere Pod。Pod 连接到容器映像、存储、NSX 交换机、spherelet 和 hostd。

vSphere Pod 根据存储的对象使用三种存储,它们是临时 VMDK、持久卷 VMDK 和容器映像 VMDK。作为 vSphere 管理员,可在 主管 级别为容器映像缓存和临时 VMDK 的放置配置存储策略。在 vSphere 命名空间 级别,可为持久卷的放置配置存储策略。有关 vSphere IaaS control plane 的存储要求和概念的详细信息,请参见工作负载的持久存储

对于网络连接,vSphere PodTanzu Kubernetes Grid 集群的虚拟机使用 NSX 提供的拓扑。有关详细信息,请参见 主管 网络连接

Spherelet 是在每个主机上创建的额外进程。它是一种以本机方式传输到 ESXi 的 kubelet,允许 ESXi 主机加入 Kubernetes 集群。

有关在 主管 上使用 vSphere Pod 的信息,请参见vSphere IaaS 控制平面服务和工作负载文档中的将工作负载部署到 vSphere Pods

vSphere IaaS control plane 中使用虚拟机

vSphere IaaS control plane 提供虚拟机服务功能,因此,除了容器,DevOps 工程师还可以在通用的共享 Kubernetes 环境中部署并运行虚拟机。容器和虚拟机共享相同的 vSphere 命名空间 资源,并且可以通过单个 vSphere IaaS control plane 界面进行管理。

虚拟机服务解决了 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 IaaS 控制平面服务和工作负载文档中的部署和管理虚拟机

vSphere IaaS control plane 中的 主管服务

主管服务 是 vSphere 认证的 Kubernetes 运算符,可为开发人员提供基础架构即服务组件和紧密集成的独立软件供应商服务。可以在 vSphere IaaS control plane 环境中安装和管理 主管服务,使它们可用于 Kubernetes 工作负载。在 主管 上安装 主管服务 时,DevOps 工程师可以使用服务 API 在用户命名空间中的 主管 上创建实例。然后,可以在 vSphere PodTanzu Kubernetes Grid 集群中使用这些实例。

了解有关受支持的 主管服务 以及如何在 http://vmware.com/go/supervisor-service 上下载其服务 YAML 文件的更多信息。

有关如何使用 主管服务 的信息,请参见vSphere IaaS 控制平面服务和工作负载文档中的管理主管服务