You are on page 1of 223

vSphere with Tanzu 配置和

管理
Update 1
修改日期:2020 年 11 月 20 日
VMware vSphere 7.0
vCenter Server 7.0
VMware ESXi 7.0
vSphere with Tanzu 配置和管理

您可以从 VMware 网站下载最新的技术文档:

https://docs.vmware.com/cn/。

VMware, Inc. 威睿信息技术(中国)有 上海办公室 广州办公室


3401 Hillview Ave. 限公司 上海市 广州市
Palo Alto, CA 94304 北京办公室 淮海中路 333 号 天河路 385 号
www.vmware.com 北京市 瑞安大厦 804-809 室 太古汇一座 3502 室
朝阳区新源南路 8 号 www.vmware.com/cn www.vmware.com/cn
启皓北京东塔 8 层 801
www.vmware.com/cn

©
版权所有 2019、2020 VMware, Inc. 保留所有权利。 版权和商标信息

VMware, Inc. 2
目录

vSphere with Tanzu 配置和管理 8

更新信息 9

1 vSphere with Tanzu 基础知识 11


什么是 vSphere with Tanzu? 11
什么是 vSphere Pod? 14
什么是 Tanzu Kubernetes 集群? 15
何时使用 vSphere Pod 和 Tanzu Kubernetes 集群 17
vSphere with Tanzu 用户角色和工作流 18
vSphere with Tanzu 如何更改 vSphere 环境? 26

2 vSphere with Tanzu 组件和架构 27


vSphere with Tanzu 架构 27
Tanzu Kubernetes Grid 服务 架构 30
Tanzu Kubernetes 集群租户模型 32
vSphere with Tanzu 的网络连接 33
Tanzu Kubernetes 集群网络连接 38
vSphere with Tanzu 的身份验证 40
如何对 Tanzu Kubernetes 集群进行身份验证 41

3 启用工作负载管理的必备条件 42
设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑 42
设置具有 NSX-T Data Center 的 主管集群 的系统要求和拓扑 49
为使用 vSphere 网络堆栈的 主管集群 创建 vSphere Distributed Switch 55
为 vSphere with Tanzu 创建存储策略 56
创建已订阅内容库 58
为 vSphere with Tanzu 安装并配置 NSX-T Data Center 59
创建 vSphere Distributed Switch 61
创建分布式端口组 62
将主机添加到 vSphere Distributed Switch 63
部署和配置 NSX Manager 64
部署 NSX Manager 节点以形成集群 65
添加许可证 67
添加计算管理器 68
创建传输区域 68
为主机隧道端点 IP 地址创建 IP 池 69

VMware, Inc. 3
vSphere with Tanzu 配置和管理

创建主机上行链路配置文件 70
创建 Edge 上行链路配置文件 70
创建传输节点配置文件 71
在集群上配置 NSX-T Data Center 72
配置和部署 NSX Edge 传输节点 72
创建 NSX Edge 集群 74
创建第 0 层上行链路分段 75
创建第 0 层网关 75

4 启用工作负载管理 78
vSphere with Tanzu 的许可 78
使用 vSphere 网络堆栈启用工作负载管理平台 79
将具有 NSX-T Data Center 的工作负载平台配置为网络堆栈 82
将 Tanzu 版本许可证分配给 主管集群 84
vSphere with Tanzu 配置最佳做法 85
更改 Kubernetes API 端点证书 85

5 在 主管集群 上使用 vSphere 命名空间 86


创建和配置 vSphere 命名空间 86
针对命名空间上的 Kubernetes 对象配置限制 88
设置容器的默认内存和 CPU 预留与限制 88
关联内容库与 主管命名空间 89
使用 注册表服务 提供专用映像注册表 89
通过 注册表服务 在 主管集群 上启用专用映像注册表 90
清除专用映像注册表中的映像 91

6 连接到 vSphere with Tanzu 集群 92


下载并安装 适用于 vSphere 的 Kubernetes CLI 工具 92
下载并安装 TLS 证书 93
为 Kubectl 指定默认的文本编辑器 94
以 vCenter Single Sign-On 用户的身份连接到 主管集群 95
以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群 96
以管理员用户身份连接到 Tanzu Kubernetes 集群控制平面 98
以系统用户身份使用私钥通过 SSH 连接到 Tanzu Kubernetes 集群节点 99
以系统用户身份使用密码通过 SSH 连接到 Tanzu Kubernetes 集群节点 101
向开发人员授予 Tanzu Kubernetes 集群访问权限 103

7 vSphere with Tanzu 中的存储 105


vSphere with Tanzu 如何与 vSphere 存储集成 110
vSphere CNS-CSI 和准虚拟 CSI 支持的功能 112
vSphere with Tanzu 中的存储权限 113

VMware, Inc. 4
vSphere with Tanzu 配置和管理

持久卷的动态置备和静态置备 113
更改 主管集群上的存储设置 114
更改命名空间上的存储设置 114
显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类 115
为有状态应用程序置备动态持久卷 116
为有状态应用程序置备静态持久卷 118
扩展持久卷 120
监控 主管命名空间 或 Tanzu Kubernetes 集群中的卷运行状况 121
在 vSphere Client 中监控持久卷 123
在 vSphere with Tanzu 中使用持久服务 125
为 vSphere with Tanzu 设置 vSAN Direct 126

8 在 vSphere with Tanzu 中运行 Tanzu Kubernetes 集群 128


创建 Tanzu Kubernetes 集群 128
用于创建 Tanzu Kubernetes 集群的工作流 128
为 Tanzu Kubernetes 集群创建已订阅内容库 131
Tanzu Kubernetes 集群的配置参数 132
Tanzu Kubernetes 集群的虚拟机类类型 135
用于置备 Tanzu Kubernetes 集群的示例 YAML 文件 136
置备 Tanzu Kubernetes 集群 138
删除 Tanzu Kubernetes 集群 141
在气隙环境中置备 Tanzu Kubernetes 集群 142
下载映像文件 142
创建本地内容库 143
将映像导入到本地内容库 144
将本地内容库与 主管命名空间 相关联 144
验证虚拟机映像是否可用 145
使用本地映像创建集群 146
将工作负载部署到 Tanzu Kubernetes 集群 147
将测试工作负载部署到 Tanzu Kubernetes 集群 147
安装并运行 Octant 149
Tanzu Kubernetes 服务负载均衡器示例 149
使用 Contour 的 Tanzu Kubernetes Ingress 示例 151
使用 Nginx 的 Tanzu Kubernetes Ingress 示例 155
Tanzu Kubernetes 存储类示例 158
Tanzu Kubernetes 持久卷声明示例 159
Tanzu Kubernetes Guestbook 教程 161
对 Tanzu Kubernetes 集群使用 POD 安全策略 167
操作 Tanzu Kubernetes 集群 172
使用 vSphere Client 监控 Tanzu Kubernetes 集群状态 172
使用 kubectl 监控 Tanzu Kubernetes 集群状态 172

VMware, Inc. 5
vSphere with Tanzu 配置和管理

查看 Tanzu Kubernetes 集群的完整资源层次结构 173


扩展 Tanzu Kubernetes 集群 174
将 Tanzu Kubernetes 集群迁移到新内容库。 180
验证 Tanzu Kubernetes 集群的默认 CNI 181
更改 Tanzu Kubernetes 集群的默认 CNI 182
Tanzu Kubernetes 集群生命周期状态 183
Tanzu Kubernetes 集群操作命令 184
Tanzu Kubernetes 集群网络连接命令 186
Tanzu Kubernetes 集群密钥 186

9 使用 vSphere Pod 188


以 vCenter Single Sign-On 用户的身份连接到 主管集群 188
在命名空间中部署应用程序 189
扩展和缩小应用程序 190
将映像推送到 注册表服务 上的命名空间 191
使用 注册表服务中的映像部署应用程序 192

10 使用 vSphere Lifecycle Manager 194


要求 194
在 vSphere Lifecycle Manager 管理的集群上启用 vSphere with Tanzu 195
升级 主管集群 195
将主机添加到 主管集群 195
从 主管集群 中移除主机 196
禁用主管集群 197

11 更新 vSphere with Tanzu 集群 198


关于 vSphere with Tanzu 集群更新 198
支持的更新路径 200
通过执行 vSphere 命名空间更新来更新 主管集群 201
更新 kubectl 的 vSphere 插件 202
更新 Tanzu Kubernetes 集群 202
通过升级 Kubernetes 版本更新 Tanzu Kubernetes 集群 204
通过更改 VirtualMachineClass 更新 Tanzu Kubernetes 集群 205
通过更改 StorageClass 更新 Tanzu Kubernetes 集群 207
使用 Patch 方法更新 Tanzu Kubernetes 集群 209

12 vSphere with Tanzu 故障排除和最佳做法 212


在 vSphere with Tanzu 中执行存储故障排除 212
对非 vSAN 数据存储上的控制层面虚拟机使用反关联性规则 212
从 vSphere 中移除的存储策略继续显示为 Kubernetes 存储类 213
网络故障排除 214

VMware, Inc. 6
vSphere with Tanzu 配置和管理

将 vCenter Server 注册到 NSX Manager 214


无法更改 NSX 设备密码 215
对失败的工作流和不稳定的 NSX Edge 进行故障排除 215
收集支持包以进行故障排除 215
收集日志文件 216
NSX-T 管理证书、指纹或 IP 地址发生更改时重新启动 WCP 服务 216
要求将 VDS 用于主机传输节点流量 217
Tanzu Kubernetes 集群故障排除 218
收集 Tanzu Kubernetes 集群的支持包 218
对 vCenter Single Sign-On 连接错误进行故障排除 218
已订阅内容库错误故障排除 219
对集群置备错误进行故障排除 219
工作负载部署错误故障排除 220
重新启动失败的 Tanzu Kubernetes 集群更新作业 220
对工作负载管理启用问题进行故障排除 221
对启用工作负载管理的集群兼容性错误进行故障排除 221
跟踪工作负载管理日志文件 222
关闭和启动 vSphere with Tanzu 工作负载域 223

VMware, Inc. 7
vSphere with Tanzu 配置和管理

《vSphere with Tanzu 配置和管理》提供有关使用 vSphere Client 配置和管理 vSphere with Tanzu 的
信息。此外,还提供了有关使用 kubectl 连接到在 vSphere with Tanzu 上运行的命名空间以及在指定的
命名空间上运行 Kubernetes 工作负载的信息。

《vSphere with Tanzu 配置和管理》概述了平台架构,以及设置满足 vSphere with Tanzu 特定要求的


存储、计算及网络连接的注意事项和最佳做法。它提供了有关在现有 vSphere 集群上启用 vSphere with
Tanzu、创建和管理命名空间以及监控使用 VMware Tanzu™ Kubernetes Grid™ 服务 创建的
Kubernetes 集群的说明。

此信息还提供了有关通过 kubectl 与 vSphere with Tanzu Kubernetes 控制平面建立会话、运行示例应


用程序以及使用 VMware Tanzu™ Kubernetes Grid™ 服务 创建 Kubernetes 集群的准则。

目标读者
《vSphere with Tanzu 配置和管理》的目标用户是希望在 vSphere 中启用 vSphere with Tanzu、为
DevOps 团队配置和提供命名空间,以及在 vSphere 中管理和监控 Kubernetes 工作负载的 vSphere 管
理员。希望使用 vSphere with Tanzu 的 vSphere 管理员应具备容器和 Kubernetes 的基本知识。

此信息也适用于希望与 vSphere with Tanzu 控制平面建立会话、运行 Kubernetes 工作负载以及使用


VMware Tanzu™ Kubernetes Grid™ 服务 部署 Kubernetes 集群的 DevOps 工程师。

VMware, Inc. 8
更新信息

本 vSphere with Tanzu 配置和管理随产品的每个版本更新或在必要时更新。

下表提供了 vSphere with Tanzu 配置和管理的更新历史记录。

修订版本 描述

2020 年 11 月 n 在 vSphere 命名空间更新主题中添加了受支持的版本表,指示支持 Tanzu Kubernetes 集群的 Antrea CNI


20 日 所需的最低 主管集群 版本。请参见通过执行 vSphere 命名空间更新来更新 主管集群。
n 添加了有关关闭和启动 vSphere with Tanzu 的信息。请参见关闭和启动 vSphere with Tanzu 工作负载
域。

2020 年 11 月 n 添加了在为 Tanzu Kubernetes 集群配置内容库订阅时使用按需同步的一般性建议。请参见创建已订阅内容


13 日 库。
n 对用于部署 Kubernetes 工作负载的某些示例 YAML 文件进行了微小更新。
n 修复了次要键入错误和勘误表。

2020 年 11 月 6 n 已测试和更新的集群连接主题。请参见第 6 章 连接到 vSphere with Tanzu 集群。


日 n 更新了 Contour Ingress 示例。请参见使用 Contour 的 Tanzu Kubernetes Ingress 示例。
n 添加了 Nginx Ingress 示例。请参见使用 Nginx 的 Tanzu Kubernetes Ingress 示例。
n 更新了 Nginx 负载平衡器示例。请参见 Tanzu Kubernetes 服务负载均衡器示例。
n 针对 Guestbook 教程添加了示例 YAML 和扩展说明。请参见 Tanzu Kubernetes Guestbook 教程。
n 添加了有关安装 Octant Web 界面以直观查看 Tanzu Kubernetes 集群的主题。请参见安装并运行
Octant。
n 修复了次要键入错误和勘误表。

2020 年 10 月 n 阐明了升级支持的 Tanzu Kubernetes 版本。请参见支持的更新路径。


30 日 n 更新了 Tanzu Kubernetes 集群置备主题,添加了集群验证命令。请参见用于创建 Tanzu Kubernetes 集群
的工作流和置备 Tanzu Kubernetes 集群。
n 更新了工作负载管理集群的最低计算要求表,移除了 vCenter Server 要求。
n 更新了设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑,移除了管理流量网络的 DHCP 要求。

2020 年 10 月 n 更新了有关收集 Tanzu Kubernetes 集群日志的主题,添加了指向知识库文章的链接,该文章提供了实现此


23 日 类目的的实用程序和说明。收集 Tanzu Kubernetes 集群的支持包。
n 添加了有关为 Kubectl 配置默认文本编辑器以简化 Tanzu Kubernetes 集群维护的主题。请参见为 Kubectl
指定默认的文本编辑器。
n 添加了有关使用 kubectl edit 命令升级 Tanzu Kubernetes 发行版本的各个主题。请参见更新 Tanzu
Kubernetes 集群。
n 更新了置备 Tanzu Kubernetes 集群的工作流。请参见用于创建 Tanzu Kubernetes 集群的工作流。
n 更新了创建和配置 vSphere 命名空间中的特权。

VMware, Inc. 9
vSphere with Tanzu 配置和管理

修订版本 描述

2020 年 10 月 n 设立了专门讲述扩展 Tanzu Kubernetes 集群的部分。请参见扩展 Tanzu Kubernetes 集群。


16 日 n 添加了有关纵向扩展 Tanzu Kubernetes 集群节点的主题。请参见#unique_22。
n 添加了有关横向扩展 Tanzu Kubernetes 集群控制平面的主题。请参见横向扩展控制平面。
n 添加了有关使用密码通过 SSH 连接到 Tanzu Kubernetes 集群节点的主题,可用于 vDS 和 NSX-T 环境。请
参见以系统用户身份使用密码通过 SSH 连接到 Tanzu Kubernetes 集群节点。
n 更新了有关删除 Tanzu Kubernetes 集群的主题。请参见删除 Tanzu Kubernetes 集群。
n 添加了加入 主管集群 的 ESXi 主机的主机名需要采用小写格式的要求。请参见设置具有 vSphere 网络连接的
主管集群 的系统要求和拓扑和设置具有 NSX-T Data Center 的 主管集群 的系统要求和拓扑。

2020 年 10 月 编辑较少。
09 日

2020 年 10 月 n 阐明了以下语句:kubectl 的 vSphere 插件 在 kubconfig 文件中注册 Tanzu Kubernetes 集群 CA 证书。


07 日 请参见下载并安装 TLS 证书。
n 更新了 Tanzu Kubernetes 集群的可用 OVA 映像列表和兼容性。请参见支持的更新路径。
n 修复了断开的链接。

2020 年 10 月 更新了 vSphere Lifecycle Manager 集成信息并更改了章节标题。请参见第 10 章 使用 vSphere Lifecycle


06 日 Manager。

2020 年 10 月 初始版本。
06 日

VMware, Inc. 10
vSphere with Tanzu 基础知识
1
通过使用 vSphere with Tanzu,可以将 vSphere 集群转换为在专用资源池中运行 Kubernetes 工作负载
的平台。在 vSphere 集群上启用 vSphere with Tanzu 后,会在 Hypervisor 层中直接创建一个
Kubernetes 控制平面。之后,可以通过部署 vSphere Pod 运行 Kubernetes 容器,也可以通过
VMware Tanzu™ Kubernetes Grid™ 服务 创建上游 Kubernetes 集群,并在这些集群中运行应用程序。

本章讨论了以下主题:

n 什么是 vSphere with Tanzu?

n 什么是 vSphere Pod?

n 什么是 Tanzu Kubernetes 集群?

n 何时使用 vSphere Pod 和 Tanzu Kubernetes 集群

n vSphere with Tanzu 用户角色和工作流

n vSphere with Tanzu 如何更改 vSphere 环境?

什么是 vSphere with Tanzu?


可以使用 vSphere with Tanzu 将 vSphere 转换为在 Hypervisor 层上以本机方式运行 Kubernetes 工作
负载的平台。在 vSphere 集群上启用 vSphere with Tanzu 后,可直接在 ESXi 主机上运行 Kubernetes
工作负载,并可在专用资源池中创建上游 Kubernetes 集群。

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

VMware, Inc. 11
vSphere with Tanzu 配置和管理

图 1-1. 当今的应用体系

Kubernetes 工作负载

Pod 卷 服务 ...

开发人员

Kubernetes 集群

工作节点 控制平面 ETCD


...
集群管理员

虚拟环境

虚拟机 网络 存储
...
vSphere Admin

不同角色无法看到或控制其他角色的环境:

n 作为应用程序开发人员,您可以运行 Kubernetes pod,并部署和管理基于 Kubernetes 的应用程


序。您看不到运行数百个应用程序的整个体系。

n 作为 Kubernetes 集群管理员,您只能控制 Kubernetes 基础架构,没有任何工具可以管理或监控虚


拟环境和解决与资源相关的任何问题以及其他问题。

n 作为 vSphere 管理员,您对底层虚拟环境具有完全控制权,但看不到 Kubernetes 基础架构、虚拟环


境中不同 Kubernetes 对象的位置以及它们使用资源的方式。

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

vSphere with Tanzu 如何提供帮助?


vSphere with Tanzu 直接在 Hypervisor 层上创建 Kubernetes 控制平面。作为 vSphere 管理员,您可
以为 vSphere with Tanzu 启用现有 vSphere 集群,从而在属于该集群的 ESXi 主机中创建 Kubernetes
层。启用了 vSphere with Tanzu 的集群称为 主管集群。

VMware, Inc. 12
vSphere with Tanzu 配置和管理

图 1-2. vSphere with Tanzu

vSphere with Tanzu

命名空间

Kubernetes 工作负载 Kubernetes 工作负载


Tanzu Tanzu
vSphere vSphere
虚拟机 Kubernetes 虚拟机 Kubernetes
Pod Pod
集群 集群

开发人员
存储
CPU 内存 存储

虚拟环境

Kubernetes 层

ESXi 网络 存储
vSphere Admin

在 Hypervisor 层上具有 Kubernetes 控制平面后,可以在 vSphere 中启用以下功能:

n 作为 vSphere 管理员,您可以在 主管集群 上创建命名空间(称为 主管命名空间),然后为其配置特


定的内存量、CPU 和存储量。您可将 主管命名空间 提供给 DevOps 工程师。

n 作为 DevOps 工程师,您可以使用 主管命名空间 内的共享资源池在同一平台上运行包含 Kubernetes


容器的工作负载。在 vSphere with Tanzu 中,容器在称为 vSphere Pod 的特殊类型的虚拟机中运
行。

n 作为 DevOps 工程师,您可以在命名空间中创建和管理多个 Kubernetes 集群,并使用 Tanzu


Kubernetes Grid 服务 管理其生命周期。使用 Tanzu Kubernetes Grid 服务 创建的 Kubernetes 集
群称为 Tanzu Kubernetes 集群。

n 作为 vSphere 管理员,您可以使用与常规虚拟机相同的工具来管理和监控 vSphere Pod 和 Tanzu


Kubernetes 集群。

n 作为 vSphere 管理员,您可以全面了解在不同命名空间中运行的 vSphere Pod 和 Tanzu


Kubernetes 集群、它们在环境中的放置以及它们使用资源的情况。

通过在 Hypervisor 层上运行 Kubernetes,还可以简化 vSphere 管理员和 DevOps 工程师之间的协作,


因为这两个角色使用相同的对象。

什么是工作负载?
在 vSphere with Tanzu 中,工作负载是通过以下方式之一部署的应用程序:

n 由在 vSphere Pod 和/或常规虚拟机内运行的容器组成的应用程序。

n 使用 VMware Tanzu™ Kubernetes Grid™ 服务 部署的 Tanzu Kubernetes 集群。

VMware, Inc. 13
vSphere with Tanzu 配置和管理

n 在使用 VMware Tanzu™ Kubernetes Grid™ 服务 部署的 Tanzu Kubernetes 集群内运行的应用程


序。

什么是 vSphere Pod?


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

图 1-3. vSphere Pod

ESXi 主机

vSphere Pod vSphere Pod

容器
容器
容器

Linux 内核 Linux 内核

CPU 内存 存储 CPU 内存 存储

vSphere Pod 是 vCenter Server 中的对象,因此支持工作负载的以下功能:

n 强隔离。每个 vSphere Pod 都有一个 Linux 内核,该内核提供与 vCenter Server 中的其他工作负载


和对象的隔离。Linux 内核基于 Photon OS。

n 资源管理:vSphere DRS 处理 vSphere Pod 在 主管集群 上的放置位置。

n 高性能:vSphere Pod 会获得与虚拟机相同级别的资源隔离,既能消除邻居吵闹的问题,又能保持快


速启动和减少容器开销。

n 诊断。作为 vSphere 管理员,您可对工作负载使用可用于 vSphere 的所有监控和自检工具。

vSphere Pod 与 Open Container Initiative (OCI) 兼容,并且可从任何操作系统运行容器(前提是这些容


器也与 OCI 兼容)。

VMware, Inc. 14
vSphere with Tanzu 配置和管理

图 1-4. vSphere Pod 网络连接和存储

vSphere Pod

容器

容器映像
容器

容器引擎
临时磁盘

Pod 引擎 Spherelet

持久卷
hostd
vNIC

NSX vSwitch

vSphere Pod 根据存储的对象使用三种存储,它们是临时 VMDK、持久卷 VMDK 和容器映像 VMDK。作


为 vSphere 管理员,您可在 主管集群 级别为容器映像缓存、临时 VMDK 和 Kubernetes 控制平面虚拟
机的放置位置配置存储策略。在命名空间 主管命名空间 级别,您可以为持久卷以及 Tanzu Kubernetes
集群中虚拟机的放置位置配置存储策略。有关 vSphere with Tanzu 的存储要求和概念的详细信息,请参
见第 7 章 vSphere with Tanzu 中的存储。

对于网络连接,vSphere Pod 和通过 Tanzu Kubernetes Grid 服务 创建的 Tanzu Kubernetes 集群的虚
拟机使用 NSX-T Data Center 提供的拓扑。有关详细信息,请参见 vSphere with Tanzu 的网络连接。

仅使用 NSX-T Data Center 作为网络连接堆栈的 主管集群 支持 vSphere Pod。配置了 vSphere 网络连
接堆栈的集群不提供此支持。

什么是 Tanzu Kubernetes 集群?


Tanzu Kubernetes 集群是由 VMware 构建、签名和支持的开源 Kubernetes 容器编排平台的完整分发
版。可以通过使用 Tanzu Kubernetes Grid 服务 在 主管集群 上置备和运行 Tanzu Kubernetes 集群。主
管集群 是启用了 vSphere with Tanzu 的 vSphere 集群。

Tanzu Kubernetes Grid 服务 创建的 Tanzu Kubernetes 集群的主要特性


Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群具有以下特性:

n Kubernetes 的固有安装

n 与 vSphere 基础架构集成

VMware, Inc. 15
vSphere with Tanzu 配置和管理

n 可用于生产

n VMware 提供全面支持

n 由 Kubernetes 管理

由 Tanzu Kubernetes Grid Service


置备的 Tanzu Kubernetes 集群...

是固有的 进行了紧密 可用于生产 完全受支持 由 Kubernetes


集成 管理

注 VMware 以 Tanzu 品牌营销一系列以 Kubernetes 为重点的产品。通过使用 Tanzu Kubernetes


Grid 服务 创建的 Tanzu Kubernetes 集群是 vSphere 的 vSphere with Tanzu 加载项的组件。有关
VMware 以 Tanzu 品牌营销其他以 Kubernetes 为重心的产品的详细信息,请参见 VMware Tanzu 文
档。

Kubernetes 的固有安装
Tanzu Kubernetes 是 Kubernetes 的固有安装。

Tanzu Kubernetes Grid 服务 提供经过深思熟虑的默认设置,并针对 vSphere 进行了优化,可用于置备


Tanzu Kubernetes 集群。通过使用 Tanzu Kubernetes Grid 服务,可以减少部署和运行企业级
Kubernetes 集群时通常需要的时间和工作量。

有关详细信息,请参见 Tanzu Kubernetes Grid 服务 架构。

与 vSphere 基础架构集成
Tanzu Kubernetes 集群与底层 vSphere 基础架构相集成,该基础架构针对运行 Kubernetes 进行了优
化。

Tanzu Kubernetes 集群与 vSphere SDDC 堆栈相集成,包括存储、网络连接和身份验证。此外,Tanzu


Kubernetes 集群还构建于映射到 vCenter Server 集群的 主管集群 之上。由于这种紧密集成,运行
Tanzu Kubernetes 集群是统一的产品体验。

有关详细信息,请参见 vSphere with Tanzu 架构。

可用于生产
Tanzu Kubernetes 集群针对运行生产工作负载进行了调优。

Tanzu Kubernetes Grid 服务 置备可用于生产的 Tanzu Kubernetes 集群。您可以运行生产工作负载,


而无需执行任何其他配置。此外,您可以确保可用性并允许 Kubernetes 软件进行滚动升级,并可在单独
的集群中运行不同版本的 Kubernetes。

VMware, Inc. 16
vSphere with Tanzu 配置和管理

有关详细信息,请参见第 8 章 在 vSphere with Tanzu 中运行 Tanzu Kubernetes 集群。

VMware 提供全面支持
Tanzu Kubernetes 集群受 VMware 支持。

Tanzu Kubernetes 集群使用 VMware 的开源 Photon OS,部署在 vSphere 基础架构上,并在 ESXi 主
机上运行。如果您在使用堆栈的任何一层(从 Hypervisor 到 Kubernetes 集群)时遇到问题,只需与
VMware 这一家供应商联系即可。

有关详细信息,请参见 Tanzu Kubernetes Grid 可支持性列表。

由 Kubernetes 管理
Tanzu Kubernetes 集群由 Kubernetes 进行管理。

Tanzu Kubernetes 集群构建于 主管集群 之上,后者本身就是一个 Kubernetes 集群。Tanzu


Kubernetes 集群在 主管命名空间 中通过自定义资源进行定义。可以使用熟悉的 kubectl 命令以自助方式
置备 Tanzu Kubernetes 集群。整个工具链保持一致,无论是置备集群还是部署工作负载,您都可以使用
相同的命令、熟悉的 YAML 和通用工作流。

有关详细信息,请参见 Tanzu Kubernetes 集群租户模型。

何时使用 vSphere Pod 和 Tanzu Kubernetes 集群


使用 vSphere Pod 还是 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群,取决于与在 主
管集群 上部署和管理 Kubernetes 工作负载相关的目标。

如果您是需要执行以下操作的 vSphere 管理员或 DevOps 工程师,请使用 vSphere Pod:

n 无需自定义 Kubernetes 集群即可运行容器。

n 创建具有强大资源和安全隔离的容器化应用程序。

n 直接在 ESXi 主机上部署 vSphere Pod。

如果您是要执行以下操作的 DevOps 工程师或开发人员,请使用 Tanzu Kubernetes Grid 服务 置备的


Tanzu Kubernetes 集群:

n 在开源、社区一致的 Kubernetes 软件上运行容器化应用程序。

n 控制 Kubernetes 集群,包括对控制平面和工作节点的 root 级别访问权限。

n 在无需升级基础架构的情况下保持最新的 Kubernetes 版本。

n 使用 CI/CD 管道置备暂时性 Kubernetes 集群。

n 自定义 Kubernetes 集群,例如,安装自定义资源定义、Operators 和 helm chart。

n 使用 kubectl CLI 创建 Kubernetes 命名空间。

n 管理集群级别访问控制并配置 PodSecurityPolicies.

n 创建 NodePort. 类型的服务。

VMware, Inc. 17
vSphere with Tanzu 配置和管理

n 使用 HostPath 卷。

n 运行特权 pod。

vSphere with Tanzu 用户角色和工作流


vSphere with Tanzu 平台涉及两个角色:vSphere 管理员和 DevOps 工程师。这两个角色通过不同的接
口与平台进行交互,并且可以在 vCenter Single Sign-On 中为其定义具有关联权限的用户或用户组。
Vsphere 管理员和 DevOps 工程师角色的工作流是不同的,由这些角色所需的特定专业知识领域决定。

用户角色和工作流
作为 vSphere 管理员,用于与 vSphere with Tanzu 平台进行交互的主界面是 vSphere Client。概括地
说,您的职责包括配置 主管集群 和命名空间,DevOps 工程师可以在其中部署 Kubernetes 工作负载。
您应熟悉有关 vSphere 和 NSX-T 技术的知识,并了解有关 Kubernetes 的基本知识。

图 1-5. vSphere 管理员高级别工作流

vSphere 管理员工作流

配置用于主管集群的计算、存储和网络连接

将 vSphere 集群配置为主管集群

在主管集群上创建并配置命名空间

作为 DevOps 工程师,您可以是 Kubernetes 开发人员和应用程序所有者、Kubernetes 管理员,或将两


者的功能组合在一起。作为 DevOps 工程师,您可以使用 kubectl 命令在 主管集群 上的现有命名空间上
部署 vSphere Pod 和 Tanzu Kubernetes 集群。通常,作为 DevOps 工程师,您无需成为 vSphere 和
NSX-T 的专家,但应对这些技术和 vSphere with Tanzu 平台有一个基本的了解,以便更有效地与
vSphere 管理员进行交互。

VMware, Inc. 18
vSphere with Tanzu 配置和管理

图 1-6. DevOps 工程师高级别工作流

DevOps 工程师工作流

通过 kubectl-vsphere CLI 插件登录到主管集群

获取您有权访问的上下文。上下文与主管集群上的
命名空间相对应

部署 vSphere Native Pod 或 Tazu Kubernetes 集群

使用 NSX-T Data Center 工作流的 主管集群


作为 vSphere 管理员,您可以使用必要的计算、存储和网络组件配置 vSphere with Tanzu 平台。您可以
使用 NSX-T Data Center 作为 主管集群 的网络连接堆栈。有关系统要求的详细信息,请参见设置具有
NSX-T Data Center 的 主管集群 的系统要求和拓扑。

VMware, Inc. 19
vSphere with Tanzu 配置和管理

图 1-7. 使用 NSX-Data Center 网络连接工作流的 主管集群

计算配置

创建 vSphere 集群

在集群上配置 vSphere DRS 和 HA

存储配置

使用 vSAN 或其他存储解决方案配置共享存储

创建用于放置 Kubernetes 控制层面虚拟机、


容器映像缓存和容器临时磁盘的存储策略

NSX-T Data Center 配置

安装和配置 NSX Manager

创建覆盖、VLAN 和 Edge 传输区域

为主机和 Edge 逻辑网络连接创建上行链路配置文件

为主机的隧道端点创建 IP 池

创建主机传输节点

配置和部署 NSX Edge 节点虚拟机

创建 NSX Edge 集群

创建 NSX-T 第 0 层上行链路分段

创建 NSX-T 第 0 层网关

将 vSphere 集群配置为主管集群

VMware, Inc. 20
vSphere with Tanzu 配置和管理

使用 vSphere 网络连接堆栈工作流的 主管集群


作为 vSphere 管理员,您可以将 vSphere 集群配置为具有 vSphere 网络连接堆栈的 主管集群。有关系
统要求的详细信息,请参见设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑。

VMware, Inc. 21
vSphere with Tanzu 配置和管理

图 1-8. 使用 vSphere 网络连接堆栈配置工作流的 主管集群

计算配置

创建 vSphere 集群

在集群上配置 vSphere DRS 和 HA

存储配置

使用 vSAN 或其他存储解决方案
配置共享存储

创建用于放置 Kubernetes 控制平面


虚拟机的存储策略

网络配置

创建 vSphere Distributed Switch

将集群中的主机添加到交换机

为工作负载网络创建分布式端口组

安装和配置 HAProxy 负载均衡器

Tanzu Kubernetes
集群配置

创建已订阅内容库并将其与主管集群
相关联以使用 Tanzu Kubernetes 集群节点

将 vSphere 集群配置为主管集群

VMware, Inc. 22
vSphere with Tanzu 配置和管理

命名空间创建和配置工作流
作为 vSphere 管理员,您可以在 主管集群 上创建和配置命名空间。您必须咨询 DevOps 工程师,以收集
有关他们要运行的应用程序的特定资源要求,并相应地配置命名空间。有关详细信息,请参见第 5 章 在 主
管集群 上使用 vSphere 命名空间。

图 1-9. 命名空间配置工作流

准备命名空间配置

为将访问命名空间的 DevOps 工程师创建用户和用户组

创建用于定义放置持久卷的存储类的存储策略

创建已订阅内容库并将其与主管
集群相关联以使用 Tanzu Kubernetes 集群节点

命名空间配置

创建命名空间

设置将访问命名空间的用户和用户组的权限

分配为放置持久卷而创建的存储策略

设置存储、CPU 和内存的容量和使用配额

可选。在 Kubernetes 对象上设置限制

将 Kubernetes 控制层面的 URL 提供给将在该命名空间上部署


Kubernetes 工作负载的 DevOps 工程师

vSphere Pod 工作流


作为 DevOps 工程师,您可以使用 vSphere Pod 服务运行您的应用程序。VSphere Pod 服务会在 主管
集群 上创建 vSphere Pod。有关详细信息,请参见第 9 章 使用 vSphere Pod。

VMware, Inc. 23
vSphere with Tanzu 配置和管理

图 1-10. vSphere Pod 工作流

获取所需信息

与您的 vSphere 管理员核实是否在主管集群上至少有一个


满足应用程序系统要求的命名空间

与您的 vSphere 管理员核实您对该命名空间是否具有编辑权限

从 vSphere 管理员处获取 Kubernetes 控制层面的 IP 地址

获取用于登录到主管集群的 vCenter Single Sign-On 凭据

登录到主管集群
并获取上下文

从 Kubernetes 控制层面 IP 地址的网页下载 kubectl - vsphere CLI

使用您的用户凭据登录到主管集群

列出您具有访问权限的上下文(命名空间)

部署 vSphere Native Pod

创建应用程序 YAML 文件

部署应用程序 YAML 文件

Tanzu Kubernetes 集群工作流


作为 DevOps 工程师,您可以在由 vSphere 管理员创建和配置的命名空间上创建和配置 Tanzu
Kubernetes 集群。有关详细信息,请参见用于创建 Tanzu Kubernetes 集群的工作流。

VMware, Inc. 24
vSphere with Tanzu 配置和管理

图 1-11. Tanzu Kubernetes 集群工作流

获取所需信息

与 vSphere 管理员核实是否存在一个命名空间
满足部署 Tanzu Kubernetes 集群的资源要求

与您的系统管理员核实此命名空间是否配置
有已订阅内容库用于 Tanzu Kubernetes 集群

与您的系统管理员核实您对命名空间是否具有编辑权限

从 vSphere 管理员处获取 Kubernetes 控制层面的 IP 地址

获取用于登录到主管
集群的 vCenter Single Sign-On 凭据

登录到主管集群
并获取上下文

从 Kubernetes 控制层面 IP 地址的网页下载 kubectl - vsphere CLI

使用您的用户凭据通过 kubectl - vsphere CLI 登录到主管集群

列出您具有权限的上下文(命名空间)

创建 Tanzu Kubernetes 集群

确定可用的存储和虚拟机类,以及 Kubernetes 分发版本

查看用于创建和升级 Tanzu Kubernetes 集群的可用配置参数列表

创建 Kubernetes 集群配置 YAML 文件

置备 Tanzu Kubernetes 集群

监控集群节点的部署

登录到 Tanzu Kubernetes 集群并部署测试应用程序

VMware, Inc. 25
vSphere with Tanzu 配置和管理

vSphere with Tanzu 如何更改 vSphere 环境?


在 vSphere 集群针对 Kubernetes 工作负载进行配置,进而成为 主管集群 后,它会将对象添加到
vCenter Server 清单中,例如通过 vSphere Pod 创建的命名空间、VMware Tanzu™ Kubernetes Grid™
服务 和 Kubernetes 集群。

在每个 主管集群 下,您可以查看:

n 表示在集群中运行的逻辑应用程序的命名空间。

n 主管集群 上每个命名空间的资源池。

在每个命名空间内,您可以查看:

n vSphere Pod。

n 通过 VMware Tanzu™ Kubernetes Grid™ 服务 创建的 Kubernetes 集群。

n Kubernetes 控制平面虚拟机。

n 网络和存储资源。

VMware, Inc. 26
vSphere with Tanzu 组件和架构
2
启用了 vSphere with Tanzu 的集群称为 主管集群。该集群是 vSphere with Tanzu 的基础,提供运行
vSphere Pod 和 Tanzu Kubernetes 集群所需的组件和资源。

本章讨论了以下主题:

n vSphere with Tanzu 架构

n Tanzu Kubernetes Grid 服务 架构

n Tanzu Kubernetes 集群租户模型

n vSphere with Tanzu 的网络连接

n Tanzu Kubernetes 集群网络连接

n vSphere with Tanzu 的身份验证

n 如何对 Tanzu Kubernetes 集群进行身份验证

vSphere with Tanzu 架构


在 vSphere 集群上启用 vSphere with Tanzu 后,它会在 Hypervisor 层内创建一个 Kubernetes 控制平
面。此层包含支持在 ESXi 中运行 Kubernetes 工作负载的特定对象。

图 2-1. 主管集群 常规架构

vSphere with Tanzu

Tanzu Kubernetes Grid service for vSphere

vSphere
主管集群
Center

ESXi 网络 存储
DevOps vSphere Admin

VMware, Inc. 27
vSphere with Tanzu 配置和管理

为 vSphere with Tanzu 启用的集群称为 主管集群。它在 SDDC 层上运行,包含用于计算的 ESXi、NSX-


T Data Center 或 vSphere 网络连接以及 vSAN 或其他共享存储解决方案。共享存储用于 vSphere
Pod、主管集群 中运行的虚拟机以及 Tanzu Kubernetes 集群中的 Pod 的持久卷。创建 主管集群 后,作
为 vSphere 管理员,您可以在 主管集群 中创建名为 主管命名空间 的命名空间。作为 DevOps 工程师,
您可以运行由 vSphere Pod 中运行的容器组成的工作负载,并创建 Tanzu Kubernetes 集群。

图 2-2. 主管集群的架构

vCenter Server

vSphere Admin

主管集群

ESXi 主机 ESXi 主机 ESXi 主机

Spherelet hostd Spherelet hostd Spherelet hostd

K8S 控制层面虚拟机 K8S 控制层面虚拟机 K8S 控制层面虚拟机

vSphere Pod vSphere Pod


CRX CRX DevOps
vSphere Pod

CRX vSphere Pod


CRX

n Kubernetes 控制平面虚拟机。在属于 主管集群 的主机上共创建了三个 Kubernetes 控制平面虚拟


机。三个控制平面虚拟机已负载均衡,因为每个虚拟机都有自己的 IP 地址。此外,还会将一个浮动 IP
地址分配给其中一个虚拟机。vSphere DRS 确定控制平面虚拟机在 ESXi 主机上的确切放置位置,并
在需要时进行迁移。vSphere DRS 还与控制平面虚拟机上的 Kubernetes 调度程序集成,以便 DRS
确定 vSphere Pod 的放置位置。作为 DevOps 工程师,当您调度 vSphere Pod 时,请求将通过常规
Kubernetes 工作流进入 DRS,从而最终确定放置位置。

n Spherelet。将在每个主机上创建一个名为 Spherelet 的额外进程。它是一种以本机方式传输到 ESXi


的 kubelet,允许 ESXi 主机加入 Kubernetes 集群。

n Container Runtime Executive (CRX)。从 Hostd 和 vCenter Server 角度来看,CRX 与虚拟机类


似。CRX 包括一个可与 Hypervisor 协同工作的准虚拟化 Linux 内核。CRX 使用与虚拟机相同的硬件
虚拟化技术,且其周围具有虚拟机边界。使用直接引导技术,以允许 CRX 的 Linux 客户机在未通过内
核初始化的情况下启动主初始化进程。这样可使 vSphere Pod 以近乎容器的速度快速引导。

n 虚拟机服务、集群 API 和 VMware Tanzu™ Kubernetes Grid™ 服务 是在 主管集群 上运行的模块,它


们使得能够置备和管理 Tanzu Kubernetes 集群。

VMware, Inc. 28
vSphere with Tanzu 配置和管理

主管命名空间
命名空间设置 vSphere Pod 和使用 Tanzu Kubernetes Grid 服务 创建的 Tanzu Kubernetes 集群可以
运行的资源边界。最初创建命名空间时,它在 主管集群 内具有无限资源。作为 vSphere 管理员,您可以
设置 CPU、内存、存储以及可在命名空间中运行的 Kubernetes 对象数量的限制。将为 vSphere 中的每
个命名空间创建一个资源池。存储限制在 Kubernetes 中表示为存储配额。

图 2-3. 主管命名空间

主管集群

命名空间

vSphere 虚拟机 vSphere Tanzu 虚拟机


Pod Pod Kubernetes 集群

CPU 内存 存储

为了向 DevOps 工程师提供对命名空间的访问权限,作为 vSphere 管理员,您可将权限分配给与


vCenter Single Sign-On 关联的标识源中的可用用户或用户组。

创建命名空间并为其配置资源和对象限制以及权限和存储策略后,作为 DevOps 工程师,您可以访问该命


名空间以运行 Kubernetes 工作负载和使用 Tanzu Kubernetes Grid 服务 创建 Tanzu Kubernetes 集
群。

Tanzu Kubernetes 集群
Tanzu Kubernetes 集群是由 VMware 打包、签名和支持的开源 Kubernetes 软件的完整分发版。在
vSphere with Tanzu 环境中,您可以使用 Tanzu Kubernetes Grid 服务 在 主管集群 上置备 Tanzu
Kubernetes 集群。您可以使用 kubectl 和 YAML 定义以声明方式调用 Tanzu Kubernetes Grid 服务
API。

Tanzu Kubernetes 集群驻留在 主管命名空间 中。您可以使用与用于标准 Kubernetes 集群的相同工具,


以相同的方式将工作负载和服务部署到 Tanzu Kubernetes 集群。有关详细信息,请参见第 8 章 在
vSphere with Tanzu 中运行 Tanzu Kubernetes 集群。

VMware, Inc. 29
vSphere with Tanzu 配置和管理

图 2-4. Tanzu Kubernetes 集群的 vSphere with Tanzu 架构

Pod
RUNC
容器

Pod
RUNC
容器

Tanzu Tanzu
Kubernetes Kubernetes
集群 集群
工作 工作
vSphere Pod 节点 节点
Linux 容器
虚拟机 虚拟机

Linux 容器

vSphere Pod Tanzu Tanzu


Kubernetes Kubernetes
Linux 容器 集群 集群
控制平面 控制平面
Linux 容器 节点 节点

vSphere Pod 虚拟机 虚拟机

Linux 容器
vSphere vSphere Tanzu Tanzu Tanzu vSphere
Linux 容器 虚拟机 虚拟机 虚拟机 虚拟机 Kubernetes Kubernetes Kubernetes 虚拟机
Pod Pod Pod
集群 集群 集群

主管命名空间 主管命名空间 主管命名空间 主管命名空间 主管命名空间

主管集群 主管集群

VMware SC 控制 VMware SC 控制
Tanzu™ 层面节点 Tanzu™ 层面节点
虚拟机 集群 虚拟机 集群
Kubernetes Kubernetes
运算符 API 运算符 API
Grid™ 虚拟机 Grid™ 虚拟机
服务 服务

vSphere 集群 vSphere 集群

具有 NSX-T Data Center 或 vSphere 网络连接的 vSphere

配置了 vSphere 网络连接堆栈的 主管集群


配置了 vSphere 网络连接堆栈的 主管集群 仅支持运行使用 Tanzu Kubernetes Grid 服务 创建的 Tanzu
Kubernetes 集群。该集群还支持 vSphere 网络服务 和存储服务。

配置了 vSphere 网络连接堆栈的 主管集群 不支持 vSphere Pod。因此,Spherelet 组件在此类集群中不


可用,且 DRS 不负责 pod 的放置,因为 pod 只能在 Tanzu Kubernetes 集群内运行。配置了 vSphere
网络连接堆栈的 主管集群 也不支持 注册表服务,因为该服务只与 vSphere Pod 一起使用。

在配置了 vSphere 网络连接堆栈的集群上创建的 主管命名空间 也不支持运行 vSphere Pod,而只支持


Tanzu Kubernetes 集群。

Tanzu Kubernetes Grid 服务 架构


Tanzu Kubernetes Grid 服务 支持对 Tanzu Kubernetes 集群进行自助式生命周期管理。可以使用
Tanzu Kubernetes Grid 服务,通过 Kubernetes 操作员和开发人员熟悉的声明性方式创建和管理 Tanzu
Kubernetes 集群。

VMware, Inc. 30
vSphere with Tanzu 配置和管理

Tanzu Kubernetes Grid 服务 组件


Tanzu Kubernetes Grid 服务 提供三层控制器来管理 Tanzu Kubernetes 集群的生命周期。

n Tanzu Kubernetes Grid 服务 置备的集群中包含与底层 主管命名空间 资源集成所需的组件。这些组


件包括与 主管集群 集成的云提供商插件。此外,Tanzu Kubernetes 集群会将持久卷请求传递到与
VMware 云原生存储 (CNS) 集成的 主管集群。请参见第 7 章 vSphere with Tanzu 中的存储。

n Cluster API 为集群创建、配置和管理提供了说明性的 Kubernetes 样式 API。集群 API 的输入包括描


述集群的资源、描述组成集群的虚拟机的一组资源以及描述集群加载项的一组资源。

n 虚拟机服务 提供了用于管理虚拟机和关联 vSphere 资源的描述性 Kubernetes 样式 API。虚拟机服务


引入了表示抽象可重用硬件配置的虚拟机类的概念。虚拟机服务 提供的功能用于管理托管 Tanzu
Kubernetes 集群的控制平面节点虚拟机和工作节点虚拟机的生命周期。

图 2-5. Tanzu Kubernetes Grid 服务 架构和组件

用户命名空间 服务 vCenter
命名空间 Server

Tanzu Tanzu
UI
CPI CSI CNI 编写 Kubernetes Kubernetes
集成
Grid 资源 Grid 服务
Pod Pod Pod Pod
集群
Tanzu Kubernetes 集群 资源 集群 API UI
控制器 集成
虚拟机 虚拟机 虚拟机 计算机
资源
集群 API
虚拟机 提供程序
资源

Supervisor 虚拟机 UI
资源 服务 集成

Supervisor 集群 NCP-CNI CNS-CSI CNS

ESXi ESXi ESXi ESXi

Tanzu Kubernetes 集群组件


在 Tanzu Kubernetes 集群中运行的组件跨越四个领域:身份验证和授权、存储集成、Pod 网络连接和负
载均衡。

n 身份验证 Webhook:作为 Pod 在集群内运行的 Webhook,用于验证用户身份验证令牌。

n 容器存储接口插件:通过 主管集群 与 CNS 集成的准虚拟化 CSI 插件。

VMware, Inc. 31
vSphere with Tanzu 配置和管理

n 容器网络接口插件:提供 Pod 网络连接的 CNI 插件。

n 云服务提供商实施:支持创建 Kubernetes 负载均衡器服务。

Tanzu Kubernetes Grid 服务 API


可以使用 Tanzu Kubernetes Grid 服务 API 置备和管理 Tanzu Kubernetes 集群。它是一个使用
kubectl 和 YAML 进行调用的声明性 API。

通过声明性 API,可以指定 Tanzu Kubernetes 集群的所需状态:节点数、可用存储、虚拟机大小、


Kubernetes 软件版本,而无需向系统发出强制性命令。Tanzu Kubernetes Grid 服务 将努力置备符合所
需状态的集群。

要调用 Tanzu Kubernetes Grid 服务 API,需使用 YAML 文件调用 kubectl,进而调用该 API。创建集群


后,需更新 YAML 以更新集群。

Tanzu Kubernetes Grid 服务 接口


vSphere 管理员使用 vSphere Client 配置 主管命名空间 并授予权限。他们还可监控集群组件使用的资
源,并从 vSphere 清单中的这些资源查看相关信息。

DevOps 工程师使用 kubectl 的 vSphere 插件 通过其 vCenter Single Sign-On 凭据连接到 主管命名空
间。连接后,DevOps 工程师使用 kubectl 置备 Tanzu Kubernetes 集群。

开发人员可以使用 kubectl 的 vSphere 插件 及其 vCenter Single Sign-On 凭据连接到已置备的集群。或


者,如果集群管理员配置了支持的 Kubernetes 身份验证提供程序,则开发人员可以使用 kubectl 进行连
接。要在 Kubernetes 中部署工作负载并与集群环境进行交互,开发人员需要使用 kubectl。

Tanzu Kubernetes Grid 服务 演示


观看以下视频,了解如何使用 Tanzu Kubernetes Grid 服务 创建和操作 Tanzu Kubernetes 集群:
vSphere 7 with Kubernetes - Tanzu Kubernetes 集群 - 技术概述。

Tanzu Kubernetes 集群租户模型


主管集群 是 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群的管理平面。使用 Tanzu
Kubernetes 集群所在的 vSphere Namespace 强制执行租户模型。

主管集群
主管集群 提供构建 Tanzu Kubernetes 集群所在的管理层。Tanzu Kubernetes Grid 服务 是一个自定义
控制器管理器,其中包含一组属于 主管集群 的控制器。Tanzu Kubernetes Grid 服务 的用途是置备
Tanzu Kubernetes 集群。

虽然 主管集群 与 vSphere 集群之间是一对一关系,但 主管集群 和 Tanzu Kubernetes 集群之间是一对


多关系。您可以在单个 主管集群 中置备多个 Tanzu Kubernetes 集群。通过 主管集群 提供的工作负载管
理功能,让您能够控制集群配置和生命周期,同时有助于您保持与上游 Kubernetes 的并发性。

有关详细信息,请参见第 4 章 启用工作负载管理。

VMware, Inc. 32
vSphere with Tanzu 配置和管理

vSphere 命名空间
您可以将一个或多个 Tanzu Kubernetes 集群部署到一个 vSphere Namespace。资源配额和存储策略适
用于 vSphere Namespace,并由部署在那儿的 Tanzu Kubernetes 集群继承。

置备 Tanzu Kubernetes 集群时,将在 vSphere Namespace 中创建一个资源池和虚拟机文件夹。Tanzu


Kubernetes 集群控制平面和工作节点虚拟机放置在此资源池和虚拟机文件夹中。使用 vSphere Client,
可以通过选择主机和集群视图查看此层次结构,也可以通过选择虚拟机和模板视图查看。

有关详细信息,请参见第 5 章 在 主管集群 上使用 vSphere 命名空间。

内容库
vSphere 内容库提供用于创建 Tanzu Kubernetes 集群节点的虚拟机模板。对于要在其中部署 Tanzu
Kubernetes 集群的每个 主管集群,您必须定义一个已订阅内容库对象,以便为 Tanzu Kubernetes Grid
服务 用于构建集群节点的 OVA 提供来源。可以为多个 主管集群 配置同一个已订阅内容库。已订阅内容库
与 vSphere Namespace 之间没有关系。

有关详细信息,请参见为 Tanzu Kubernetes 集群创建已订阅内容库。

集群安全性
默认情况下,Tanzu Kubernetes 集群是安全的。受限 PodSecurityPolicy (PSP) 可用于 Tanzu
Kubernetes Grid 服务 置备的任何 Tanzu Kubernetes 集群。如果开发人员需要运行特权 Pod 或根容
器,集群管理员必须至少创建一个 RoleBinding,以便授予用户对默认特权 PSP 的访问权限。有关详细信
息,请参见对 Tanzu Kubernetes 集群使用 POD 安全策略。

Tanzu Kubernetes 集群没有基础架构凭据。存储在 Tanzu Kubernetes 集群中的凭据仅够访问 Tanzu


Kubernetes 集群有租户的 vSphere Namespace。因此,不会为集群管理员或用户提供特权提升途径。

用于访问 Tanzu Kubernetes 集群的身份验证令牌已划分范围,因此无法使用它们访问 主管集群。这样可


防止集群管理员或可能会威胁集群的某个人在登录到 Tanzu Kubernetes 集群时使用其 root 级别访问权
限捕获 vSphere 管理员的令牌。

vSphere with Tanzu 的网络连接


主管集群 可以使用 vSphere 网络连接堆栈或 VMware NSX-T™ Data Center 建立与 Kubernetes 控制平
面虚拟机、服务和工作负载的连接。为 主管集群 配置 vSphere 网络连接堆栈时,集群中的所有主机都将
连接到可建立与 Kubernetes 工作负载和控制平面虚拟机连接的 vSphere Distributed Switch。使用
vSphere 网络连接堆栈的 主管集群 需要使用可建立与 DevOps 用户和外部服务连接的第三方负载均衡
器。配置了 VMware NSX-T™ Data Center 的 主管集群 使用该解决方案的基于软件的网络以及 NSX
Edge 负载均衡器建立与外部服务和 DevOps 用户的连接。

使用 NSX-T Data Center 进行 主管集群 网络连接


VMware NSX-T™ Data Center 为 主管集群 中的对象与外部网络提供网络连接。集群中包含的 ESXi 主机
的连接由标准 vSphere 网络处理。

VMware, Inc. 33
vSphere with Tanzu 配置和管理

图 2-6. 使用 NSX-T Data Center 进行 主管集群 网络连接

开发人员

第1层网关
网络
上行链路
VLAN

第0层网关 Edge 负载平衡器

API 虚拟 IP

输入虚拟 IP

主管集群

控制层面 命名空间 A 命名空间 B


虚拟机 分段 分段
分段

命名空间 A 命名空间 B

K8S
控制层面 vSphere vSphere
Pod Pod
Ncp

ESXi 主机 ESXi 主机 ESXi 主机

NSX Manager vCenter Server Spherelet Spherelet Spherelet

管理网络

n NSX Container Plug-in (NCP) 提供 NSX-T Data Center 与 Kubernetes 之间的集成。NCP 的主要
组件在容器中运行,并与 NSX Manager 和 Kubernetes 控制平面进行通信。NCP 监控对容器和其他
资源的更改,并通过调用 NSX API 管理容器的网络资源,例如,逻辑端口、分段、路由器和安全组。

n NSX Edge 提供从外部网络到 主管集群 对象的连接。NSX Edge 集群具有一个负载均衡器,可为驻留


在控制平面虚拟机上的 Kubernetes API 服务器及必须从 主管集群 外部发布并访问的所有应用程序提
供冗余。

VMware, Inc. 34
vSphere with Tanzu 配置和管理

n 第 0 层网关与 NSX Edge 集群关联,以提供到外部网络的路由。上行链路接口使用动态路由协议、


BGP 或静态路由。

n 每个 主管集群 都需要第 1 层网关,以提供从集群到第 0 层网关的南向流量。

n 分段与 主管集群 中的每个命名空间相关联,以提供与 vSphere Pod 的连接。

n 控制平面虚拟机分段可在控制平面虚拟机和 vSphere Pod 之间提供连接。

要了解有关 主管集群 网络的更多信息,请观看视频 vSphere 7 with Kubernetes 网络服务 - 第 1 部分 -主


管集群。

图 2-7. 使用 NSX-T Data Center 进行命名空间网络连接

ESXi 主机 1 ESXi 主机 2 ESXi 主机 3

Spherelet Spherelet Spherelet

命名空间 A 命名空间 B 命名空间 C


K8S K8S K8S
控制 控制 控制
vSphere vSphere 层面 vSphere vSphere 层面 vSphere vSphere 层面
Pod 1 Pod 2 VM 1 Pod 3 Pod 4 VM 2 Pod 5 Pod 6 VM 3

vSphere
Distributed
Switch
命名空间 A 分段

命名空间 B 分段
NCP
受管 命名空间 C 分段
NSX-T
覆盖 控制层面虚拟机分段
网络

现有
vSphere 管理网络
网络
ESXi 管理网络

第1层网关

vCenter Server NSX Manager

每个命名空间的分段驻留在与 NSX Edge 集群关联且以标准模式运作的 vSphere Distributed Switch


(VDS) 中。分段可为 主管集群 提供覆盖网络。

每个 vSphere Pod 通过接口连接到与 Pod 所在的命名空间关联的分段。

每个 ESXi 主机上的 Spherelet 进程通过管理网络的接口与 vCenter Server 进行通信。

VMware, Inc. 35
vSphere with Tanzu 配置和管理

使用 NSX-T Data Center 的网络连接配置方法


主管集群 使用固有的网络配置。配置使用 NSX-T Data Center 进行 主管集群 网络连接的方法有两种,这
两种方法均部署相同的网络模型:

n 配置 主管集群 网络的最简单方法是使用 VMware Cloud Foundation SDDC Manager。有关详细信


息,请参见 VMware Cloud Foundation SDDC Manager 文档。有关信息,请参见使用工作负载管
理。

n 您还可以使用现有 NSX-T Data Center 部署或部署 NSX-T Data Center 的新实例来手动配置 主管集
群 网络。有关详细信息,请参见为 vSphere with Tanzu 安装并配置 NSX-T Data Center。

使用 vSphere Distributed Switch 进行 主管集群 网络连接


vSphere Distributed Switch 支持的 主管集群 使用分布式端口组作为命名空间的工作负载网络。

VMware, Inc. 36
vSphere with Tanzu 配置和管理

图 2-8. 使用 vSphere Distributed Switch 进行命名空间网络连接

vCenter ESXi 上托管的


Server 负载均衡器

管理网络

主管 主管 Tanzu 主管 Tanzu
Tanzu
Kubernetes Kubernetes Kubernetes Kubernetes Kubernetes
Kubernetes
控制平面 控制平面 控制工作 控制平面 控制工作
控制节点
节点 节点 节点 节点 节点

工作负载 vSphere
Distributed Switch

主管分布式端口组 工作负载分布式端口组

ESXi 主机 ESXi 主机 ESXi 主机

vmnic0 vmnic1 vmnic0 vmnic1 vmnic0 vmnic1

链路聚合组

机架置顶式交换机 机架置底式交换机

L2/L3
架构

根据为 主管集群 实施的拓扑,可以使用一个或多个分布式端口组作为工作负载网络。用于建立与


Kubernetes 控制平面虚拟机连接的网络称为“主工作负载网络”。可以将此网络分配给 主管集群 上的所
有命名空间,也可以对每个命名空间使用不同的网络。Tanzu Kubernetes 集群将连接到分配给集群所在
命名空间的工作负载网络。

vSphere Distributed Switch 支持的 主管集群 使用外部负载均衡器建立与 DevOps 用户和外部服务的连


接。HAProxy 是当前支持的负载均衡器。

有关可能拓扑的详细信息,请参见设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑。

VMware, Inc. 37
vSphere with Tanzu 配置和管理

Tanzu Kubernetes 集群网络连接


Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群使用的网络连接是作为 vSphere with
Tanzu 基础架构底层的结构层和为集群 Pod、服务和输入提供网络连接的开源软件的组合。VMware 提供
了两个网络连接堆栈的选项。

Tanzu Kubernetes 集群的数据中心网络连接选项


对于部署了 Tanzu Kubernetes Grid 服务 的 主管集群,VMware 支持两个数据中心网络连接选项:

n vSphere Distributed Switch (vDS) 网络连接

n VMware NSX-T™ Data Center 网络连接

您选择的网络连接堆栈取决于您的许可和要求。有关详细信息,请参见第 3 章 启用工作负载管理的必备条
件。

要直接实现 vSphere with Tanzu 和部署 Tanzu Kubernetes 集群,您可以使用本机 vSphere 网络连
接。借助 VDS 网络连接,您可以提供自己的负载均衡器。有关详细信息,请参见设置具有 vSphere 网络
连接的 主管集群 的系统要求和拓扑。

每个 Tanzu Kubernetes 集群都位于专用网络上。Kubectl 请求进入集群负载均衡器,然后将请求转发到


一个或多个 Tanzu Kubernetes 集群控制平面 API 服务器。

借助 NSX-T 网络连接,当您创建 主管命名空间 时,将为每个命名空间定义一个 NSX-T 分段。此分段连


接到 主管集群 网络的 NSX-T Tier-1 网关。有关详细信息,请参见设置具有 NSX-T Data Center 的 主管
集群 的系统要求和拓扑。

借助 NSX-T 网络连接,当 DevOps 工程师在 主管命名空间 中置备第一个 Tanzu Kubernetes 集群时,


将创建新的第 1 层网关。对于该命名空间中置备的每个 Tanzu Kubernetes 集群,将为该集群创建一个分
段,并且它连接到其 主管命名空间 中的第 1 层网关。

借助 NSX-T 网络连接,当 Tanzu Kubernetes 集群由 Tanzu Kubernetes Grid 服务 置备时,会将 NSX-
T 负载均衡器自动部署到 NSX Edge 节点。此负载均衡器以虚拟服务器的形式提供负载均衡服务。将创建
一个虚拟服务器,为 Kubernetes API 提供第 4 层负载均衡。此虚拟服务器负责将 kubectl 流量路由到控
制平面。此外,对于集群上提供的每个 Kubernetes 服务负载均衡器,都会创建一个为该服务提供第 4 层
负载均衡的虚拟服务器。

下图说明了 Tanzu Kubernetes 集群的 NSX-T 网络连接。

VMware, Inc. 38
vSphere with Tanzu 配置和管理

图 2-9. Tanzu Kubernetes 集群的 NSX-T 网络连接

外部网络

主管集群 NSXT Edge 集群 主管命名空间


创建
TKG 集群 NSX-T Edge 节点 TKG 集群

SC 第 1 层 TKG
DevOps 工程师 GW 集群 工作节点 VM
第 0 层 GW
第 1 层 GW
SC 控制
层面虚拟机
创建
NSXT 控制平面节点 VM
命名空间 Ncp
vCenter Manager

vSphere Admin

VDS 上行链路
管理
Edge 上行链路
SC 控制平面分段
主管 NS 分段
TKG 集群分段

Tanzu Kubernetes 集群的 CNI 网络连接


由 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群支持以下容器网络接口 (CNI) 选项:

n Antrea

n Calico

Antrea 是新 Tanzu Kubernetes 集群的默认 CNI。如果使用的是 Antrea,则在集群置备期间无需将其指


定为 CNI。要将 Calico 用作 CNI,有两种方案供您选择:

n 直接在集群 YAML 中指定 CNI。请参见用于置备 Tanzu Kubernetes 集群的示例 YAML 文件。

n 更改默认 CNI。请参见更改 Tanzu Kubernetes 集群的默认 CNI。

注 如果将 Antrea 用作默认 CNI,则需要 Tanzu Kubernetes 集群的最低版本的 OVA 文件。请参见支


持的更新路径。

下表总结了 Tanzu Kubernetes 集群网络连接功能及其实现方式。

表 2-1. Tanzu Kubernetes 集群网络连接要


端点 提供程序 描述

Kubernetes API NSX-T 负载均衡器或自行提供 vDS 网络 对于 NSX-T,每个集群一个虚拟服务器。


连接

节点连接 NSX-T 分段或 vSphere Distributed 通过 NSX-T 第 1 层路由器或 vDS 提供集


Switch 群节点之间的连接,具体取决于选择的网
络堆栈。

Pod 连接 Antrea 或 Calico Pod 的容器网络接口。Antrea 使用 Open


vSwitch。Calico 使用 Linux 网桥和
BGP。

服务类型:ClusterIP Antrea 或 Calico 只能从集群内访问的默认 Kubernetes 服


务类型。

VMware, Inc. 39
vSphere with Tanzu 配置和管理

表 2-1. Tanzu Kubernetes 集群网络连接要 (续)


端点 提供程序 描述

服务类型:NodePort Antrea 或 Calico 允许 Kubernetes 网络代理通过每个工作


节点上打开的端口进行外部访问。

服务类型:LoadBalancer NSX-T 负载均衡器或自行提供 vDS 网络 对于 NSX-T,为每个服务类型定义提供一


连接 个虚拟服务器。

集群输入 第三方输入控制器 针对入站 Pod 流量的路由;可以使用任何


第三方输入控制器。

网络策略 Antrea 或 Calico 控制允许传入/传出所选 pod 和网络端点


的流量。Antrea 使用 Open vSwitch。
Calico 使用 Linux IP 表。

vSphere with Tanzu 的身份验证


作为 vSphere 管理员,您需要具备配置 主管集群 和管理命名空间的特权。您可以定义命名空间的权限,
以确定哪些 DevOps 工程师可以访问这些命名空间。作为 DevOps 工程师,您可以使用 vCenter Single
Sign-On 凭据对 主管集群 进行身份验证,且只能访问您有权访问的命名空间。

vSphere 管理员的权限
作为 vSphere 管理员,您需要具有 vSphere 集群的权限,以便将其配置为 主管集群,以及创建和管理命
名空间。您必须至少具有与 vSphere 集群中的用户帐户关联的以下特权之一:

n 修改命名空间配置。允许您在 主管集群 上创建和配置命名空间。

n 修改集群范围配置。允许您将 vSphere 集群配置为 主管集群。

设置 DevOps 工程师的权限
作为 vSphere 管理员,您可以向命名空间级别的用户帐户授予只读或写入权限。用户帐户必须在连接到
vCenter Single Sign-On 的标识源中可用。一个用户帐户可以访问多个命名空间。属于管理员组的用户可
以访问 主管集群 上的所有命名空间。

配置具有权限、资源配额和存储的命名空间后,您可以将 Kubernetes 控制平面的 URL 提供给 DevOps


工程师,使其可以使用该 URL 登录到控制平面。登录后,DevOps 工程师可以跨属于 vCenter Server 系
统的所有 主管集群 访问具有权限的所有命名空间。当 vCenter Server 系统处于增强型链接模式时,
DevOps 工程师可以跨链接模式组中的所有可用 主管集群 访问具有权限的所有命名空间。Kubernetes 控
制平面的 IP 地址是 NSX-T 生成的虚拟 IP,用作 Kubernetes 控制平面的访问点。

使用 主管集群 进行身份验证
作为 DevOps 工程师,您可以使用 适用于 vSphere 的 Kubernetes CLI 工具 以及 vCenter Single Sign-
On 凭据和 Kubernetes 控制平面 IP 地址向 主管集群 进行身份验证。有关详细信息,请参见以 vCenter
Single Sign-On 用户的身份连接到 主管集群。

VMware, Inc. 40
vSphere with Tanzu 配置和管理

在您登录到 主管集群 后,身份验证代理会将请求重定向到 vCenter Single Sign-On。vSphere kubectl


插件与 vCenter Server 建立会话,并从 vCenter Single Sign-On 中获取身份验证令牌。它还会获取您有
权访问的命名空间列表,并使用这些命名空间填充配置。如果您的用户帐户的权限发生变化,则下次登录
时将更新命名空间列表。

注 与 kubectl 的会话将持续 10 小时。会话过期后,必须再次对 主管集群 进行身份验证。注销时,将从


您的用户帐户的配置文件中删除令牌,但该令牌在会话结束之前一直有效。

对 Tanzu Kubernetes 集群进行身份验证


Tanzu Kubernetes 集群用户(包括 DevOps 工程师、开发人员和管理员)可以通过多种方式对集群进行
身份验证。有关详细信息,请参见如何对 Tanzu Kubernetes 集群进行身份验证。

注 Tanzu Kubernetes 集群要求用户和系统帐户具有 Pod 安全策略,以便将 Pod 和资源部署到集群。有


关详细信息,请参见对 Tanzu Kubernetes 集群使用 POD 安全策略。

如何对 Tanzu Kubernetes 集群进行身份验证


您可以通过多种方式对 Tanzu Kubernetes 集群环境进行身份验证,具体取决于您的角色和目的。

DevOps 工程师置备和操作 Tanzu Kubernetes 集群。开发人员将工作负载部署到 Tanzu Kubernetes 集


群。管理员可能需要对 Tanzu Kubernetes 集群进行故障排除。vSphere with Tanzu 提供支持每个角色
或目标的身份验证方法。

n DevOps 工程师连接到 主管集群 以置备和更新 Tanzu Kubernetes 集群。使用 kubectl 的 vSphere


插件 和 vCenter Single Sign-On 凭据进行身份验证。请参见以 vCenter Single Sign-On 用户的身份
连接到 主管集群。

n 集群管理员连接到已置备的 Tanzu Kubernetes 集群,以便对其进行操作和管理。

n 获得部署集群的 主管命名空间 上的编辑权限的用户分配有 cluster-admin 角色。集群管理员使用


kubectl 的 vSphere 插件 及其 vCenter Single Sign-On 凭据进行身份验证。请参见以 vCenter
Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。

n 或者,集群管理员可以 kubernetes-admin 用户身份连接到 Tanzu Kubernetes 集群。如果


vCenter Single Sign-On 身份验证不可用,则此方法可能适用。请参见以管理员用户身份连接到
Tanzu Kubernetes 集群控制平面。

n 集群用户或开发人员连接到 Tanzu Kubernetes 集群,以部署工作负载,包括 Pod、服务、负载均衡


器和其他资源。

n 集群管理员通过将用户或组绑定到默认或自定义 Pod 安全策略,向开发人员授予集群访问权限。


有关详细信息,请参见向开发人员授予 Tanzu Kubernetes 集群访问权限。

n 绑定开发人员使用 kubectl 的 vSphere 插件 及其 vCenter Single Sign-On 凭据对 Tanzu


Kubernetes 集群进行身份验证。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu
Kubernetes 集群。

n 要进行故障排除,系统管理员可以使用 SSH 和私钥以 vmware-system-user 用户身份连接到 Tanzu


Kubernetes 集群。请参见以系统用户身份使用私钥通过 SSH 连接到 Tanzu Kubernetes 集群节点。

VMware, Inc. 41
启用工作负载管理的必备条件
3
在为 vSphere 集群启用工作负载管理并将其转换为 主管集群 之前,您的环境必须满足特定的必备条件。

本章讨论了以下主题:

n 设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑

n 设置具有 NSX-T Data Center 的 主管集群 的系统要求和拓扑

n 为使用 vSphere 网络堆栈的 主管集群 创建 vSphere Distributed Switch

n 为 vSphere with Tanzu 创建存储策略

n 创建已订阅内容库

n 为 vSphere with Tanzu 安装并配置 NSX-T Data Center

设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑


配置为具有 vSphere 网络堆栈的 主管集群 的 vSphere 集群必须满足特定系统要求。此外,还可以根据
Kubernetes 工作负载和底层网络基础架构的需求,应用不同的拓扑。

工作负载网络
要配置具有 vSphere 网络堆栈的 主管集群,必须将集群中的所有主机都连接到 vSphere Distributed
Switch。根据为 主管集群 实施的拓扑,您将创建一个或多个分布式端口组。可以将端口组指定为 主管命
名空间 的工作负载网络。

工作负载网络可提供与 Tanzu Kubernetes 集群节点和 Kubernetes 控制平面虚拟机的连接。提供与


Kubernetes 控制平面虚拟机的连接的工作负载网络称为“主工作负载网络”。每个 主管集群 都必须有一
个主工作负载网络。您必须将其中一个分布式端口组指定为 主管集群 的主工作负载网络。

主管集群 上的 Kubernetes 控制平面虚拟机使用分配给主工作负载网络的 IP 地址范围中的三个 IP 地址。


Tanzu Kubernetes 集群的每个节点都会被分配一个单独的 IP 地址,从配置了 Tanzu Kubernetes 集群运
行所在命名空间的工作负载网络的地址范围中进行分配。

VMware, Inc. 42
vSphere with Tanzu 配置和管理

IP 范围的分配
计划 主管集群 的网络拓扑时,请计划使用两种类型的 IP 范围:

n 为 HAProxy 分配虚拟 IP 的范围。为 HAProxy 的虚拟服务器配置的 IP 范围由负载均衡器设备预留。


例如,如果虚拟 IP 范围为 192.168.1.0/24,则该范围内的所有主机都不能用于除虚拟 IP 流量之外的
其他流量。

注 您不得在 HAProxy 虚拟 IP 范围内配置网关,因为到该网关的所有路由都将失败。

n 主管集群 和 Tanzu Kubernetes 集群节点的 IP 范围。主管集群 中的每个 Kubernetes 控制平面虚拟


机分配一个 IP 地址,总共三个 IP 地址。Tanzu Kubernetes 集群的每个节点也分配一个单独的 IP。
您必须为配置到命名空间的每个工作负载网络分配一个唯一的 IP 范围。

有关安装 HAProxy 的信息,请参见知识库文章 80735。

包含一个 /24 网络的示例配置:

n 网络:192.168.120.0/24

n HAProxy VIP:192.168.120.128/24

n HAProxy 工作负载接口的 1 个 IP 地址:192.168.120.5

根据前 128 个地址中可用的 IP,您可以为工作负载网络定义 IP 范围,例如:

n 192.168.120.31-192.168.120.40 用于主工作负载网络

n 192.168.120.51-192.168.120.60 用于其他工作负载网络

注 为工作负载网络定义的范围不得与 HAProxy VIP 范围重叠。

具有一个工作负载网络的拓扑
在此拓扑中,您可以为以下组件配置一个具有一个网络的 主管集群:

n Kubernetes 控制平面虚拟机

n Tanzu Kubernetes 集群的节点。

n 外部服务和 DevOps 用户连接的 HAProxy 虚拟 IP 范围。在此配置中,HAProxy 部署有两个虚拟网


卡,一个虚拟网卡连接到管理网络,另一个虚拟网卡连接到主工作负载网络。您必须计划在主工作负载
网络中的一个单独子网上分配虚拟 IP。

可以将一个端口组指定为 主管集群 的主工作负载网络,然后使用与 主管命名空间 的工作负载网络相同的


端口组。主管集群、Tanzu Kubernetes 集群、HAProxy、DevOps 用户和外部服务均连接到设置为主工
作负载网络的同一个分布式端口组。

VMware, Inc. 43
vSphere with Tanzu 配置和管理

图 3-1. 一个网络支持的 主管集群

管理界面
HAProxy DevOps 用户或外部服务

工作负载和
虚拟 IP 接口

管理网络 主管集群主
工作负载网络
主和工作负载
分布式端口组

Tanzu Tanzu
Kubernetes Kubernetes
集群 1 集群 2

主管集群
主管集群上的所有命名空间

DevOps 用户或外部应用程序的流量路径如下所示:

1 DevOps 用户或外部服务将流量发送到分布式端口组的工作负载网络子网上的虚拟 IP。

2 HAProxy 将虚拟 IP 流量负载平衡到 Tanzu Kubernetes 节点 IP 或控制平面虚拟机 IP。HAProxy 会


声明虚拟 IP 地址,以便它能够对来到该 IP 的流量进行负载平衡。

3 控制平面虚拟机或 Tanzu Kubernetes 集群节点将流量传送到在 Tanzu Kubernetes 集群内运行的目


标 pod。

具有隔离工作负载网络的拓扑
在此拓扑中,可以将网络配置为以下组件:

n Kubernetes 控制平面虚拟机。用于处理 Kubernetes 控制平面虚拟机的流量的主工作负载网络。

n Tanzu Kubernetes 集群节点。分配给主管集群 上的所有命名空间的工作负载网络。此网络连接


Tanzu Kubernetes 集群节点。

n HAProxy 虚拟 IP。在此配置中,HAProxy 虚拟机部署有两个虚拟网卡。可以将 HAProxy 虚拟机连


接到主工作负载网络或用于命名空间的工作负载网络。还可以将 HAProxy 连接到 vSphere 中已存在
且可路由到主工作负载网络和工作负载网络的虚拟机网络。

VMware, Inc. 44
vSphere with Tanzu 配置和管理

主管集群 连接到支持主工作负载网络的分布式端口组,Tanzu Kubernetes 集群连接到支持工作负载网络


的分布式端口组。这两个端口组必须可通过第 3 层进行路由。您可以通过 VLAN 实现第 2 层隔离。可以通
过 IP 防火墙和网关进行第 3 层流量筛选。

图 3-2. 具有隔离工作负载网络的 主管集群

管理界面
HAProxy DevOps 用户或外部服务

可路由的 L3 网络的架构

合并的 HAProxy 工作负载


和 DevPops 网络

主管集群主 Kubernetes 工作负载网络


工作负载网络
主管集群工作负载 Kubernetes 工作负载
管理网络
分布式端口组 分布式端口组

Tanzu Tanzu
Kubernetes Kubernetes
集群 1 集群 2

主管集群上的所有命名空间

主管集群

DevOps 用户或外部服务的流量路径如下所示:

1 DevOps 用户或外部服务将流量发送到虚拟 IP。流量路由到连接 HAProxy 的网络。

2 HAProxy 将虚拟 IP 流量负载平衡到 Tanzu Kubernetes 节点 IP 或控制平面虚拟机。HAProxy 会声


明虚拟 IP 地址,以便它能够对来到该 IP 的流量进行负载平衡。

3 控制平面虚拟机或 Tanzu Kubernetes 集群节点将流量传送到在 Tanzu Kubernetes 集群内运行的目


标 pod。

具有多个隔离工作负载网络的拓扑
在此拓扑中,您可以将一个端口组配置为充当主工作负载网络,并将一个专用端口组配置为充当每个命名
空间的工作负载网络。HAPoxy 部署有两个虚拟网卡,您可以将其连接到主工作负载网络或任一工作负载
网络。还可以使用可路由到主工作负载网络和工作负载网络的现有虚拟机网络。

在此拓扑中,DevOps 用户和外部服务的流量路径与隔离工作负载网络拓扑相同。

VMware, Inc. 45
vSphere with Tanzu 配置和管理

图 3-3. 多个隔离工作负载网络支持的 主管集群


管理界面
HAProxy DevOps 虚拟机

工作负载和
虚拟 IP 接口

可路由的 L3 网络的架构

合并的 HAProxy 工作负载


和 DevOps 网络

主管集群主 AcmeCorp 工作负载网络 AjiraAir 工作负载网络


工作负载网络
主管集群工作负载 AcmeCorp 工作负载 AjiraAir 工作负载
管理网络
分布式端口组 分布式端口组 分布式端口组

AcmeCorp Tanzu AcmeCorp Tanzu AjiraAir Tanzu AjiraAir Tanzu


Kubernetes Kubernetes Kubernetes Kubernetes
集群 1 集群 2 集群 1 集群 2

AcmeCorp 命名空间 AjiraAir 命名空间

主管集群

具有三个虚拟网卡的 HAProxy 配置
在此配置中,您可以部署具有三个虚拟网卡的 HAProxy 虚拟机,从而将 HAProxy 连接到前端网络。
DevOps 用户和外部服务可以通过前端网络中的虚拟 IP 访问 HAProxy。

图 3-4. 部署有三个虚拟网卡的 HAProxy


DevOps 用户
前端/ 主管集群的 或外部服务
虚拟 IP 负载均衡器
管理界面 接口 的 IP 地址范围
HAProxy

工作负载接口

可路由网络的架构

整体 VIP 范围 HAProxy DevOPs 网络

HAProxy 工作负载网络
管理网络 AcmeCorp AjiraAir
工作负载网络 工作负载网络
主管集群主
工作负载网络
AcmeCorp 工作负载 AjiraAir 工作负载
分布式端口组 分布式端口组
主管集群工作负载
分布式端口组

AcmeCorp AjiraAir
Tanzu Tanzu
Kubernetes Kubernetes
集群 1 AcmeCorp 集群 1 AjiraAir
主管集群 Tanzu Tanzu
控制 Kubernetes Kubernetes
平面虚拟机 集群 2 集群 2

AcmeCorp 命名空间 AjiraAir 命名空间

VMware, Inc. 46
vSphere with Tanzu 配置和管理

在可能的拓扑之间进行选择
在每个可能的拓扑之间进行选择之前,请先评估环境的需求:

1 主管集群 和 Tanzu Kubernetes 集群之间是否需要第 2 层隔离?

a 否:最简单的拓扑,其中一个工作负载网络为所有组件提供服务。

b 是:隔离的工作负载网络拓扑,其中具有单独的主工作负载网络和工作负载网络。

2 Tanzu Kubernetes 集群之间是否需要进一步的第 2 层隔离?

a 否:隔离的工作负载网络拓扑,其中具有单独的主工作负载网络和工作负载网络。

b 是:多个工作负载网络拓扑,其中每个命名空间有一个单独的工作负载网络,以及一个专用的主工
作负载网络。

3 是否要防止 DevOps 用户和外部服务直接路由到 Kubernetes 控制平面虚拟机和 Tanzu Kubernetes


集群节点?

a 否:两个网卡 HAProxy 配置。

b 是:三个网卡 HAProxy 配置。

最低计算和要求
表 3-1. 最低计算要求
系统 最小部署大小 CPU 内存 存储

vCenter Server 7.0 小型 2 16 GB 290 GB

ESXi 主机 7.0 3 个 ESXi 主机,每个主机 1 个静 8 每个主机 64 GB 不适用


态 IP。
4 个 ESXi 主机用于 vSAN,至少
2 个物理网卡。
必须将这些主机加入启用
vSphere DRS 和 HA 的集群。
vSphere DRS 必须处于全自动或
半自动模式。

注 请确保加入集群的主机的名称
使用小写字母。否则,为工作负载
管理启用集群可能会失败。

Kubernetes 控制平面虚 3 4 16 GB 16 GB
拟机

VMware, Inc. 47
vSphere with Tanzu 配置和管理

表 3-2. 最低网络连接要求
组件 最小数量 所需的配置

用于 Kubernetes 控制平面虚拟机的静态 包含 5 个地址的块 要分配给 主管集群 中的 Kubernetes 控制平面虚拟机的 5


IP 个连续静态 IP 地址的块。

管理流量网络 1 可路由到 ESXi 主机、vCenter Server、主管集群 和负载


均衡器的管理网络。网络必须能够访问映像注册表并具有
Internet 连接(如果映像注册表位于外部网络)。映像注册
表必须可通过 DNS 解析。

vSphere Distributed Switch 1 集群中的所有主机都必须连接到 vSphere Distributed


Switch。

HAProxy 负载均衡器 1 配置有 vCenter Server 实例的 HAProxy 负载均衡器实


例。
n 如果同一 HAProxy 实例为多个 主管集群 提供服务,
则它必须能够跨所有 主管集群 与所有工作负载网络之
间路由流量。在 HAProxy 服务的所有 主管集群 中,
整个工作负载网络的 IP 范围都不能重叠。
n 为虚拟 IP 提供一个专用 IP 范围。HAProxy 虚拟机必
须是该虚拟 IP 范围的唯一所有者。该范围不得与分配
给任何 主管集群 拥有的任何工作负载网络的任何 IP 范
围重叠。
n HAProxy 用于分配虚拟 IP 的网络必须能够路由到
HAProxy 连接的所有 主管集群 之间的工作负载网络。

工作负载网络 1 必须在您配置为主工作负载网络的 vSphere Distributed


Switch 上创建至少一个分布式端口组。根据选择的拓扑,
您可以与命名空间的工作负载网络使用相同的分布式端口
组,也可以创建更多端口组并将其配置为工作负载网络。工
作负载网络必须满足以下要求:
n 用于 Tanzu Kubernetes 集群流量的工作负载网络必
须可在彼此以及 主管集群 主工作负载网络之间进行路
由。
n 可在任何工作负载网络和 HAProxy 用于虚拟 IP 分配
的网络之间进行路由。
n 主管集群 内所有工作负载网络中的 IP 地址范围不得重
叠。

NTP 和 DNS 服务器 1 可与 vCenter Server 结合使用的 DNS 服务器和 NTP 服


务器。

注 在所有 ESXi 主机和 vCenter Server 上配置 NTP。

管理网络子网 1 用于 ESXi 主机与 vCenter Server 及 Kubernetes 控制平


面之间的管理流量的子网。子网的大小必须如下所示:
n 每个主机 VMkernel 适配器一个 IP 地址。
n 1 个 IP 地址用于 vCenter Server Appliance。
n 用于 Kubernetes 控制平面的 5 个 IP 地址。3 个节点
中每个节点 1 个 IP 地址,1 个表示虚拟 IP,1 个用于滚
动集群升级。

管理网络 VLAN 1 管理网络子网的 VLAN ID。

VMware, Inc. 48
vSphere with Tanzu 配置和管理

表 3-2. 最低网络连接要求 (续)


组件 最小数量 所需的配置

物理网络 MTU 1600 在任何网络上传输覆盖流量的 MTU 大小必须为 1600 或更


高。

Kubernetes 服务 CIDR 范围 /16 个专用 IP 地址 专用 CIDR 范围,用于将 IP 地址分配给 Kubernetes 服


务。您必须为每个 主管集群 指定唯一的 Kubernetes 服务
CIDR 范围。

设置具有 NSX-T Data Center 的 主管集群 的系统要求和拓扑


配置为具有 NSX-T Data Center 网络连接堆栈的 主管集群 的 vSphere 集群必须满足特定的系统要求。
此外,还可以根据 Kubernetes 工作负载和底层网络基础架构的需求,应用不同的拓扑。

vSphere with Tanzu 集群的配置限制


VMware 在 VMware 最高配置工具中提供了配置限制。

有关特定于 vSphere with Tanzu(包括 主管集群 和 Tanzu Kubernetes 集群)的配置限制,请选择


vSphere > vSphere 7.0 > vSphere with Kubernetes > VMware Tanzu Kubernetes Grid Service
for vSphere,然后单击查看限制,或者按照此链接执行操作。

管理、Edge 和工作负载域集群的拓扑
您可以在单个 vSphere 集群上部署具有管理、Edge 和工作负载管理功能的 vSphere with Tanzu。

VMware, Inc. 49
vSphere with Tanzu 配置和管理

图 3-5. 管理、Edge 和工作负载管理集群

外部网络

vSphere
Distributed 输出 输入
Switch

vCenter
Server NSX NSX NSX
Edge Edge
Edge
NSX 节点 节点
集群
Manager VM1 VM2

Kubernetes Kubernetes Kubernetes


控制 控制 控制
层面 VM 1 层面 VM 2 层面 VM 2

命名空间 1 控制层面节点

vSphere Pod 1
Pod 1
工作节点 1
vSphere
Pod 2 Pod 2
工作节点 2
命名空间 2 -
Tanzu Kubernetes 集群

ESXi ESXi ESXi

管理、Edge 和工作负载
管理集群
(Supervisor 集群)

VMware, Inc. 50
vSphere with Tanzu 配置和管理

表 3-3. 管理、Edge 和工作负载管理集群的最低计算要求


系统 最小部署大小 CPU 内存 存储

vCenter Server 7.0 小型 2 16 GB 290 GB

ESXi 主机 7.0 3 个 ESXi 主机,每个 8 每个主机 64 GB 不适用


主机 1 个静态 IP。
4 个 ESXi 主机用于
vSAN,至少 2 个物理
网卡。
必须将这些主机加入启
用 vSphere DRS 和
HA 的集群。vSphere
DRS 必须处于全自动或
半自动模式。

注 请确保加入集群的
主机的名称使用小写字
母。否则,为工作负载
管理启用集群可能会失
败。

NSX Manager 中等 6 24 GB 300 GB

NSX Edge 1 大型 8 32 GB 200 GB

NSX Edge 2 大型 8 32 GB 200 GB

Kubernetes 控制平面虚 3 4 16 GB 16 GB
拟机

具有单独的管理和 Edge 集群及工作负载管理集群的拓扑


可以将 vSphere with Tanzu 部署在两个集群中,一个集群用于管理和 Edge 功能,另一个专用于工作负
载管理。

VMware, Inc. 51
vSphere with Tanzu 配置和管理

图 3-6. 管理和 Edge 及工作负载管理集群

外部网络

输出 输入 vSphere Distributed Switch

Kubernetes Kubernetes Kubernetes


控制 控制 控制
层面 VM 1 层面 VM 2 层面 VM 2
vCenter
Server NSX NSX NSX
Edge Edge 命名空间 1 控制层面节点
Edge
NSX 节点 节点
集群 vSphere Pod 1
Manager VM1 VM2
Pod 1 工作节点 1
vSphere
Pod 2 Pod 2
工作节点 2
命名空间 2 -
Tanzu Kubernetes 集群
ESXi ESXi ESXi ESXi ESXi ESXi

工作负载管理集群
管理和 Edge 集群 (Supervisor 集群)

表 3-4. 管理和 Edge 集群的最低计算要求


系统 最小部署大小 CPU 内存 存储

vCenter Server 7.0 小型 2 16 GB 290 GB

ESXi 主机 7.0 2 个 ESXi 主机 8 每个主机 64 GB 不适用

NSX Manager 中等 6 24 GB 300 GB

NSX Edge 1 大型 8 32 GB 200 GB

NSX Edge 2 大型 8 32 GB 200 GB

VMware, Inc. 52
vSphere with Tanzu 配置和管理

表 3-5. 工作负载管理集群的最低计算要求
系统 最小部署大小 CPU 内存 存储

ESXi 主机 7.0 3 个 ESXi 主机,每个 8 每个主机 64 GB 不适用


主机 1 个静态 IP。
4 个 ESXi 主机用于
vSAN,至少 2 个物理
网卡
必须将这些主机加入启
用 vSphere DRS 和
HA 的集群。vSphere
DRS 必须处于全自动模
式。

注 请确保加入集群的
主机的名称使用小写字
母。否则,为工作负载
管理启用集群可能会失
败。

Kubernetes 控制平面虚 3 4 16 GB 16 GB
拟机

网络要求
无论您在 vSphere 中为 Kubernetes 工作负载管理实施的拓扑如何,您的部署都必须满足以下网络连接要
求:

组件 最小数量 所需的配置

用于 Kubernetes 控制平面虚拟机的静态 包含 5 个地址的块 要分配给 主管集群 中的 Kubernetes 控制平面虚拟机的 5


IP 个连续静态 IP 地址的块。

管理流量网络 1 可路由到 ESXi 主机、vCenter Server 和 DHCP 服务器的


管理网络。网络必须能够访问容器注册表并具有 Internet
连接(如果容器注册表位于外部网络上)。容器注册表必须
可通过 DNS 解析,并且下面描述的输出设置必须能够访问
该容器注册表。

NTP 和 DNS 服务器 1 可用于 vCenter Server 的 DNS 服务器和 NTP 服务器。

注 在所有 ESXi 主机、vCenter Server 系统和 NSX


Manager 实例上配置 NTP。

映像注册表 访问服务注册表。

VMware, Inc. 53
vSphere with Tanzu 配置和管理

组件 最小数量 所需的配置

管理网络子网 1 用于 ESXi 主机与 vCenter Server、NSX 设备和


Kubernetes 控制平面之间的管理流量的子网。子网的大小
必须如下所示:
n 每个主机 VMkernel 适配器一个 IP 地址。
n 1 个 IP 地址用于 vCenter Server Appliance。
n 用于 NSX Manager 的 1 个或 4 个 IP 地址。执行 3 个
节点和 1 个虚拟 IP (VIP) 的 NSX Manager 集群时使用
的 4 个 IP 地址。
n 用于 Kubernetes 控制平面的 5 个 IP 地址。3 个节点
中每个节点 1 个 IP 地址,1 个表示虚拟 IP,1 个用于滚
动集群升级。

管理网络 VLAN 1 管理网络子网的 VLAN ID。

VLAN 3 这些 VLAN IP 是隧道端点 (TEP) 的 IP 地址。ESXi 主机


TEP 和 Edge TEP 必须可路由。
以下对象需要 VLAN IP 地址:
n ESXi 主机 VTEP
n 使用静态 IP 的 Edge VTEP
n 传输节点的第 0 层网关和上行链路。

注 ESXi 主机 VTEP 和 Edge VTEP 的 MTU 大小必须大


于 1600。

ESXi 主机和 NSX-T Edge 节点充当隧道端点,并会向每个


主机和 Edge 节点分配隧道端点 (TEP) IP。
由于 ESXi 主机的 TEP IP 会在 Edge 节点上创建具有 TEP
IP 的覆盖通道,因此 VLAN IP 应当可路由。
需要使用额外的 VLAN 来提供与第 0 层网关的南北向连
接。
可以在集群之间共享 IP 池。但是,主机覆盖网络 IP 池/
VLAN 不得与 Edge 覆盖网络 IP 池/VLAN 共享。

注 如果主机 TEP 和 Edge TEP 使用不同的物理网卡,则


使用相同的 VLAN。

第 0 层上行链路 IP /24 个专用 IP 地址 用于第 0 层上行链路的 IP 子网。第 0 层上行链路的 IP 地


址要求如下所示:
n 1 个 IP:如果不使用 Edge 冗余。
n 4 个 IP:如果使用 BGP 和 Edge 冗余,则每个 Edge
2 个 IP 地址。
n 3 个 IP:如果使用静态路由和 Edge 冗余。
Edge 管理 IP、子网、网关、上行链路 IP、子网和网关必
须唯一。

物理网络 MTU 1600 在任何网络上传输覆盖流量的 MTU 大小必须为 1600 或更


高。

VMware, Inc. 54
vSphere with Tanzu 配置和管理

组件 最小数量 所需的配置

vSphere Pod CIDR 范围 /24 个专用 IP 地址 提供 vSphere Pod 的 IP 地址的专用 CIDR 范围。这些地
址还用于 Tanzu Kubernetes 集群节点。
必须为每个集群指定唯一的 vSphere Pod CIDR 范围。

注 Kubernetes 服务地址的 vSphere Pod CIDR 范围和


CIDR 范围不能重叠。

Kubernetes 服务 CIDR 范围 /16 个专用 IP 地址 专用 CIDR 范围,用于将 IP 地址分配给 Kubernetes 服


务。您必须为每个 主管集群 指定唯一的 Kubernetes 服务
CIDR 范围。

输出 CIDR 范围 /27 个静态 IP 地址 专用 CIDR 注释,用以确定 Kubernetes 服务的输出 IP。


仅为 主管集群 中的每个命名空间分配一个输出 IP 地址。输
出 IP 是外部实体用于与命名空间中的服务进行通信的地
址。输出 IP 地址的数量限制了 主管集群 可以拥有的输出策
略数。
最小值为 CIDR /27 或更大。例如,10.174.4.96/27

注 输出 IP 地址和输入 IP 地址不得重叠。

输入 CIDR /27 个静态 IP 地址 要用于输入 IP 地址的专用 CIDR 范围。输入让您能够将流


量策略应用到从外部网络进入 主管集群 的请求。输入 IP 地
址的数量限制了集群可以拥有的输入数量。
最小值为 CIDR /27 或更大。

注 输出 IP 地址和输入 IP 地址不得重叠。

为使用 vSphere 网络堆栈的 主管集群 创建 vSphere Distributed


Switch
要将 vSphere 集群配置为使用 vSphere 网络堆栈的 主管集群,必须将主机添加到 vSphere Distributed
Switch。您必须在将作为工作负载网络配置到 主管集群 的 Distributed Switch 上创建端口组。

您可以为 主管集群 选择不同的拓扑,具体取决于要提供给将在集群上运行的 Kubernetes 工作负载的隔离


级别。请参见设置具有 vSphere 网络连接的 主管集群 的系统要求和拓扑。

步骤

1 在 vSphere Client 中,导航到数据中心。

2 右键单击该数据中心,然后选择 Distributed Switch > 新建 Distributed Switch。

3 输入交换机的名称,例如工作负载 Distributed Switch,然后单击下一步。

4 为交换机选择版本 7.0,然后单击下一步。

5 在端口组名称中,输入主工作负载网络,单击下一步,然后单击完成。

此时将在数据中心上创建一个具有一个端口组的新 Distributed Switch。您可以使用此端口组作为将


要创建的 主管集群 的主工作负载网络。主工作负载网络处理 Kubernetes 控制平面虚拟机的流量。

VMware, Inc. 55
vSphere with Tanzu 配置和管理

6 为工作负载网络创建分布式端口组。

您创建的端口组数取决于要为 主管集群 实施的拓扑。对于具有一个隔离工作负载网络的拓扑,请创建


一个分布式端口组,将其用作 主管集群 上所有命名空间的网络。对于每个命名空间都具有隔离网络的
拓扑,请创建与将要创建的命名空间数相同的端口组数。
a 导航到新创建的 Distributed Switch。

b 右键单击该交换机,然后选择分布式端口组 > 新建分布式端口组。

c 输入端口组的名称,例如工作负载网络,然后单击下一步。

d 保留默认值,单击下一步,然后单击完成。

7 将要配置为 主管集群 的 vSphere 集群中的主机添加到 Distributed Switch。

a 右键单击分布式交换机,然后选择添加和管理主机。

b 选择添加主机。

c 单击新主机,从要配置为 主管集群 的 vSphere 集群中选择主机,然后单击下一步。

d 从每个主机中选择一个物理网卡,并为其分配 Distributed Switch 上的上行链路。

e 在向导的其余屏幕上单击下一步,然后单击完成。

结果

这些主机将添加到 Distributed Switch。现在,您可以将在交换机上创建的端口组用作 主管集群 的工作负


载网络。

为 vSphere with Tanzu 创建存储策略


在启用 vSphere with Tanzu 之前,需要创建要在主管集群和命名空间中使用的存储策略。这些策略表示
vSphere 环境中可用的数据存储。它们可以控制诸如控制层面虚拟机、pod 临时磁盘、容器映像和持久存
储卷等对象的存储放置。如果使用 VMware Tanzu™ Kubernetes Grid™ 服务,则存储策略还会规定
Tanzu Kubernetes 集群节点的部署方式。

根据您的 vSphere 存储环境和 DevOps 的需求,可以创建多个存储策略来表示不同的存储类。例如,如


果您的 vSphere 存储环境包含三类数据存储(Bronze、Silver 和 Gold),则可以为所有数据存储创建存
储策略。然后,可以对临时和容器映像虚拟磁盘使用 Bronze 数据存储,对持久卷虚拟磁盘使用 Silver 和
Gold 数据存储。有关存储策略的详细信息,请参见《vSphere 存储》文档中的“基于存储策略的管理”
一章。

以下示例将为标记为 Gold 的数据存储创建存储策略。

前提条件

n 确保您在存储策略中引用的数据存储将在集群中的所有 ESXi 主机之间共享。

n 所需特权:虚拟机存储策略.更新和虚拟机存储策略.查看。

VMware, Inc. 56
vSphere with Tanzu 配置和管理

步骤

1 将标记添加到数据存储。

a 右键单击要标记的数据存储,然后选择标记和自定义属性 > 分配标记。

b 单击添加标记,然后指定标记的属性。

属性 描述

名称 指定数据存储标记的名称,例如 Gold。

描述 添加标记的描述。例如,Datastore for Kubernetes objects。

类别 选择现有类别或创建新类别。例如,Storage for Kubernetes。

2 在 vSphere Client 中,打开创建虚拟机存储策略向导。

a 单击菜单 > 策略和配置文件。

b 在策略和配置文件下,单击虚拟机存储策略。

c 单击创建虚拟机存储策略。

3 输入策略名称和描述。

选项 操作

vCenter Server 选择 vCenter Server 实例。

名称 输入存储策略的名称,例如 Gold Storage Policy。

描述 输入存储策略的描述。

4 在策略结构页面的数据存储特定规则下,启用基于标记的放置规则。

5 在基于标记放置页面上,创建标记规则。

使用以下示例选择选项。

选项 描述

标记类别 从下拉菜单中选择标记的类别,例如 Storage for Kubernetes。

使用情况选项 选择使用具有以下标记的存储。

标记 单击浏览标记,然后选择数据存储标记,例如 Gold。

6 在存储兼容性页面上,检查与此策略匹配的数据存储列表。

在此示例中,仅显示标记为 Gold 的数据存储。

7 在查看并完成页面上,查看存储策略设置,然后单击完成。

结果

标记为 Gold 的数据存储的新存储策略将显示在现有存储策略列表中。

VMware, Inc. 57
vSphere with Tanzu 配置和管理

后续步骤

创建存储策略后,vSphere 管理员可以执行以下任务:

n 将存储策略分配给主管集群。在主管集群上配置的存储策略可确保将控制层面虚拟机、pod 临时磁盘
和容器映像放置在策略表示的数据存储上。请参见将具有 NSX-T Data Center 的工作负载平台配置为
网络堆栈。

n 将存储策略分配给主管命名空间。命名空间可见的存储策略确定了命名空间可以访问和用于持久卷的数
据存储。存储策略在命名空间中显示为匹配的 Kubernetes 存储类。它们还会传播到此命名空间上的
Tanzu Kubernetes 集群。DevOps 工程师可以在其持久卷声明规范中使用这些存储类。请参见创建
和配置 vSphere 命名空间。

创建已订阅内容库
要置备 Tanzu Kubernetes 集群,必须在启用了工作负载管理的 vCenter Server 上创建内容库。将从内
容库中提取用于创建 Tanzu Kubernetes 集群节点的虚拟机映像。此库包含 Kubernetes 和随附 Photon
操作系统的最新发行版。

部署 主管集群 后,将内容库与将部署 Tanzu Kubernetes 集群的每个 主管集群 相关联。请参见为 Tanzu


Kubernetes 集群创建已订阅内容库。

随着时间的推移,将发布新的 Kubernetes 版本和映像,因此内容库的大小将随之增加。如果底层存储空


间不足,您将需要迁移到新的内容库。请参见将 Tanzu Kubernetes 集群迁移到新内容库。。

此任务介绍了如何创建需要 Internet 连接的已订阅内容库。对于 Tanzu Kubernetes 集群的气隙式部署,


您可以创建一个本地内容库。请参见在气隙环境中置备 Tanzu Kubernetes 集群。

前提条件

创建已订阅内容库需要以下特权:

n 对要创建库的 vCenter Server 实例拥有内容库.创建本地库或内容库.创建已订阅库特权。

n 数据存储.分配空间- 在目标数据存储上。

步骤

1 使用 vSphere Client 登录到 vCenter Server。

2 选择菜单 > 内容库。

3 单击创建新内容库图标。

此时将打开新建内容库向导。

4 在名称和位置页面上输入标识信息。

a 输入内容库的名称。

b 对于 vCenter Server,选择将配置 主管集群 的 vCenter Server 实例。

c 单击下一步。

VMware, Inc. 58
vSphere with Tanzu 配置和管理

5 在配置内容库页面上提供内容库配置详细信息。

a 选择菜单项已订阅内容库。

b 在订阅 URL 文本框中,输入已发布库的 URL 地址:https://wp-content.vmware.com/v2/latest/


lib.json

c 对于下载内容选项,请选择以下选项之一:

选项 描述

立即下载所有库内容 订阅过程会同时同步库元数据和映像。如果从已发布库中删除项目,这些项目的
内容仍保留在已订阅库存储中,您必须手动删除。

在需要时下载库内容 订阅过程仅同步库元数据。Tanzu Kubernetes Grid 服务会在映像发布时下载


映像。当您不再需要该项目后,可以删除项目内容来释放存储空间。

注 一般建议使用按需选项。有关详细信息,请参见管理已订阅库。

d 单击下一步。

6 出现提示时,接受 SSL 证书指纹。

在从清单中删除已订阅内容库之前,SSL 证书指纹存储在系统中。

7 在添加存储页面上,选择数据存储作为内容库内容的存储位置,然后单击下一步。

8 在即将完成页面上,检查详细信息并单击完成。

9 在内容库页面上:

选项 描述

发布时 如果您选择立即下载所有内容,请确认库已同步。

按需 通过选择操作 > 同步立即同步内容库。

后续步骤

部署 主管集群 后,将内容库与 主管集群 相关联。请参见关联内容库与 主管命名空间。

为 vSphere with Tanzu 安装并配置 NSX-T Data Center


vSphere with Tanzu 需要特定的网络连接配置,以便能够连接到 主管集群、主管命名空间 以及在命名空
间中运行的所有对象,例如 vSphere Pod 和 Tanzu Kubernetes 集群。作为 vSphere 管理员,请为
vSphere with Tanzu 安装并配置 NSX-T Data Center。

主管集群 使用固有的网络配置。对于会导致部署相同网络模型的 主管集群 网络连接,有两种方法可以配


置:

n 配置 主管集群 网络的最简单方法是使用 VMware Cloud Foundation SDDC Manager。有关详细信


息,请参见 VMware Cloud Foundation SDDC Manager 文档。有关详细信息,请参见使用工作负载
管理。

VMware, Inc. 59
vSphere with Tanzu 配置和管理

n 您还可以使用现有 NSX-T Data Center 部署或部署 NSX-T Data Center 的新实例来手动配置 主管集
群 网络。

本节介绍了如何通过部署新的 NSX-T Data Center 实例来配置 主管集群 网络连接,但这些过程也适用于


现有的 NSX-T Data Center 部署。本节还提供了相关背景,有助于理解 VMware Cloud Foundation
SDDC Manager 在设置 主管集群 工作负载域时的工作方式。

前提条件

n 确认您的环境满足将 vSphere 集群配置为 主管集群 的系统要求。有关要求的信息,请参见设置具有


NSX-T Data Center 的 主管集群 的系统要求和拓扑。

n 为将属于 主管集群 的所有 ESXi 主机分配 VMware vSphere 7 Enterprise Plus with Add-on for
Kubernetes 许可证。

n 创建用于放置控制平面虚拟机、Pod 临时磁盘和容器映像的存储策略。

n 配置集群的共享存储。vSphere DRS、HA 和存储容器的持久卷需要共享存储。

n 验证是否已在 vSphere 集群上启用 DRS 和 HA,并且 DRS 是否处于全自动模式。

n 验证您对集群是否具有修改集群范围的配置特权。

步骤

1 创建 vSphere Distributed Switch


要处理 主管集群 中所有主机的网络连接配置,请创建一个 vSphere Distributed Switch。

2 创建分布式端口组
为每个 NSX Edge 节点上行链路、Edge 节点 TEP、管理网络和共享存储创建分布式端口组。

3 将主机添加到 vSphere Distributed Switch


要使用 vSphere Distributed Switch 管理环境的网络连接,必须将主机与交换机相关联。将主机的
物理网卡、VMkernel 适配器和虚拟机网络适配器连接到 Distributed Switch。

4 部署和配置 NSX Manager


可以使用 vSphere Client 将 NSX Manager 部署到 vSphere 集群并将其与 vSphere with Tanzu 配
合使用。

5 部署 NSX Manager 节点以形成集群


NSX Manager 集群提供高可用性。您只能在 vCenter Server 管理的 ESXi 主机上使用用户界面部署
NSX Manager 节点。要创建 NSX Manager 集群,请再部署两个节点以形成一个三节点集群。从 UI
部署新节点时,该节点将连接到部署的第一个节点以形成集群。部署的第一个节点的所有存储库详细
信息和密码都将与新部署的节点进行同步。

6 添加许可证
使用 NSX Manager 添加许可证。

7 添加计算管理器
计算管理器是管理主机和虚拟机等资源的应用程序。将与 NSX-T Data Center 关联的 vCenter
Server 配置为 NSX Manager 中的计算管理器。

VMware, Inc. 60
vSphere with Tanzu 配置和管理

8 创建传输区域
传输区域指示哪些主机和虚拟机可以使用特定网络。传输区域可以跨一个或多个主机集群。

9 为主机隧道端点 IP 地址创建 IP 池
为 ESXi 主机隧道端点 (TEP) 和 Edge 节点创建 IP 池。TEP 是在外部 IP 标头中使用的源和目标 IP
地址,用于标识发起和结束覆盖网络帧 NSX-T 封装的 ESXi 主机。您可以对 TEP IP 地址使用 DHCP
或手动配置 IP 池。

10 创建主机上行链路配置文件
主机上行链路配置文件用于定义从 ESXi 主机到 NSX-T Data Center 分段的上行链路策略。

11 创建 Edge 上行链路配置文件
创建一个包含故障切换顺序绑定策略的上行链路配置文件,为每个 Edge 虚拟机覆盖网络流量设置一
个活动上行链路。

12 创建传输节点配置文件
传输节点配置文件用于定义在配置文件连接到的特定集群的主机上安装和配置 NSX-T Data Center
的方式。

13 在集群上配置 NSX-T Data Center


要安装 NSX-T Data Center 并准备覆盖网络 TEP,请将传输节点配置文件应用于 vSphere 集群。

14 配置和部署 NSX Edge 传输节点


您可以将 NSX Edge 虚拟机 (VM) 添加到 NSX-T Data Center 架构,并继续将其配置为 NSX Edge
传输节点虚拟机。

15 创建 NSX Edge 集群
要确保至少有一个 NSX Edge 始终可用,请创建一个 NSX Edge 集群。

16 创建第 0 层上行链路分段
第 0 层上行链路分段提供从 NSX-T Data Center 到物理基础架构的南北向连接。

17 创建第 0 层网关
第 0 层网关是 NSX-T Data Center 逻辑路由器,为 NSX-T Data Center 逻辑网络提供到物理基础
架构的南北向连接。vSphere with Tanzu 在同一个传输区域中的多个 NSX Edge 集群上支持多个第
0 层网关。

创建 vSphere Distributed Switch


要处理 主管集群 中所有主机的网络连接配置,请创建一个 vSphere Distributed Switch。

步骤

1 在 vSphere Client 中,导航到数据中心。

2 在导航器中,右键单击数据中心,并选择 Distributed Switch > 新建 Distributed Switch。

3 输入新 Distributed Switch 的名称。

例如,DSwitch。

VMware, Inc. 61
vSphere with Tanzu 配置和管理

4 在选择版本中,输入 Distributed Switch 的版本。

选择 7.0.0 - ESXi 7.0 及更高版本。

5 在配置设置中,输入上行链路端口数。

输入值 2。

6 查看设置,然后单击完成。

7 右键单击已创建的 Distributed Switch,然后选择设置 > 编辑设置。

8 在高级选项卡上,输入大于 1600 的值作为“MTU (字节)”值,然后单击确定。

例如,9000。

后续步骤

添加分布式端口组。请参见创建分布式端口组。

创建分布式端口组
为每个 NSX Edge 节点上行链路、Edge 节点 TEP、管理网络和共享存储创建分布式端口组。

前提条件

确认您已创建 vSphere Distributed Switch。

步骤

1 在 vSphere Client 中,导航到数据中心。

2 在导航器中,右键单击 Distributed Switch,然后选择分布式端口组 > 新建分布式端口组。

3 为 NSX Edge 上行链路创建端口组。

例如,DPortGroup-EDGE-UPLINK。

4 将 VLAN 类型配置为“VLAN 中继”。

5 在操作菜单中,选择分布式端口组 > 管理分布式端口组。

6 选择绑定和故障切换,然后单击下一步。

7 配置活动上行链路和备用上行链路。

例如,活动上行链路为 Uplink1,备用上行链路为 Uplink2。

8 对 Edge 节点 TEP、管理网络和共享存储重复步骤 7 至 11。

例如,创建以下端口组:

VMware, Inc. 62
vSphere with Tanzu 配置和管理

端口组 名称 VLAN 类型

Edge 节点 TEP DPortGroup-EDGE-TEP 将 VLAN 类型配置为“VLAN 中继”。


将活动上行链路配置为 Uplink2,将备用
上行链路配置为 Uplink1。

注 用于 Edge 节点 TEP 的 VLAN 必须


不同于用于 ESXi TEP 的 VLAN。

管理 DPortGroup-MGMT 将 VLAN 类型配置为 VLAN,然后输入


管理网络的 VLAN ID。例如,1060。

共享存储或 vSAN DPortGroup-VSAN 将 VLAN 类型配置为 VLAN,然后输入


VLAN ID。例如,3082。

9 (可选) 为以下组件创建端口组:

n vSphere vMotion

n 虚拟机流量

后续步骤

将主机添加到 vSphere Distributed Switch。请参见将主机添加到 vSphere Distributed Switch。

将主机添加到 vSphere Distributed Switch


要使用 vSphere Distributed Switch 管理环境的网络连接,必须将主机与交换机相关联。将主机的物理网
卡、VMkernel 适配器和虚拟机网络适配器连接到 Distributed Switch。

前提条件

n 验证 Distributed Switch 上有足够的可用上行链路,可以分配给要连接交换机的物理网卡。

n 验证 Distributed Switch 上是否至少有一个分布式端口组可用。

n 验证分布式端口组的绑定和故障切换策略中是否已配置活动上行链路。

步骤

1 在 vSphere Client 中,选择网络,然后导航到 Distributed Switch。

2 从操作菜单中,选择添加和管理主机。

3 在选择任务页面上,选择添加主机,然后单击下一步。

4 在选择主机页面上,单击新主机,选择数据中心内的主机,单击确定,然后单击下一步。

5 在管理物理适配器页面上,配置 Distributed Switch 上的物理网卡。

a 从其他交换机上/空闲列表中选择一个物理网卡。

如果选择已经连接其他交换机的物理网卡,这些物理网卡即迁移到当前的 Distributed Switch


上。

b 单击分配上行链路。

c 选择上行链路。

VMware, Inc. 63
vSphere with Tanzu 配置和管理

d 要将上行链路分配给集群中的所有主机,请选择将此上行链路分配应用于其余主机。

e 单击确定。
例如,将 Uplink 1 分配给 vmnic0,将 Uplink 2 分配给 vmnic1。

6 单击下一步。

7 在管理 VMkernel 适配器页面上,配置 VMkernel 适配器。

a 选择 VMkernel 适配器并单击分配端口组。

b 选择分布式端口组。

例如,DPortGroup。

c 要将端口组应用于集群中的所有主机,请选择将此端口组分配应用于其余主机。

d 单击确定。

8 单击下一步。

9 (可选) 在迁移虚拟机网络页面上,选中迁移虚拟机网络复选框以配置虚拟机网络连接。

a 要将某个虚拟机的所有网络适配器连接到分布式端口组,请选择该虚拟机,或者选择单个网络适配
器以仅连接该适配器。

b 单击分配端口组。

c 从列表中选择一个分布式端口组,然后单击确定。

d 单击下一步。

后续步骤

部署和配置 NSX Manager。请参见部署和配置 NSX Manager。

部署和配置 NSX Manager


可以使用 vSphere Client 将 NSX Manager 部署到 vSphere 集群并将其与 vSphere with Tanzu 配合使
用。

要使用 OVA 文件部署 NSX Manager,请执行以下过程中的各个步骤。

有关通过用户界面或 CLI 部署 NSX Manager 的信息,请参见《NSX-T Data Center 安装指南》。

前提条件

n 确认您的环境满足网络连接要求。有关详细信息,请参见 设置具有 NSX-T Data Center 的 主管集群


的系统要求和拓扑。

n 验证所需的端口是否已打开。有关端口和协议的信息,请参见《NSX-T Data Center 安装指南》。

步骤

1 在 VMware 下载门户上找到 NSX-T Data Center OVA 文件。

请复制下载 URL 或下载 OVA 文件。

VMware, Inc. 64
vSphere with Tanzu 配置和管理

2 右键单击并选择部署 OVF 模板以启动安装向导。

3 在选择 OVF 模板选项卡中,输入下载 OVA URL 或导航到 OVA 文件。

4 在选择名称和文件夹选项卡中,输入 NSX Manager 虚拟机 (VM) 的名称。

5 在选择计算资源选项卡中,选择要在其上部署 NSX Manager 的 vSphere 集群。

6 单击下一步以查看详细信息。

7 在配置选项卡中,选择 NSX-T 部署大小。

建议的最低部署大小为“中型”。

8 在选择存储选项卡中,为部署选择共享存储。

9 通过在选择虚拟磁盘格式中选择精简置备来启用精简置备。

默认情况下,虚拟磁盘为厚置备。

10 在选择网络选项卡中,在目标网络中为 NSX Manager 选择管理端口组或目标网络。

例如,DPortGroup-MGMT。

11 在自定义模板选项卡中,输入 NSX Manager 的系统 root、CLI 管理员和审核密码。您的密码必须符


合密码强度限制。

n 至少 12 个字符。

n 至少 1 个小写字母。

n 至少 1 个大写字母。

n 至少 1 个数字。

n 至少 1 个特殊字符。

n 至少 5 个不同的字符。

n 默认密码复杂性规则由 Linux PAM 模块强制执行。

12 输入默认 IPv4 网关、管理网络 IPv4、管理网络掩码、DNS 服务器、域搜索列表和 NTP IP 地址。

13 启用 SSH 并允许 root 通过 SSH 登录到 NSX Manager 命令行。

默认情况下,出于安全原因,将禁用 SSH 选项。

14 确认您的自定义 OVF 模板规范准确无误,然后单击完成以启动安装。

15 在 NSX Manager 引导后,以管理员身份登录到 CLI,然后运行 get interface eth0 命令以验证是


否按预期应用了 IP 地址。

16 输入 get services 命令以验证所有服务是否正在运行中。

部署 NSX Manager 节点以形成集群


NSX Manager 集群提供高可用性。您只能在 vCenter Server 管理的 ESXi 主机上使用用户界面部署 NSX
Manager 节点。要创建 NSX Manager 集群,请再部署两个节点以形成一个三节点集群。从 UI 部署新节

VMware, Inc. 65
vSphere with Tanzu 配置和管理

点时,该节点将连接到部署的第一个节点以形成集群。部署的第一个节点的所有存储库详细信息和密码都
将与新部署的节点进行同步。

前提条件

n 验证是否已安装 NSX Manager 节点。

n 验证是否已配置计算管理器。

n 验证所需的端口是否已打开。

n 验证是否已在 ESXi 主机上配置数据存储。

n 验证您是否有 IP 地址和网关、DNS 服务器 IP 地址、域搜索列表和 NTP 服务器 IP 地址供 NSX


Manager 使用。

n 验证您是否具有目标虚拟机端口组网络。将 NSX-T Data Center 设备置于管理虚拟机网络上。

步骤

1 从浏览器中,使用管理员特权登录到位于 https://<manager-ip-address> 处的 NSX Manager。

2 要部署设备,请选择系统 > 设备 > 添加 NSX 设备。

3 输入设备详细信息。

选项 描述

主机名 输入要用于节点的主机名或 FQDN。

管理 IP/网络掩码 输入要分配给节点的 IP 地址。

管理网关 输入节点要使用的网关 IP 地址。

DNS 服务器 输入节点要使用的 DNS 服务器 IP 地址列表。

NTP 服务器 输入 NTP 服务器 IP 地址列表。

节点大小 从选项中选择中型 (6 vCPU、24 GB RAM、300 GB 存储) 外形规格。

4 输入设备配置详细信息。

选项 描述

计算管理器 选择您配置为计算管理器的 vCenter Server。

计算集群 选择节点必须加入的集群。

数据存储 选择节点文件的数据存储。

虚拟磁盘格式 选择精简置备格式。

网络 单击选择网络可选择节点的管理网络。

VMware, Inc. 66
vSphere with Tanzu 配置和管理

5 输入访问和凭据详细信息。

选项 描述

启用 SSH 切换该按钮可允许通过 SSH 登录到新节点。

启用 Root 访问 切换该按钮可允许对新节点进行 root 访问。

系统 Root 凭据 设置并确认新节点的 root 密码。


您的密码必须符合密码强度限制。
n 至少 12 个字符。
n 至少 1 个小写字母。
n 至少 1 个大写字母。
n 至少 1 个数字。
n 至少 1 个特殊字符。
n 至少 5 个不同的字符。
n 默认密码复杂性规则由 Linux PAM 模块强制执行。

管理员 CLI 凭据和审核 CLI 凭据 选中与 root 密码相同复选框可使用您为 root 配置的相同密码,或者可以取消选中


该复选框并设置其他密码。

6 单击安装设备。

新节点已部署。您可以在系统 > > 设备页面中跟踪部署过程。在安装完成且集群稳定之前,不要添加


额外的节点。

7 请等待部署、集群形成和存储库同步完成。

加入和集群稳定过程可能需要 10 到 15 分钟的时间。在进行任何其他集群更改之前,确认每个集群服
务组的状态均为 UP。

8 在节点引导后,以管理员身份登录到 CLI,然后运行 get interface eth0 命令以验证是否按预期应


用了 IP 地址。

9 如果您的集群只有两个节点,请添加另一个设备。选择系统 > 设备 > 添加 NSX 设备,然后重复执行配


置步骤。

添加许可证
使用 NSX Manager 添加许可证。

前提条件

获取 NSX-T Data CenterAdvanced 或更高版本的许可证。

步骤

1 登录到 NSX Manager。

2 选择系统 > 许可证 > 添加。

3 输入许可证密钥。

4 单击添加。

VMware, Inc. 67
vSphere with Tanzu 配置和管理

添加计算管理器
计算管理器是管理主机和虚拟机等资源的应用程序。将与 NSX-T Data Center 关联的 vCenter Server 配
置为 NSX Manager 中的计算管理器。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 计算管理器 > 添加

3 输入计算管理器的详细信息。

选项 描述

名称和描述 输入 vCenter Server 的名称和描述。

FQDN 或 IP 地址 输入 vCenter Server 的 FQDN 或 IP 地址。

用户名和密码 输入 vCenter Server 登录凭据。

4 选择启用信任以允许 vCenter Server 与 NSX-T Data Center 通信。

5 如果未提供 NSX Manager 的指纹值,系统将标识并显示该指纹。

6 单击添加接受指纹。

结果

一段时间后,计算管理器将注册到 vCenter Server,并且连接状态更改为启动。如果 vCenter Server 的


FQDN/PNID 发生变化,您必须将其重新注册到 NSX Manager 中。有关详细信息,请参见将 vCenter
Server 注册到 NSX Manager。

注 成功注册 vCenter Server 后,在未先删除计算管理器的情况下,请不要关闭并删除 NSX Manager 虚


拟机。否则,在部署新的 NSX Manager 时,您将无法再次注册相同的 vCenter Server。您将收到错误,
指出 vCenter Server 已注册到另一个 NSX Manager。

您可以单击计算管理器名称以查看详细信息,编辑计算管理器,或管理应用于计算管理器的标记。

创建传输区域
传输区域指示哪些主机和虚拟机可以使用特定网络。传输区域可以跨一个或多个主机集群。

作为 vSphere 管理员,您可以使用默认传输区域或创建以下传输区域:

n 主管集群 控制平面虚拟机使用的覆盖网络传输区域。

n 用于物理网络上行链路的 NSX Edge 节点的 VLAN 传输区域。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 传输区域 > 添加。

3 输入传输区域的名称和可选描述。

VMware, Inc. 68
vSphere with Tanzu 配置和管理

4 选择流量类型。

您可以选择覆盖网络或 VLAN。
默认情况下存在以下传输区域:

n 名为 nsx-vlan-transportzone 的 VLAN 传输区域。

n 名为 nsx-overlay-transportzone 的覆盖网络传输区域。

5 (可选) 输入一个或多个上行链路绑定策略名称。

连接到传输区域的分段使用这些指定的绑定策略。如果分段未找到匹配的指定绑定策略,则使用默认上
行链路绑定策略。

结果

新的传输区域将显示在传输区域页面上。

为主机隧道端点 IP 地址创建 IP 池
为 ESXi 主机隧道端点 (TEP) 和 Edge 节点创建 IP 池。TEP 是在外部 IP 标头中使用的源和目标 IP 地址,
用于标识发起和结束覆盖网络帧 NSX-T 封装的 ESXi 主机。您可以对 TEP IP 地址使用 DHCP 或手动配置
IP 池。

步骤

1 登录到 NSX Manager。

2 选择网络 > IP 地址池 > 添加 IP 地址池。

3 输入以下 IP 池详细信息。

选项 描述

名称和描述 输入 IP 池名称和可选描述。
例如,ESXI-TEP-IP-POOL。

IP 范围 输入 IP 分配范围。
例如,10.197.79.158 - 10.197.79.160

网关 输入网关 IP 地址。
例如,10.197.79.253。

CIDR 以 CIDR 表示法输入网络地址。


例如,10.197.79.0/24。

4 单击添加和应用。

5 重复步骤 2 - 4,为 Edge 节点创建 IP 池。

例如,EDGE-TEP-IP-POOL。

6 确认您创建的 TEP IP 池列在 IP 池页面中。

VMware, Inc. 69
vSphere with Tanzu 配置和管理

创建主机上行链路配置文件
主机上行链路配置文件用于定义从 ESXi 主机到 NSX-T Data Center 分段的上行链路策略。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 配置文件 > 上行链路配置文件 > 添加。

3 输入上行链路配置文件名称和(可选)上行链路配置文件描述。

例如,ESXI-UPLINK-PROFILE。

4 在绑定部分中,单击添加以添加命名绑定策略,并配置故障切换顺序策略。

将指定活动上行链路的列表,并将传输节点上的每个接口固定到一个活动上行链路。此配置允许同时使
用多个活动上行链路。

5 配置活动上行链路和备用上行链路。

例如,将 uplink-1 配置为活动上行链路,并将 uplink-2 配置为备用上行链路。

6 输入传输 VLAN 值。

上行链路配置文件中设置的传输 VLAN 将标记覆盖网络流量,并且 VLAN ID 由隧道端点 (TEP) 使


用。
例如,1060。

7 输入 MTU 值。

上行链路配置文件 MTU 的默认值为 1600。

注 该值必须至少为 1600,但不能高于物理交换机和 vSphere Distributed Switch 上的 MTU 值。

创建 Edge 上行链路配置文件
创建一个包含故障切换顺序绑定策略的上行链路配置文件,为每个 Edge 虚拟机覆盖网络流量设置一个活
动上行链路。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 配置文件 > 上行链路配置文件 > 添加。

3 输入上行链路配置文件名称并(可选)添加上行链路配置文件描述。

例如,EDGE-UPLINK-PROFILE。

4 在绑定部分中,单击添加以添加命名绑定策略,并配置故障切换策略。

将列出活动上行链路列表,并将传输节点上的每个接口固定到一个活动上行链路。此配置允许同时使用
多个活动上行链路。

VMware, Inc. 70
vSphere with Tanzu 配置和管理

5 配置活动上行链路。

例如,将 uplink-1 配置为活动上行链路。

6 在上行链路配置文件页面中查看上行链路。

创建传输节点配置文件
传输节点配置文件用于定义在配置文件连接到的特定集群的主机上安装和配置 NSX-T Data Center 的方
式。

前提条件

确认您已创建覆盖网络传输区域。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 配置文件 > 传输节点配置文件 > 添加。

3 输入传输节点配置文件的名称和可选描述。

例如,HOST-TRANSPORT-NODE-PROFILE。

4 在新建节点交换机部分,将类型选为 VDS。

5 将模式选为 Standard。

6 从列表中选择 vCenter Server 和 Distributed Switch 名称。

例如,DSwitch

7 选择之前创建的覆盖网络传输区域。

例如,NSX-OVERLAY-TRANSPORTZONE。

8 选择之前创建的主机上行链路配置文件。

例如,ESXI-UPLINK-PROFILE。

9 从 IP 分配列表中选择使用 IP 池。

10 选择之前创建的主机 TEP 池。

例如,ESXI-TEP-IP-POOL。

11 在绑定策略交换机映射中,单击编辑图标,然后将 NSX-T 上行链路配置文件中定义的上行链路映射到


vSphere Distributed Switch 上行链路。

例如,将 uplink-1 (active) 映射到 Uplink 1,将 uplink-2 (standby) 映射到 Uplink 2。

12 单击添加。

13 确认您创建的配置文件已列在传输节点配置文件页面中。

VMware, Inc. 71
vSphere with Tanzu 配置和管理

在集群上配置 NSX-T Data Center


要安装 NSX-T Data Center 并准备覆盖网络 TEP,请将传输节点配置文件应用于 vSphere 集群。

前提条件

确认您已创建传输节点配置文件。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 节点 > 主机传输节点。

3 从托管主体下拉菜单中,选择现有的 vCenter Server。

该页面列出了可用的 vSphere 集群。

4 选择要在其上配置 NSX-T Data Center 的计算集群。

5 单击配置 NSX。

6 选择之前创建的传输节点配置文件,然后单击应用。

例如,HOST-TRANSPORT-NODE-PROFILE。

7 从主机传输节点页面,确认 NSX-T Data Center 配置状态为 Success,并且集群中主机的 NSX


Manager 连接状态为 Up。

结果

之前创建的传输节点配置文件将应用于 vSphere 集群,以安装 NSX-T Data Center 并准备覆盖网络


TEP。

配置和部署 NSX Edge 传输节点


您可以将 NSX Edge 虚拟机 (VM) 添加到 NSX-T Data Center 架构,并继续将其配置为 NSX Edge 传输
节点虚拟机。

前提条件

确认您已创建传输区域、Edge 上行链路配置文件和 Edge TEP IP 池。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 节点 > Edge 传输节点 > 添加 Edge 虚拟机。

3 在名称和描述中,输入 NSX Edge 的名称。

例如,nsx-edge-1

4 输入 vCenter Server 的主机名或 FQDN。

例如,nsx-edge-1.lab.com。

5 选择 Large 规格。

VMware, Inc. 72
vSphere with Tanzu 配置和管理

6 在凭据中,输入 NSX Edge 的 CLI 和 root 密码。您的密码必须符合密码强度限制。

n 至少 12 个字符。

n 至少 1 个小写字母。

n 至少 1 个大写字母。

n 至少 1 个数字。

n 至少 1 个特殊字符。

n 至少 5 个不同的字符。

n 默认密码复杂性规则由 Linux PAM 模块强制执行。

7 为 CLI 和 Root 凭据启用允许使用 SSH 登录。

8 在配置部署中,配置以下属性:

选项 描述

计算管理器 从下拉菜单中选择计算管理器。
例如,选择 vCenter。

集群 从下拉菜单中选择集群。
例如,选择 Compute-Cluster。

数据存储 从列表中选择共享数据存储。
例如,vsanDatastore。

9 配置节点设置。

选项 描述

IP 分配 选择“静态”。
输入以下项的值:
n 管理 IP:输入与 vCenter Server 管理网络相同的 VLAN 上的 IP 地址。

例如,10.197.79.146/24。
n 默认网关:管理网络的默认网关。

例如,10.197.79.253。

管理界面 单击选择接口,然后从您之前创建的下拉菜单中选择与管理网络位于同一 VLAN 上


的 vSphere Distributed Switch 端口组。
例如,DPortGroup-MGMT。

10 在配置 NSX 中,单击添加交换机以配置交换机属性。

11 对 Edge 交换机名称使用默认名称。

例如,nvds1。

12 选择传输节点所属的传输区域。

选择之前创建的覆盖网络传输区域。

VMware, Inc. 73
vSphere with Tanzu 配置和管理

例如,nsx-overlay-transportzone。

13 选择之前创建的 Edge 上行链路配置文件。

例如,EDGE-UPLINK-PROFILE。

14 在 IP 分配中选择使用 IP 池。

15 选择之前创建的 Edge TEP IP 池。

例如,EDGE-TEP-IP-POOL。

16 在绑定策略交换机映射部分中,将上行链路映射到之前创建的 Edge 上行链路配置文件。

例如,对于 Uplink1,选择 DPortGroup-EDGE-TEP。

17 重复步骤 10-16 以添加新交换机。

例如,配置以下值:

属性 值

Edge 交换机名称 nvds2

传输区域 nsx-vlan-transportzone

Edge 上行链路配置文件 EDGE-UPLINK-PROFILE

绑定策略交换机映射 DPortGroup-EDGE-UPLINK

18 单击完成。

19 对另一个 NSX Edge 虚拟机重复步骤 2-18。

20 在 Edge 传输节点页面上查看连接状态。

创建 NSX Edge 集群
要确保至少有一个 NSX Edge 始终可用,请创建一个 NSX Edge 集群。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 节点 > Edge 集群 > 添加。

3 输入 NSX Edge 集群名称。

例如,EDGE-CLUSTER。

4 从下拉菜单中选择默认 NSX Edge 集群配置文件。

选择 nsx-default-edge-high-availability-profile。

5 在成员类型下拉菜单中,选择 Edge 节点。

6 从可用列中,选择之前创建的 NSX Edge 虚拟机,然后单击向右箭头以将其移至已选择列。

7 例如,nsx-edge-1 和 nsx-edge-2。

VMware, Inc. 74
vSphere with Tanzu 配置和管理

8 单击保存。

创建第 0 层上行链路分段
第 0 层上行链路分段提供从 NSX-T Data Center 到物理基础架构的南北向连接。

前提条件

确认已创建第 0 层网关。

步骤

1 登录到 NSX Manager。

2 选择网络 > 分段 > 添加分段。

3 输入分段的名称。

例如,TIER-0-LS-UPLINK。

4 选择之前创建的传输区域。

例如,选择 nsx-vlan-transportzone。

5 切换管理状态以将其启用。

6 输入第 0 层网关的 VLAN ID。

例如,1089。

7 单击保存。

创建第 0 层网关
第 0 层网关是 NSX-T Data Center 逻辑路由器,为 NSX-T Data Center 逻辑网络提供到物理基础架构的
南北向连接。vSphere with Tanzu 在同一个传输区域中的多个 NSX Edge 集群上支持多个第 0 层网关。

前提条件

确认您已创建 NSX Edge 集群。

步骤

1 登录到 NSX Manager。

2 选择网络 > 第 0 层网关。

3 单击添加第 0 层网关。

4 输入第 0 层网关的名称。

例如,Tier-0_VWT。

5 选择活动-备用 HA 模式。

在活动-备用模式下,选定的活动成员将处理所有流量。如果活动成员出现故障,则会选择一个新成员
并使其成为活动成员。

VMware, Inc. 75
vSphere with Tanzu 配置和管理

6 选择之前创建的 NSX Edge 集群。

例如,选择 EDGE-CLUSTER。

7 单击保存。

第 0 层网关已创建。

8 选择是继续进行配置。

9 配置接口。

a 展开接口,然后单击设置。

b 单击添加接口。

c 输入名称。

例如,输入名称 TIER-0_VWT-UPLINK1。

d 选择外部作为类型。

e 输入 Edge 逻辑路由器 - 上行链路 VLAN 的 IP 地址。此 IP 地址必须不同于为之前创建的 NSX


Edge 虚拟机配置的管理 IP 地址。

例如,10.197.154.1/24。

f 在已连接到中,选择之前创建的第 0 层上行链路分段。

例如,TIER-0-LS-UPLINK

g 从列表中选择 NSX Edge 节点。

例如,nsx-edge-1。

h 单击保存。

i 对第二个接口重复步骤 a - h。

例如,使用连接到 nsx-edge-2 Edge 节点的 IP 地址 10.197.154.2/24 创建第二个上行链路


TIER-0_VWT-UPLINK2。

j 单击关闭。

10 要配置高可用性,请单击 HA VIP 配置中的设置。

a 单击添加 HA VIP 配置。

b 输入 IP 地址。

例如,10.197.154.3/24

c 选择接口。

例如,TIER-0_WVT-UPLINK1 和 TIER-0_WVT-UPLINK2。

d 单击添加和应用。

VMware, Inc. 76
vSphere with Tanzu 配置和管理

11 要配置路由,请单击路由。

a 单击“静态路由”中的设置。

b 单击添加静态路由。

c 输入名称。

例如,DEFAULT-STATIC-ROUTE。

d 输入 0.0.0.0/0 作为网络 IP 地址。

e 要配置下一跃点,请单击设置下一跃点,然后单击添加下一跃点。

f 输入下一个跃点路由器的 IP 地址。通常,这是 NSX Edge 逻辑路由器上行链路 VLAN 中的管理


网络 VLAN 的默认网关。

例如,10.197.154.253。

g 依次单击添加、应用和保存。

h 单击关闭。

12 要验证连接,请确保物理架构中的外部设备可以对您配置的上行链路执行 ping 操作。

后续步骤

配置 主管集群。请参见将具有 NSX-T Data Center 的工作负载平台配置为网络堆栈

VMware, Inc. 77
启用工作负载管理
4
作为 vSphere 管理员,您可以通过将 vSphere 集群配置为 主管集群 来对其启用工作负载管理。您可以选
择创建使用 vSphere 网络连接堆栈的 主管集群,也可以选择创建使用 NSX-T Data Center 作为网络连接
解决方案的主管集群。配置了 NSX-T Data Center 的集群支持运行通过 VMware Tanzu™ Kubernetes
Grid™ 服务 创建的 vSphere Pod 和 Tanzu Kubernetes 集群。配置了 vSphere 网络连接堆栈的 主管集
群 仅支持 Tanzu Kubernetes 集群。

本章讨论了以下主题:

n vSphere with Tanzu 的许可

n 使用 vSphere 网络堆栈启用工作负载管理平台

n 将具有 NSX-T Data Center 的工作负载平台配置为网络堆栈

n 将 Tanzu 版本许可证分配给 主管集群

n vSphere with Tanzu 配置最佳做法

n 更改 Kubernetes API 端点证书

vSphere with Tanzu 的许可


为 vSphere 集群配置 vSphere with Tanzu 且该集群变为 主管集群 后,必须在 60 天评估期过期之前为
集群分配 Tanzu 版许可证。

关于 Tanzu 版许可证
Tanzu 版许可证会在 vSphere 7.0.1 中启用工作负载管理功能。它适用于配置了 vSphere 网络连接堆栈或
NSX-T Data Center 作为网络连接堆栈的 主管集群。

作为 vSphere 管理员,当您将 Tanzu 版许可证分配给 主管集群 集群时,可以创建并配置命名空间,并为


DevOps 工程师提供对这些命名空间的访问权限。作为 DevOps 工程师,您可以在有权访问的命名空间内
部署 Tanzu Kubernetes 集群和 vSphere Pod。配置了 vSphere 网络连接堆栈的 主管集群 仅支持
Tanzu Kubernetes 集群。

许可 主管集群
将 vSphere 集群配置为 主管集群 后,可以在 60 天评估期内使用该集群的全部功能。60 天评估期过期之
前,必须将 Tanzu 版许可证分配给 主管集群。

VMware, Inc. 78
vSphere with Tanzu 配置和管理

如果 主管集群 配置为使用 NSX-T Data Center 作为网络堆栈,则必须将 NSX-T Data Center


Advanced 或更高级别的许可证分配给 NSX Manager。

如果将现有 主管集群 升级到 vSphere 7.0.1,则在升级完成后,集群将进入评估模式。分配给主机的


VMware vSphere 7 Enterprise Plus(含适用于 Kubernetes 的加载项)许可证充当常规 vSphere
Enterprise 7 Plus 许可证,不会启用任何 vSphere with Tanzu 功能。在这种情况下,必须在 60 天评估
期过期之前为 主管集群 分配 Tanzu 版许可证。

评估期和 Tanzu 许可证过期


当 主管集群 的评估期过期或 Tanzu 版许可证过期时,作为 vSphere 管理员,您无法创建新的命名空间或
更新 主管集群 的 Kubernetes 版本。作为 DevOps 工程师,您无法部署新的 vSphere Pod 和 Tanzu
Kubernetes 集群。无法更改现有 Tanzu Kubernetes 集群的配置,例如,添加新节点。

您仍然可以在 Tanzu Kubernetes 集群上部署工作负载,且所有现有工作负载继续按预期运行。已部署的


所有 Kubernetes 工作负载都将继续正常运行。

使用 vSphere 网络堆栈启用工作负载管理平台
作为 vSphere 管理员,您可以通过配置 vSphere 网络堆栈为工作负载提供连接,从而在 vSphere 集群上
启用工作负载管理平台。配置了 vSphere 网络连接的 主管集群 支持部署使用 Tanzu Kubernetes Grid 服
务 创建的 Tanzu Kubernetes 集群。它不支持运行 vSphere Pod。

前提条件

选择要为 主管集群 实施的拓扑,并验证您的 vSphere 环境是否满足支持该拓扑的系统要求。请参见设置


具有 vSphere 网络连接的 主管集群 的系统要求和拓扑。

n 验证是否已在 vSphere 集群上启用 DRS 和 HA,并且 DRS 是否处于全自动模式。

n 配置集群的共享存储。vSphere DRS、HA 和存储容器的持久卷需要共享存储。

n 创建用于放置 Kubernetes 控制平面虚拟机的存储策略。请参见为 vSphere with Tanzu 创建存储策


略。

n 在 vCenter Server 系统上创建订阅的内容库,以容纳用于创建 Tanzu Kubernetes 集群节点的虚拟


机映像。该库将包含 Kubernetes 的最新发行版。请参见为 Tanzu Kubernetes 集群创建已订阅内容
库。

n 将集群中的所有主机添加到 vSphere Distributed Switch,并为工作负载网络创建端口组。请参见为


使用 vSphere 网络堆栈的 主管集群 创建 vSphere Distributed Switch。

n 配置可路由到与 vSphere 集群中的主机连接的 vSphere Distributed Switch 的 HAProxy 负载均衡


器实例。

n 验证您对集群是否具有修改集群范围的配置特权。

步骤

1 从主菜单中,选择工作负载管理。

VMware, Inc. 79
vSphere with Tanzu 配置和管理

2 为 主管集群 选择一个许可选项。

n 如果您具有有效的 Tanzu 版本许可证,请单击添加许可证,将许可证密钥添加到 vSphere 的许可


证清单中。

n 如果您尚不具备 Tanzu 版本许可证,请填写详细联系信息,以便稍后从 VMware 接收通信信息,


然后单击开始使用。
主管集群 的评估期持续 60 天。在这段时间内,您必须向该集群分配有效的 Tanzu 版本许可证。如果
已添加 Tanzu 版本许可证密钥,则可以在完成 主管集群 设置后的 60 天评估期内分配该密钥。

3 在工作负载管理屏幕上,再次单击开始使用。

4 选择 vCenter Server 系统,选择 vCenter Server 网络,然后单击下一步。

5 从兼容集群列表中选择集群。

6 从控制平面大小页面中,为将在集群中的每个主机上创建的 Kubernetes 控制平面虚拟机选择 T 恤大


小。

分配给控制平面虚拟机的资源量决定可在 主管集群 上运行的 Kubernetes 工作负载的数量。

7 在负载均衡器屏幕上,输入 HAProxy 实例的设置。

选项 描述

名称 负载均衡器的用户友好名称。

类型 负载均衡器类型。

数据平面 API 地址 HAProxy 数据平面 API 的 IP 地址和端口。这是控制 HAProxy 服务器的组件,它


在 HAProxy 虚拟机内运行。

用户名 使用 HAProxy OVA 文件配置的用户名。您可以使用此名称向 HAProxy 数据平面


API 进行身份验证。

密码 用户名对应的密码。

虚拟服务器的 IP 地址范围 HAProxy 从中分配虚拟 IP 的 IP 范围。HAProxy 保留您为虚拟 IP 设置的 IP 范


围,不能将它用于其他连接。请确保您配置的 IP 范围位于单独的子网中。

服务器证书颁发机构 以 root 用户身份通过 SSH 登录到 HAProxy 虚拟机,并将 /etc/haproxy/ca.crt


复制到服务器证书颁发机构。
这是已签名的 PEM 格式的证书,或者是数据平面 API 提供的服务器证书的受信任
根。不要使用 \n 格式的转义行。

VMware, Inc. 80
vSphere with Tanzu 配置和管理

8 在管理网络屏幕上,配置将用于 Kubernetes 控制平面虚拟机的网络的参数。

选项 描述

网络 选择为管理流量配置了 VMkernel 适配器的网络。

起始控制 IP 地址 输入一个 IP 地址,该地址确定为 Kubernetes 控制平面虚拟机预留五个连续 IP 地


址的起点,如下所示:
n 每个 Kubernetes 控制平面虚拟机一个 IP 地址。
n 一个 Kubernetes 控制平面虚拟机的浮动 IP 地址,作为管理网络的接口。具有
分配的浮动 IP 地址的控制平面虚拟机用作所有三个 Kubernetes 控制平面虚拟
机的主要虚拟机。
n 在一个 Kubernetes 控制平面虚拟机出现故障后,启动一个新的控制平面虚拟
机来替代此关闭的虚拟机时用作缓冲区的 IP 地址。

子网掩码 输入管理网络的子网掩码。

DNS 服务器 输入环境中使用的 DNS 服务器的地址。如果 vCenter Server 系统已向 FQDN 注


册,则必须输入在 vSphere 环境中使用的 DNS 服务器的 IP 地址,以便在 主管集
群 中解析 FQDN。

DNS 搜索域 输入 DNS 在 Kubernetes 控制平面节点中搜索的域名(如 corp.local),以便


DNS 服务器解析这些域名。

NTP 输入环境中使用的 NTP 服务器的地址(如有)。

9 在工作负载网络页面中,输入将为 主管集群 上运行的 Kubernetes 工作负载处理网络连接流量的网络


的设置。

a 在服务的 IP 地址字段中,输入 Tanzu Kubernetes 集群及集群中运行的服务的 IP 地址的 cider


范围。

b 在工作负载网络窗格中,单击添加,然后输入网络的参数。

选项 描述

名称 与集群中的主机关联的 vSphere Distributed Switch 的名称。

端口组 选择将用作 主管集群 的主网络的端口组。主网络处理 Kubernetes 控制平面虚


拟机的流量和 Kubernetes 工作负载流量。您可以稍后分配一个不同的端口组用
作每个命名空间的网络,具体取决于您的网络连接拓扑。通过这种方式,可以在
主管集群 中的命名空间之间提供第 2 层隔离。未分配不同端口组作为其网络的
命名空间将使用主网络。Tanzu Kubernetes 集群仅使用分配给它们的部署命名
空间的网络,如果未向该命名空间分配明确的网络,它们将使用主网络。

网关 输入主网络的网关。

子网掩码 IP 输入子网掩码 IP 地址。

IP 地址范围 输入用于分配 Kubernetes 控制平面虚拟机和工作负载的 IP 地址的 IP 范围。

注 您必须为每个工作负载网络使用唯一的 IP 地址范围。不要为多个网络配置相
同的 IP 地址范围。

c 根据为 主管集群 实施的拓扑添加更多工作负载网络。

10 在 Tanzu Kubernetes Grid 页面上,单击添加,然后选择包含用于部署 Tanzu Kubernetes 集群节


点的虚拟机映像的已订阅内容库。

VMware, Inc. 81
vSphere with Tanzu 配置和管理

11 查看设置,然后单击完成。

结果

一个任务将在 vCenter Server 上运行,用于将集群转变为 主管集群。任务完成后,将在属于该集群的主


机上创建三个 Kubernetes 控制平面虚拟机。

后续步骤

在 主管集群 上创建并配置您的第一个命名空间。

将具有 NSX-T Data Center 的工作负载平台配置为网络堆栈


作为 vSphere 管理员,您可以将 vSphere 集群配置为使用 NSX-T Data Center 网络连接堆栈的 主管集
群,以提供与 Kubernetes 工作负载的连接。

前提条件

n 确认您的环境满足将 vSphere 集群配置为 主管集群 的系统要求。有关要求的信息,请参见设置具有


NSX-T Data Center 的 主管集群 的系统要求和拓扑。

n 验证是否已安装和配置 NSX-T Data Center。有关安装和配置 NSX-T Data Center 的信息,请参见


为 vSphere with Tanzu 安装并配置 NSX-T Data Center.

n 创建用于放置控制平面虚拟机、Pod 临时磁盘和容器映像的存储策略。

n 配置集群的共享存储。vSphere DRS、HA 和存储容器的持久卷需要共享存储。

n 验证是否已在 vSphere 集群上启用 DRS 和 HA,并且 DRS 是否处于全自动模式。

n 验证您对集群是否具有修改集群范围的配置特权。

步骤

1 从 vSphere Client 主菜单中,选择工作负载管理。

2 单击开始。

3 选择要配置的 vCenter Server 系统。

4 选择 NSX 网络堆栈。

5 单击下一步。

6 选择选择集群 > 数据中心。

7 从兼容集群列表中选择一个集群,然后单击下一步。

8 从控制平面大小页面中,选择“为控制平面虚拟机选择大小”。

控制平面虚拟机的大小决定了可以在 主管集群 上运行的工作负载数量。


有关指导,请参考 VMware 最高配置站点。

9 单击下一步。

VMware, Inc. 82
vSphere with Tanzu 配置和管理

10 在网络设置中,为控制平面和工作节点配置网络设置。

a 在管理网络窗格中,配置以下管理流量设置:

选项 描述

网络 选择为管理流量配置的网络。
例如,DPortGroup-MGMT。

起始控制平面 IP 输入一个 IP 地址,该地址将确定为 Kubernetes 控制平面虚拟机预留连续 IP 地


址的起点,如下所示:
n 每个 Kubernetes 控制平面虚拟机一个 IP 地址。
n 一个 Kubernetes 控制平面虚拟机的浮动 IP 地址,作为管理网络的接口。具
有分配的浮动 IP 地址的控制平面虚拟机用作所有三个 Kubernetes 控制平面
虚拟机的主要虚拟机。
n 在一个 Kubernetes 控制平面虚拟机出现故障后,启动一个新的控制平面虚
拟机来替代此关闭的虚拟机时用作缓冲区的 IP 地址。
例如,10.197.79.152。

子网掩码 输入管理网络的子网掩码。
例如,255.255.255.0。

输入网关 IP 地址。
例如,10.197.79.253。

DNS 服务器 输入环境中使用的 DNS 服务器的地址。如果 vCenter Server 系统已向 FQDN


注册,则必须输入在 vSphere 环境中使用的 DNS 服务器的 IP 地址,以便在 主
管集群 中解析 FQDN。
例如,10.142.7.1。

NTP 服务器 输入环境中使用的 NTP 服务器的地址(如有)。

DNS 搜索域 输入 DNS 在 Kubernetes 控制平面节点中搜索的域名(如 corp.local),以


便 DNS 服务器解析这些域名。

b 在工作负载网络窗格中,为命名空间的网络配置设置。

命名空间网络设置提供与在 主管集群 中运行的 vSphere Pod 和命名空间的连接。

选项 描述

vSphere Distributed Switch 选择为 主管集群 处理覆盖网络的 vSphere Distributed Switch。


例如,选择 DSwitch。

Edge 集群 选择具有要用于命名空间网络的第 0 层网关的 NSX Edge 集群。


例如,选择 EDGE-CLUSTER。

API 服务器端点 FQDN (可选)输入 API 服务器端点的 FQDN。

DNS 服务器 输入环境中使用的 DNS 服务器的 IP 地址(如有)。


例如,10.142.7.1。

Pod CIDR 输入 CIDR 注释以确定 vSphere Native Pod 的 IP 范围。可以使用默认值。

服务 CIDR 输入 CIDR 注释以确定 Kubernetes 服务的 IP 范围。可以使用默认值。

VMware, Inc. 83
vSphere with Tanzu 配置和管理

选项 描述

输入 CIDR 输入 CIDR 注释以确定 Kubernetes 服务的输入 IP 范围。此范围用于类型为负


载均衡器和输入的服务。

输出 CIDR 输入 CIDR 注释以确定 Kubernetes 服务的输出 IP。仅为 主管集群 中的每个命


名空间分配一个输出 IP 地址。输出 IP 是特定命名空间中 vSphere Pod 的 IP 地
址,用于在 NSX-T Data Center 之外进行通信。

11 单击下一步。

12 在存储设置中,为 主管集群 配置存储。

为以下每个对象选择的存储策略可确保将对象放置在存储策略中引用的数据存储上。可以对这些对象使
用相同或不同的存储策略。

选项 描述

控制平面节点 选择用于放置控制平面虚拟机的存储策略。

Pod 临时磁盘 选择用于放置 vSphere Pod 的存储策略。

容器映像缓存 选择用于放置容器映像缓存的存储策略。

13 在即将完成部分中,检查设置,然后单击完成。

集群已启用 vSphere with Tanzu,您可以创建 主管命名空间 以提供给 DevOps 工程师。


Kubernetes 控制平面节点是在属于集群的主机以及 Spherelet 进程上创建的。

后续步骤

在 主管集群 上创建并配置 主管命名空间。请参见创建和配置 vSphere 命名空间

将 Tanzu 版本许可证分配给 主管集群


如果在评估模式下使用 主管集群,则必须在 60 天评估期到期之前为该集群分配 Tanzu 版本许可证。

注 一旦 主管集群 的评估期到期或 Tanzu 版本许可证到期,vSphere 管理员将无法在 主管集群 上创建任


何新命名空间,也无法更新集群的 Kubernetes 版本。DevOps 工程师则无法创建新的 vSphere Pod 和
Tanzu Kubernetes 集群。您无法更新现有 Tanzu Kubernetes 集群的配置,例如,添加新节点。已部署
的所有 Kubernetes 工作负载都将继续正常运行,您可以在现有的 Tanzu Kubernetes 集群上部署新工作
负载。

步骤

1 在 vSphere Client 中,导航到 主管集群。

2 选择配置,然后在许可下选择主管集群。

3 选择分配许可证。

4 在分配许可证对话框中,单击新建许可证。

5 输入有效的许可证密钥,然后单击确定。

VMware, Inc. 84
vSphere with Tanzu 配置和管理

vSphere with Tanzu 配置最佳做法


在 vSphere 集群上配置 vSphere with Tanzu 时,请考虑以下最佳做法。

n 对 NSX Edge 使用 vSAN 数据存储。

n 如果使用 vSAN 数据存储,请确保为工作负载正确调整 vSAN 环境大小。vSAN 设置需要更多内存,


因为内核内存用于 vSAN。这会减少 NSX Edge 虚拟机可用的内存。使用 vSAN 计算器进行适当调
整。有关详细信息,请参见 vSAN ReadyNode Sizer。

n 如果使用 NFS 数据存储,请确认该数据存储已在集群中的所有主机之间共享。为每个 NSX Edge 节


点创建唯一的 NFS 数据存储。

n 为每个 NSX Edge 集群配置专用资源池。请勿与其他虚拟机共享资源池。

n 配置 ESXi 主机覆盖网络时,请使用范围 1-4094 内的 VLAN。

n 配置 Edge 覆盖网络时,请使用范围 1-4094 内的 VLAN。

更改 Kubernetes API 端点证书


作为 vSphere 管理员,您可以更改 Kubernetes API 端点证书。该证书将在登录期间以及与 主管集群 进
行后续交互期间为 DevOps 工程师进行 Kubernetes 控制平面身份验证。

前提条件

验证您是否有权访问可对 CSR 进行签名的 CA。对于 DevOps 工程师,必须将此 CA 作为可信 root 安装


到其系统中。

步骤

1 在 vSphere Client 中,导航到 主管集群。

2 单击配置,然后在命名空间下选择证书。

3 在工作负载平台管理窗格中,选择操作 > 生成 CSR。

4 提供证书的详细信息。

5 生成 CSR 后,单击复制。

6 使用 CA 对证书进行签名。

7 从工作负载平台管理窗格中选择操作 > 替换证书。

8 上载签名证书文件,然后单击替换证书。

9 验证此证书以确认 Kubernetes 控制平面的 IP 地址。

例如,可以使用浏览器打开 适用于 vSphere 的 Kubernetes CLI 工具 下载页面并确认已成功替换此


证书。还可以使用 echo | openssl s_client -connect https://ip:6443。

VMware, Inc. 85
在 主管集群 上使用 vSphere 命名空
间 5
作为 vSphere 管理员,您可以在 主管集群 上创建一个或多个 vSphere 命名空间,并为每个命名空间配置
资源配额、存储和用户权限。配置命名空间后,DevOps 工程师可以使用 Tanzu Kubernetes Grid 服务
部署 vSphere Pod 实例并置备 Tanzu Kubernetes 集群。

本章讨论了以下主题:

n 创建和配置 vSphere 命名空间

n 针对命名空间上的 Kubernetes 对象配置限制

n 设置容器的默认内存和 CPU 预留与限制

n 关联内容库与 主管命名空间

n 使用 注册表服务 提供专用映像注册表

创建和配置 vSphere 命名空间


作为 vSphere 管理员,您可以在 主管集群 上创建 vSphere Namespace。您可以将资源限制设置为命名
空间和权限,以便 DevOps 工程师对其进行访问。您可以向 DevOps 工程师提供 Kubernetes 控制平面
的 URL,以便他们可以在具有权限的命名空间上运行 Kubernetes 工作负载。

配置了 vSphere 网络堆栈的 主管集群 上的命名空间以及配置了 NSX-T Data Center 的集群上的命名空


间具有不同的网络配置和功能。

在配置了 NSX-T Data Center 的 主管集群 上创建的命名空间支持工作负载管理平台的完整功能集。它们


同时支持 vSphere Pod 和 Tanzu Kubernetes 集群。NSX-T Data Center 提供对这些命名空间的工作负
载网络支持。有关详细信息,请参见设置具有 NSX-T Data Center 的 主管集群 的系统要求和拓扑。

在配置了 vSphere 网络堆栈的 主管集群 上创建的命名空间仅支持 Tanzu Kubernetes 集群,它们不支持


vSphere Pod,并且您无法对它们使用 注册表服务。连接到 主管集群 的主机部分的 vSphere
Distributed Switch 提供这些命名空间的工作负载网络支持。有关详细信息,请参见设置具有 vSphere 网
络连接的 主管集群 的系统要求和拓扑。

前提条件

n 使用 vSphere with Tanzu 配置集群。

n 为将访问命名空间的所有 DevOps 工程师创建用户或组。

VMware, Inc. 86
vSphere with Tanzu 配置和管理

n 为 Tanzu Kubernetes 集群内的 vSphere Pod 和 pod 将使用的持久存储创建存储策略。存储策略可


以定义不同的存储类型和存储类,例如金级、银级和铜级。

n 所需特权:

n 命名空间.修改集群范围的配置

n 命名空间.修改命名空间配置

步骤

1 从 vSphere Client 主菜单中,选择工作负载平台。

2 单击命名空间,然后单击新建命名空间。

3 选择要放置命名空间的 主管集群。

4 输入命名空间的名称。

名称必须采用符合 DNS 的格式。

5 从网络下拉菜单中,为命名空间选择工作负载网络。

注 仅当在配置了 vSphere 网络堆栈的集群上创建命名空间时,此步骤才可用。

6 输入描述,然后单击创建。

此命名空间是在 主管集群 上创建的。

7 设置权限,以便 DevOps 工程师访问此命名空间。

a 从权限窗格中,选择添加权限。

b 选择标识源、用户或组以及角色,然后单击确定。

8 将持久存储设置为命名空间。

分配给命名空间的存储策略可以控制如何在 vSphere 存储环境的数据存储中放置持久卷和 Tanzu


Kubernetes 集群节点。与持久卷相对应的持久卷声明可以来自 vSphere Pod 或 Tanzu Kubernetes
集群。
a 从存储窗格中,选择添加存储。

b 选择存储策略以控制持久卷的数据存储放置,然后单击确定。

分配存储策略后,vSphere with Tanzu 会在 主管命名空间 中创建匹配的 Kubernetes 存储类。如果


使用 VMware Tanzu™ Kubernetes Grid™ 服务,则该存储类将自动从命名空间复制到 Kubernetes 集
群。在将多个存储策略分配给此命名空间时,会为每个存储策略创建一个单独的存储类。

9 从“容量和使用情况”窗格中,选择编辑限制并为命名空间配置资源限制。

选项 描述

CPU 要为命名空间预留的 CPU 资源量。

内存 要为命名空间预留的内存量。

VMware, Inc. 87
vSphere with Tanzu 配置和管理

选项 描述

存储 要为命名空间预留的总存储空间量。

存储策略限制 分别设置专用于与命名空间关联的每个存储策略的存储量。

将在 vCenter Server 上创建命名空间的资源池。存储限制决定可用于命名空间的总存储量,而存储策


略则决定 vSphere Pod 持久卷在关联存储类上的放置位置。

后续步骤

与 DevOps 工程师共享 Kubernetes 控制平面 URL 以及用于通过 适用于 vSphere 的 Kubernetes CLI 工
具 登录 主管集群 的用户名。您可以向 DevOps 工程师授予对多个命名空间的访问权限。

针对命名空间上的 Kubernetes 对象配置限制


您可以针对在命名空间内运行的容器配置限制,以及针对各种 Kubernetes 对象配置限制。针对对象配置
的限制取决于应用程序的细节以及您希望用户使用命名空间中的资源的方式。

前提条件

n 验证您对 主管集群 是否具有修改命名空间配置特权。

步骤

1 从 vSphere Client 主菜单中,选择工作负载管理。

2 选择一个命名空间,选择配置,然后选择对象限制。

3 针对命名空间配置对象限制。

您设置的 Pod 数量将影响可通过部署、作业、副本集、复制控制器等进行部署的 vSphere Pod 的数


量。

设置容器的默认内存和 CPU 预留与限制


您可以通过 vSphere Client 为命名空间中的容器设置默认内存和 CPU 预留与限制。DevOps 工程师以后
可以在其定义的 Pod 规范中覆盖这些值。容器请求转换为 vSphere Pod 上的资源预留。

前提条件

n 验证您对 主管集群 是否具有修改命名空间配置特权。

步骤

1 从 vSphere Client 主菜单中,选择工作负载管理。

2 选择一个命名空间,选择配置,然后单击资源限制

VMware, Inc. 88
vSphere with Tanzu 配置和管理

3 为命名空间中的容器配置默认内存和 CPU 预留与限制。

选项 描述

CPU 请求 为命名空间中的容器设置默认 CPU 预留。

CPU 限制 为命名空间中的容器设置默认的 CPU 使用限制。

内存请求 为命名空间中的容器设置默认内存预留。

内存限制 为命名空间中的容器设置默认内存使用限制。

关联内容库与 主管命名空间
要置备 Tanzu Kubernetes 集群,请将内容库与 主管命名空间 相关联。

前提条件

n 创建已订阅内容库.

n 创建和配置 vSphere 命名空间.

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 使用以下方法之一关联内容库。

选项 描述

使用 Tanzu Kubernetes 图标 n 选择菜单 > 工作负载管理 > 。


n 选择命名空间选项卡。
n 选择 主管命名空间。
n 找到 Tanzu Kubernetes 图标。
n 单击内容库标签旁边的编辑。
n 选择内容库名称旁边的单选按钮。
n 单击确定以完成该过程。

使用 vSphere 清单 >“配置”选项卡 n 导航到菜单 > 主机和集群视图。


n 在 vSphere 清单中,选择 vSphere 集群对象。
n 选择配置选项卡。
n 选择命名空间 > 常规选项。
n 对于内容库,单击编辑。
n 单击创建库。
n 选择内容库。
n 单击确定以完成该过程。

使用 注册表服务 提供专用映像注册表
您可以通过 注册表服务 在 主管集群 上启用专用映像注册表。一个集群可以包含一个专用映像注册表实
例。主管集群 上的所有命名空间均表示为专用注册表中的项目。注册表服务 仅适用于 vSphere Pod,因
此它仅适用于配置了 NSX-T Data Center 网络连接堆栈的 主管集群。

VMware, Inc. 89
vSphere with Tanzu 配置和管理

作为 vSphere 管理员,您可以在 主管集群 上启用专用映像注册表。您为 DevOps 工程师提供了专用映像


注册表用户界面的 URL,而 DevOps 工程师可以使用 Docker vSphere Credential Helper 执行安全登
录,并对专用映像注册表中的项目执行 Docker 推送和提取映像操作。将映像推送到专用映像注册表中的
项目后,DevOps 工程师可以从中部署 vSphere Pod。

如果 DevOps 工程师报告为某个项目存储了过多的映像,作为 vSphere 管理员,您可以在专用映像注册


表中清除该项目的映像。从项目中清除映像将删除对这些映像的所有引用,但不会从 vSphere 数据存储中
删除这些映像。每星期六的凌晨 2 点,垃圾数据收集器服务将从整个专用映像注册表中删除应用程序未引
用的所有映像。

通过 注册表服务 在 主管集群 上启用专用映像注册表


作为 vSphere 管理员,您可以通过 注册表服务 在 主管集群 上启用专用映像注册表。DevOps 工程师可
以从注册表推送和提取映像,以及使用这些映像部署 vSphere Pod。注册表服务 仅在 vSphere Pod 中受
支持,因此它可用于将 NSX-T Data Center 配置为网络连接堆栈的 主管集群。

前提条件

n 创建用于放置容器映像的存储策略。

步骤

1 在 vSphere Client 中,浏览到要启用映像注册表的集群。

2 选择配置。

3 在命名空间下,选择映像注册表。

4 单击启用 Harbor。

5 选择用于放置容器映像的存储策略。

结果

在几分钟后,将启用专用映像注册表。将为该专用映像注册表实例创建一个特殊命名空间。无法对该命名
空间执行任何操作,它对 vSphere 用户是只读的。

主管集群 上的每个命名空间都具有与专用映像注册表同名的匹配项目。在命名空间具有编辑或查看权限的
每个用户或组,会在专用映像注册表中具有相同名称的匹配项目中成为相应的角色成员。项目的生命周期
和专用映像注册表的成员将由系统自动管理,并将链接到命名空间的生命周期和命名空间中的用户或组权
限。

后续步骤

向 DevOps 工程师提供专用映像注册表实例的 URL。

VMware, Inc. 90
vSphere with Tanzu 配置和管理

清除专用映像注册表中的映像
作为 vSphere 管理员,您可以通过 DevOps 工程师的请求从专用映像注册表中清除项目的映像。从专用
映像注册表中清除映像会删除对 pod 所创建的映像的所有引用,但不会从映像注册表中移除映像。

步骤

1 在 vSphere Client 中,导航到命名空间。

2 选择配置,然后选择常规。

3 在嵌入式注册表旁边,单击清除。

VMware, Inc. 91
连接到 vSphere with Tanzu 集群
6
您可以连接到 主管集群 置备 vSphere Pod 和 Tanzu Kubernetes 集群。置备后,您可以使用各种方法连
接到 Tanzu Kubernetes 集群,然后基于您的角色和目标进行身份验证。

本章讨论了以下主题:

n 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具

n 以 vCenter Single Sign-On 用户的身份连接到 主管集群

n 以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群

n 以管理员用户身份连接到 Tanzu Kubernetes 集群控制平面

n 以系统用户身份使用私钥通过 SSH 连接到 Tanzu Kubernetes 集群节点

n 以系统用户身份使用密码通过 SSH 连接到 Tanzu Kubernetes 集群节点

n 向开发人员授予 Tanzu Kubernetes 集群访问权限

下载并安装 适用于 vSphere 的 Kubernetes CLI 工具


可以使用 适用于 vSphere 的 Kubernetes CLI 工具 查看并控制 vSphere with Tanzu 命名空间和集群。

Kubernetes CLI 工具下载软件包包含两个可执行文件:标准的开源 kubectl 和 kubectl 的 vSphere 插


件。kubectl CLI 具有可插入架构。kubectl 的 vSphere 插件 扩展了可供 kubectl 使用的命令,以便使用
vCenter Single Sign-On 凭据连接到 主管集群 和 Tanzu Kubernetes 集群。

注 最好在执行 vSphere 命名空间更新后下载并安装最新版本的 kubectl 的 vSphere 插件。请参见更新


kubectl 的 vSphere 插件。

前提条件

n 从 vSphere 管理员获取 Kubernetes CLI 工具下载页面的链接。

n 或者,如果您有权访问 vCenter Server,请按如下所示获取链接:

n 使用 vSphere Client 登录 vCenter Server。

n 导航到 vSphere 集群 > 命名空间,然后选择要操作的 主管命名空间。

n 选择摘要选项卡,然后在此页面上找到状态区域。

n 选择链接到 CLI 工具标题下的打开以打开下载页面。或者,可以复制该链接。

VMware, Inc. 92
vSphere with Tanzu 配置和管理

步骤

1 使用浏览器,导航到适用于您环境的 Kubernetes CLI 工具下载 URL。

2 选择操作系统。

3 下载 vsphere-plugin.zip 文件。

4 将 ZIP 文件的内容提取到工作目录。

vsphere-plugin.zip 软件包包含两个可执行文件:kubectl 和 kubectl 的 vSphere 插件。kubectl


是标准 Kubernetes CLI。kubectl-vsphere 是 kubectl 的 vSphere 插件,可帮助您使用 vCenter
Single Sign-On 凭据对 主管集群 和 Tanzu Kubernetes 集群进行身份验证。

5 将这两个可执行文件的位置添加到系统的 PATH 变量。

6 要验证 kubectl CLI 的安装,请启动 shell、终端或命令提示符会话,然后运行命令 kubectl。

将显示 kubectl 横幅消息和 CLI 的命令行选项列表。

7 要验证 kubectl 的 vSphere 插件 的安装,请运行命令 kubectl vsphere。

将显示 kubectl 的 vSphere 插件 横幅消息和该插件的命令行选项列表。

后续步骤

下载并安装 TLS 证书.

下载并安装 TLS 证书
要安全地登录到 Tanzu Kubernetes 集群,请下载并安装 vCenter Server 的根 CA 证书和最新版本的
kubectl 的 vSphere 插件。

vCenter Server CA 证书
vSphere with Tanzu 支持使用 kubectl 的 vSphere 插件 命令 kubectl vsphere login … 通过 vCenter
Single Sign-On 访问集群。

要使用该插件安全地登录到 Tanzu Kubernetes 集群,需要 vCenter Server 的根 CA 证书,或者自定义


CA 证书(如果您的 vSphere 管理员替换了根 CA 证书)。

要下载并安装 vCenter Server 根 CA 证书,请参阅 VMware 知识库文章如何下载并安装 vCenter


Server 根证书。

Tanzu Kubernetes 集群 CA 证书
要使用 kubectl CLI 安全地与 Tanzu Kubernetes 集群 API 服务器进行连接,需要 Tanzu Kubernetes 集
群 CA 证书。

如果使用的是最新版本的 kubectl 的 vSphere 插件,则首次登录到 Tanzu Kubernetes 集群时,该插件


会在 kubconfig 文件中注册 Tanzu Kubernetes 集群 CA 证书。此证书存储在名为 TANZU-KUBERNETES-
CLUSTER-NAME-ca 的 Kubernetes 密钥中。该插件使用此证书在相应集群的证书颁发机构数据存储中填充
CA 信息。

VMware, Inc. 93
vSphere with Tanzu 配置和管理

如果要更新 vSphere with Tanzu,请确保更新到插件的最新版本。请参见更新 kubectl 的 vSphere 插


件。

为 Kubectl 指定默认的文本编辑器
为帮助您在置备后维护 Tanzu Kubernetes 集群,请为 kubectl 指定默认的文本编辑器。

用途
置备 Tanzu Kubernetes 集群后,需要对其进行维护。典型的维护任务包括升级 Kubernetes 版本和扩展
集群节点。要执行此类任务,请更新集群清单。

更新已置备集群的清单的最便捷方法是使用 kubectl edit 命令。此命令将在所选择的文本编辑器中打开


Kubernetes 清单。保存更改后,Kubernetes 会自动应用更改并更新集群。

要使用 kubectl edit 命令,请创建一个 KUBE_EDITOR 环境变量,并指定首选文本编辑器作为变量值。


此外,还需要将监视标记 (-w) 附加到值,以便 kubectl 知晓您提交(保存)了更改。

Windows
在 Windows 上,创建一个名为 KUBE_EDITOR 的系统环境变量,并将值设置为首选文本编辑器的路径。将
监视标记 (-w) 附加到值。

例如,以下环境变量将 Visual Studio Code 设置为 kubectl 的默认文本编辑器,并包含监视标记,以便您


保存了更改时 Kubernetes 会知晓:

KUBE_EDITOR=code -w.

Mac OS
在 Mac OS 上,创建一个名为 KUBE_EDITOR 的环境变量,并将值设置为首选文本编辑器的路径。将监视标
记 (-w) 附加到值,以便 kubectl 知晓您提交(保存)了更改。

例如,在 .bash_profile 中添加的以下内容将 Sublime 设置为 kubectl 的默认文本编辑器,并包含监视标


记,以便 kubectl 知晓您保存了任何更改。

export KUBE_EDITOR="/Applications/Sublime.app/Contents/SharedSupport/bin/subl-w"

Linux
在 Linux(例如,Ubuntu)上,通常,默认的命令行 EDITOR 是 Vim。如果是,则无需执行任何其他操作
即可使用 kubectl edit 命令。如果要使用其他编辑器,请创建一个名为 KUBE_EDITOR 的环境变量,并将值
设置为首选文本编辑器的路径。

VMware, Inc. 94
vSphere with Tanzu 配置和管理

以 vCenter Single Sign-On 用户的身份连接到 主管集群


要使用 Tanzu Kubernetes Grid 服务 置备 vSphere Pod 或 Tanzu Kubernetes 集群,请使用 kubectl
的 vSphere 插件 连接到 主管集群,并使用您的 vCenter Single Sign-On 凭据进行身份验证。

登录到 主管集群 后,kubectl 的 vSphere 插件 将为集群生成上下文。在 Kubernetes 中,配置上下文包


含集群、命名空间和用户。可以在 .kube/config 文件中查看集群上下文。此文件通常称为 kubeconfig
文件。

注 如果您有现有的 kubeconfig 文件,则该文件将附加每个集群上下文。kubectl 的 vSphere 插件 采用


kubectl 自身使用的 KUBECONFIG 环境变量。请在运行 kubectl vsphere login ... 之前设置此变量,
虽然此操作并非必需,但非常有用,因为这样可将信息写入新文件(而不是添加到当前 kubeconfig 文
件)。

前提条件

n 获取您的 vCenter Single Sign-On 凭据。

n 获取 主管集群 控制平面的 IP 地址。

n 获取 主管命名空间 的名称。

n 确认您对 主管命名空间 具有编辑权限。

n 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具.

n 通过将签名 CA 作为可信 Root 进行安装或将证书直接添加为可信 Root,验证 Kubernetes 控制平面


提供的证书在您的系统上是否受信任。

步骤

1 要查看用于登录的命令语法和选项,请运行以下命令。

kubectl vsphere login --help

2 要连接到 主管集群,请运行以下命令。

kubectl vsphere login --server=<KUBERNETES-CONTROL-PLANE-IP-ADDRESS> --vsphere-username <VCENTER-


SSO-USER>

例如:

kubectl vsphere login --server=10.92.42.13 --vsphere-username administrator@example.com

此操作将创建一个配置文件,其中包含用于向 Kubernetes API 进行身份验证的 JSON Web 令牌


(JWT)。

VMware, Inc. 95
vSphere with Tanzu 配置和管理

3 要进行身份验证,请输入用户的密码。

连接到 主管集群 后,您会看到可以访问的配置上下文。例如:

You have access to the following contexts:


tanzu-ns-1
tkg-cluster-1
tkg-cluster-2

4 要查看您可以访问的配置上下文的详细信息,请运行以下 kubectl 命令:

kubectl config get-contexts

CLI 将显示每个可用上下文的详细信息。

5 要在上下文之间切换,请使用以下命令:

kubectl config use-context <example-context-name>

后续步骤

以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群.

以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes


集群
可以使用 kubectl 的 vSphere 插件 连接到 Tanzu Kubernetes 集群,并使用您的 vCenter Single Sign-
On 凭据进行身份验证。

登录到 Tanzu Kubernetes 集群后,kubectl 的 vSphere 插件 将为集群生成上下文。在 Kubernetes


中,配置上下文包含集群、命名空间和用户。可以在 .kube/config 文件中查看集群上下文。此文件通常
称为 kubeconfig 文件。

注 如果您有现有的 kubeconfig 文件,则该文件将附加每个集群上下文。kubectl 的 vSphere 插件 采用


kubectl 自身使用的 KUBECONFIG 环境变量。请在运行 kubectl vsphere login ... 之前设置此变量,
虽然此操作并非必需,但非常有用,因为这样可将信息写入新文件(而不是添加到当前 kubeconfig 文
件)。

前提条件

从您的 vSphere 管理员处获取以下信息:

n 获取您的 vCenter Single Sign-On 凭据。

n 获取 主管集群 控制平面的 IP 地址。

n 获取 主管命名空间 的名称。

n 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具.

VMware, Inc. 96
vSphere with Tanzu 配置和管理

步骤

1 要查看用于登录的命令语法和选项,请运行以下命令。

kubectl vsphere login --help

2 要连接到 Tanzu Kubernetes 集群,请运行以下命令。

kubectl vsphere login --server=SUPERVISOR-CLUSTER-CONTROL-PLANE-IP


--tanzu-kubernetes-cluster-name TANZU-KUBERNETES-CLUSTER-NAME
--tanzu-kubernetes-cluster-namespace SUPERVISOR-NAMESPACE-WHERE-THE-CLUSTER-IS-DEPLOYED
--vsphere-username VCENTER-SSO-USER-NAME

例如:

kubectl vsphere login --server=10.92.42.137


--tanzu-kubernetes-cluster-name tanzu-kubernetes-cluster-01
--tanzu-kubernetes-cluster-namespace tanzu-ns-1
--vsphere-username administrator@example.com

此操作将创建一个配置文件,其中包含用于向 Kubernetes API 进行身份验证的 JSON Web 令牌


(JWT)。

3 要进行身份验证,请输入您的 vCenter Single Sign-On 密码。

如果操作成功,您会看到消息 Logged in successfully,您可以针对集群运行 kubectl 命令。如果命


令返回 Error from server (Forbidden),通常此错误表示您没有所需的权限。有关详细信息,请参见
对 vCenter Single Sign-On 连接错误进行故障排除。

4 要获取可用的上下文列表,请运行以下命令:

kubectl config get-contexts

此命令将列出您有权访问的配置上下文。您会看到目标集群的配置上下文,如 tkg-cluster-01。

5 要使用目标集群的上下文,请运行以下命令:

kubectl config use-context CLUSTER-NAME

6 要列出集群节点,请运行以下命令:

kubectl get nodes

您将看到此集群中的控制平面节点和工作节点。

7 要列出所有集群 pod,请运行以下命令:

kubectl get pods -A

您将看到有权访问的所有 Kubernetes 命名空间中此集群的所有 pod。如果尚未部署任何工作负载,


则不会在默认命名空间中看到任何 pod。

VMware, Inc. 97
vSphere with Tanzu 配置和管理

以管理员用户身份连接到 Tanzu Kubernetes 集群控制平面


可以 kubernetes-admin 用户身份连接到 Tanzu Kubernetes 集群控制平面,以便执行管理任务和对集群
问题进行故障排除。

置备的 Tanzu Kubernetes 集群的有效 kubeconfig 文件在 主管集群 上作为 TKGS-CLUSTER-NAME-


kubeconfig 的密钥对象提供。可以使用此密钥以 kubernetes-admin 用户身份连接到集群控制平面。有关
详细信息,请参见 Tanzu Kubernetes 集群密钥。

步骤

1 连接到 主管集群。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

2 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 vSphere Namespace。

kubectl config use-context VSPHERE-NAMESPACE

3 查看命名空间中的密钥对象。

kubectl get secrets

该密钥名为 TKGS-CLUSTER-NAME-kubeconfig。

kubectl config use-context tkgs-cluster-ns


Switched to context "tkgs-cluster-ns".
ubuntu@ubuntu:~$ kubectl get secrets
NAME TYPE DATA AGE
...
tkgs-cluster-1-kubeconfig Opaque 1 23h
...

4 通过运行以下命令对密钥进行解码。

密钥采用 Base64 编码。对其进行解码:在 Linux 上,使用 base64 --decode(或 base64 -d);在


MacOS 上,使用 base64 --Decode(或 base64 -D);在 Windows 上,使用联机工具。

kubectl get secret TKGS-CLUSTER-NAME-kubeconfig -o jsonpath='{.data.value}' | base64 -d > tkgs-


cluster-kubeconfig-admin

此命令将对密钥进行解码,并将其写入到名为 tkgs-cluster-kubeconfig-admin 的本地文件中。使用


cat 命令验证文件内容。

VMware, Inc. 98
vSphere with Tanzu 配置和管理

5 以 Kubernetes 管理员身份使用解码后的 tkgs-cluster-kubeconfig-admin 文件连接到 Tanzu


Kubernetes 集群。

有两种选项可以实现此操作。

选项 描述

--kubeconfig <path\to\kubeconfig> 使用 --kubeconfig 标记和本地 kubeconfig 文件的路径。例如,假设 kubeconfig


文件位于运行命令的同一目录中:kubectl --kubeconfig tkgs-cluster-
kubeconfig-admin get nodes

KUBECONFIG 将 KUBECONFIG 环境变量设置为指向解码后的 kubeconfig 文件并运行


kubectl,例如 kubectl get nodes。

您应该会看到集群中的节点。例如:

kubectl --kubeconfig tkgs-cluster-kubeconfig-admin get nodes


NAME STATUS ROLES AGE VERSION
tkgs-cluster-1-control-plane-4ncm4 Ready master 23h v1.18.5+vmware.1
tkgs-cluster-1-control-plane-jj9gq Ready master 23h v1.18.5+vmware.1
tkgs-cluster-1-control-plane-r4hm6 Ready master 23h v1.18.5+vmware.1
tkgs-cluster-1-workers-6njk7-84dd7f48c6-nz2n8 Ready <none> 23h v1.18.5+vmware.1
tkgs-cluster-1-workers-6njk7-84dd7f48c6-rk9pk Ready <none> 23h v1.18.5+vmware.1
tkgs-cluster-1-workers-6njk7-84dd7f48c6-zzngh Ready <none> 23h v1.18.5+vmware.1

以系统用户身份使用私钥通过 SSH 连接到 Tanzu Kubernetes 集


群节点
可以 vmware-system-user 用户身份使用私钥通过 SSH 连接到 Tanzu Kubernetes 集群节点。

您可以以 vmware-system-user 用户身份通过 SSH 连接到任何 Tanzu Kubernetes 集群节点。包含 SSH


私钥的机密被命名为 CLUSTER-NAME-ssh。有关详细信息,请参见 Tanzu Kubernetes 集群密钥。

要通过 SSH 连接到 Tanzu Kubernetes 集群节点,请在 主管集群 上创建跳转盒 vSphere Pod。

注 此任务使用的 vSphere Pod 要求将 NSX-T Data Center 用于工作负载管理环境。如果使用的是 vDS


网络,请参见以系统用户身份使用密码通过 SSH 连接到 Tanzu Kubernetes 集群节点。

步骤

1 连接到 主管集群。

请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

2 创建名为 NAMESPACE 的环境变量,其值是置备了目标 Tanzu Kubernetes 集群的 vSphere


Namespace 的名称。

export NAMESPACE=VSPHERE-NAMESPACE

3 将上下文切换到置备了 vSphere Namespace 集群的 Tanzu Kubernetes。

kubectl config use-context $NAMESPACE

VMware, Inc. 99
vSphere with Tanzu 配置和管理

4 查看 TKGS-CLUSTER-NAME-ssh 密钥对象。

kubectl get secrets

5 使用以下 jumpbox.yaml 创建 vSphere Pod。将 namespace 和 secretName 的值替换为与您的环境相匹


配的值。

apiVersion: v1
kind: Pod
metadata:
name: jumpbox
namespace: YOUR-NAMESPACE #REPLACE YOUR-NAMESPACE
spec:
containers:
- image: "photon:3.0"
name: jumpbox
command: [ "/bin/bash", "-c", "--" ]
args: [ "yum install -y openssh-server; mkdir /root/.ssh; cp /root/ssh/ssh-privatekey /
root/.ssh/id_rsa; chmod 600 /root/.ssh/id_rsa; while true; do sleep 30; done;" ]
volumeMounts:
- mountPath: "/root/ssh"
name: ssh-key
readOnly: true
volumes:
- name: ssh-key
secret:
secretName: YOUR-CLUSTER-NAME-ssh #REPLACE YOUR-CLUSTER-NAME

6 通过应用 jumpbox.yaml 规范部署 pod。

kubectl apply -f jumpbox.yaml

pod/jumpbox created

7 验证 pod 是否正在运行。

kubectl get pods

NAME READY STATUS RESTARTS AGE


jumpbox 1/1 Running 0 3h9m

注 您也应会在 vSphere Namespace 中看到 vCenter 中的 jumpbox pod。

VMware, Inc. 100


vSphere with Tanzu 配置和管理

8 通过运行以下一组命令,创建具有目标集群节点的 IP 地址的环境变量。

a 获取目标虚拟机的名称。

kubectl get virtualmachines

b 创建环境变量 VMNAME,其值为目标节点的名称。

export VMNAME=NAME-OF-THE-VIRTUAL-MACHINE

c 创建环境变量 VMIP,其值为目标节点虚拟机的 IP 地址。

export VMIP=$(kubectl -n $NAMESPACE get virtualmachine/$VMNAME -o jsonpath='{.status.vmIp}')

9 运行以下命令,使用跳转盒通过 SSH 访问集群节点。

kubectl exec -it jumpbox /usr/bin/ssh vmware-system-user@$VMIP

10 通过输入 yes 来确认主机的真实性。

The authenticity of host '10.249.0.999 (10.249.0.999)' can't be established.


Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.249.0.999' (ECDSA) to the list of known hosts.
Welcome to Photon 3.0

11 确认您已经以 vmware-system-user 身份登录到目标节点。

例如,以下输出指示您已经以系统用户身份登录到控制平面节点。

vmware-system-user@tkgs-cluster-1-control-plane-66tbr [ ~ ]$

12 在节点上执行所需的操作。您可能需要使用 sudo 或 sudo su 执行某些操作,例如重新启动 kubelet。

13 完成后,键入 exit,注销 vSphere Pod 上的 SSH 会话。

以系统用户身份使用密码通过 SSH 连接到 Tanzu Kubernetes 集


群节点
可以 vmware-system-user 用户身份使用密码通过 SSH 连接到 Tanzu Kubernetes 集群节点。

可以 vmware-system-user 用户身份使用密码连接到集群节点。该密码将作为名为 CLUSTER-NAME-ssh-


password 的密码进行存储。密码在 .data.ssh-passwordkey 中以 base64 编码。可以通过 SSH 会话提供
密码。有关此密钥的详细信息,请参见 Tanzu Kubernetes 集群密钥。

注 这些说明假设您使用的是 Linux 主机。

VMware, Inc. 101


vSphere with Tanzu 配置和管理

步骤

1 连接到 主管集群。

以 vCenter Single Sign-On 用户的身份连接到 主管集群.

2 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 vSphere Namespace。

kubectl config use-context VSPHERE-NAMESPACE

3 获取目标集群节点的 IP 地址。

列出节点。

kubectl get virtualmachines

描述用于获取目标节点 IP 地址的节点。

kubectl describe virtualmachines

4 查看 TKGS-CLUSTER-NAME-ssh-password 密钥。

kubectl get secrets

5 获取目标集群的 ssh-passwordkey。

kubectl get secrets TKGS-CLUSTER-NAME-ssh-password -o yaml

将返回 ssh-passwordkey,例如如下值。

apiVersion: v1
data:
ssh-passwordkey: RU1pQllLTC9TRjVFV0RBcCtmd1zwOTROeURYSWNGeXNReXJhaXRBUllYaz0=

6 对 ssh-passwordkey 进行解码。

密钥采用 Base64 编码。对其进行解码:在 Linux 上,使用 base64 --decode(或 base64 -d);在


MacOS 上,使用 base64 --Decode(或 base64 -D);在 Windows 上,使用联机工具。

echo <ssh-passwordkey> | base64 --decode

7 以 vmware-system-user 用户身份通过 SSH 连接到目标集群节点。

ssh vmware-system-user@TKGS-CLUSTER-NODE-IP-ADDRESS

8 使用您解码的密码登录。

VMware, Inc. 102


vSphere with Tanzu 配置和管理

向开发人员授予 Tanzu Kubernetes 集群访问权限


开发人员是 Kubernetes 的目标用户。置备 Tanzu Kubernetes 集群后,可以使用 vCenter Single Sign-
On 身份验证向开发人员授予访问权限。

验证开发人员的身份
集群管理员可以向其他用户(如开发人员)授予集群访问权限。开发人员可以使用其用户帐户直接将 pod
到集群,也可以使用服务帐户间接部署。有关详细信息,请参见对 Tanzu Kubernetes 集群使用 POD 安
全策略。

n 对于用户帐户身份验证,Tanzu Kubernetes 集群支持 vCenter Single Sign-On 用户和组。用户或组


可以是 vCenter Server 的本地用户或组,也可以从受支持的目录服务器进行同步。

n 对于服务帐户身份验证,可以使用服务令牌。有关详细信息,请参见 Kubernetes 文档。

将开发人员用户添加到集群
要向开发人员授予集群访问权限,请执行以下操作:

1 为用户或组定义 Role 或 ClusterRole,并将其应用于集群。有关详细信息,请参见 Kubernetes 文


档。

2 为用户或组创建 RoleBinding 或 ClusterRoleBinding,并将其应用于集群。请参见下面的示例。

示例 RoleBinding
要向 vCenter Single Sign-On 用户或组授予访问权限,RoleBinding 中的主题必须包含 name 参数的以下
任一值。

表 6-1. 支持的用户和组字段
字段 描述

sso:USER-NAME@DOMAIN 例如,本地用户名,如 sso:joe@vsphere.local。

sso:GROUP-NAME@DOMAIN 例如,与 vCenter Server 集成的目录服务器中的组名称,如


sso:devs@ldap.example.com。

以下示例 RoleBinding 将名为 Joe 的 vCenter Single Sign-On 本地用户绑定到名为 edit 的默认
ClusterRole。此角色允许对命名空间(在本例中为 default 命名空间)中的大多数对象进行读/写访问。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: rolebinding-cluster-user-joe
namespace: default
roleRef:
kind: ClusterRole
name: edit #Default ClusterRole
apiGroup: rbac.authorization.k8s.io

VMware, Inc. 103


vSphere with Tanzu 配置和管理

subjects:
- kind: User
name: sso:joe@vsphere.local #sso:<username>@<domain>
apiGroup: rbac.authorization.k8s.io

VMware, Inc. 104


vSphere with Tanzu 中的存储
7
在 Tanzu Kubernetes 集群中运行的 vSphere Pod 和 pod 要求 Kubernetes 中可用的不同类型的存储对
象具有不同的存储特性。

vSphere with Tanzu 支持三种存储:临时虚拟磁盘、容器映像虚拟磁盘和持久卷虚拟磁盘。在 Tanzu


Kubernetes 集群中运行的 vSphere Pod 和 pod 可以挂载这三种类型的虚拟磁盘中的任何一种。

持久卷 持久卷
虚拟 虚拟
磁盘[0] 磁盘[N]

vSphere Pod
临时
虚拟
磁盘

容器 容器
映像 映像
虚拟 虚拟
磁盘[0] 磁盘[N]

临时虚拟磁盘
pod 在操作过程中,需要使用临时存储将 Kubernetes 对象存储为日志、emptyDir 卷和 ConfigMaps。
此临时存储或暂时存储在 pod 存在期间将始终存在。临时数据在容器重新启动后仍然存在,但一旦 pod
寿命终止,临时虚拟磁盘便会消失。

每个 pod 都有一个临时虚拟磁盘。在为 主管集群 配置存储时,vSphere 管理员使用存储策略定义所有临


时虚拟磁盘的数据存储位置。请参见将具有 NSX-T Data Center 的工作负载平台配置为网络堆栈。

VMware, Inc. 105


vSphere with Tanzu 配置和管理

容器映像虚拟磁盘
pod 中的容器使用包含待运行软件的映像。pod 会将其容器使用的映像挂载为映像虚拟磁盘。pod 的生命
周期结束后,映像虚拟磁盘将从 pod 中分离。

映像服务(ESXi 组件)负责从映像注册表中提取容器映像,并将其转换为虚拟磁盘以在 pod 内运行。

映像注册表

映像服务

vSphere Pod
容器映像

主管集群 ESXi 主机
(K8s 节点)

ESXi 可以缓存针对在 pod 中运行的容器下载的映像。使用此同一映像的后续 pod 将从本地缓存提取该映


像,而不是从外部容器注册表提取。

vSphere 管理员在为 主管集群 配置存储时指定映像缓存的数据存储位置。请参见将具有 NSX-T Data


Center 的工作负载平台配置为网络堆栈。

有关使用容器映像的信息,请参见使用 注册表服务 提供专用映像注册表。

持久存储虚拟磁盘
要为 Kubernetes 工作负载置备持久存储,vSphere with Tanzu 将与云原生存储 (CNS) 集成,云原生存
储是一个管理永久卷的 vCenter Server 组件。持久存储由 vSphere Pod 和 Tanzu Kubernetes 集群中
的 POD 使用。

有关详细信息以及 Tanzu Kubernetes 集群如何使用持久存储的详细信息,请参见 vSphere with Tanzu


如何与 vSphere 存储集成和第 8 章 在 vSphere with Tanzu 中运行 Tanzu Kubernetes 集群。

K8s 控制
vSphere Pod 层面虚拟机

ESXi 主机
(K8s 节点)
容器卷
CNS 卷服务

主管集群

VMware, Inc. 106


vSphere with Tanzu 配置和管理

要了解 vSphere with Tanzu 如何与持久存储配合使用,请熟悉以下基本概念。

持久卷

某些 Kubernetes 工作负载需要持久存储来存储独立于 Pod 的数据。为了提供持久存储,


Kubernetes 使用可保留其状态和数据的持久卷。即使删除或重新配置了 pod,这些持久卷也会继续
存在。在 vSphere with Tanzu 环境中,由数据存储上的第一类磁盘为持久卷对象提供支持。

主管集群 支持在 ReadWriteOnce 模式下动态置备卷,即可由单个节点挂载的卷。除了动态置备外,


Tanzu Kubernetes 集群还支持静态置备卷。

有关详细信息,请参见持久卷的动态置备和静态置备。

第一类磁盘

vSphere with Tanzu 使用虚拟磁盘的第一类磁盘 (FCD) 类型支持持久卷。第一类磁盘(也称为增强


型虚拟磁盘)是未与虚拟机关联的已命名虚拟磁盘。

第一类磁盘由 UUID 标识。该 UUID 为全局唯一,是 FCD 的主标识符。该 UUID 始终有效,即使其


FCD 被重定位或创建快照也是如此。

持久卷声明

DevOps 工程师可以创建持久卷声明以请求持久存储资源。请求会动态地置备持久卷对象和匹配的虚
拟磁盘。在 vSphere Client 中,持久卷声明显示为可由 vSphere 管理员监控的 FCD 虚拟磁盘。

此声明将绑定到持久卷。工作负载可以使用该声明挂载持久卷和访问存储。

DevOps 工程师删除此声明时,也将删除相应的持久卷对象和已置备的虚拟磁盘。

存储类

Kubernetes 使用存储类描述为持久卷提供支持的存储的要求。DevOps 工程师可以在其持久卷声明规


范中包含特定的存储类,以请求该类描述的存储类型。

持久存储工作流
在 vSphere with Tanzu 中动态置备持久存储的工作流包括以下连续操作。

操作 描述

vSphere 管理员可为 DevOps 团队提供持久存储资源。 vSphere 管理员可创建用于描述不同存储要求和服务类的虚拟机


存储策略。然后,他们可以将存储策略分配给 主管命名空间。

vSphere with Tanzu 将创建与分配给 主管命名空间 的存储策略 存储类将自动显示在 Kubernetes 环境中,并可供 DevOps 团
相匹配的存储类。 队使用。如果 vSphere 管理员将多个存储策略分配给 主管命名
空间,则会为每个存储策略创建一个单独的存储类。
如果使用 Tanzu Kubernetes Grid 服务 置备 Tanzu
Kubernetes 集群,则每个 Tanzu Kubernetes 集群将从置备该
集群的 主管命名空间 中继承存储类。

DevOps 工程师使用存储类为工作负载请求持久存储资源。 该请求采用引用特定存储类的持久卷声明形式。

VMware, Inc. 107


vSphere with Tanzu 配置和管理

操作 描述

vSphere with Tanzu 会为 pod 创建持久卷对象和匹配的持久虚 vSphere with Tanzu 会将虚拟磁盘放入满足原始存储策略及其


拟磁盘。 匹配的存储类中所指定要求的数据存储中。在 pod 启动后,虚拟
磁盘将挂载到该 pod。

vSphere 管理员在 vSphere with Tanzu 环境中监控持久卷。 vSphere 管理员使用 vSphere Client 监控持久卷及其支持虚拟
磁盘。他们还可以监控持久卷的存储合规性和运行状况。

主管集群

vSphere Pod

持久卷声明 存储类

持久卷

vSphere 存储

FCD 虚拟磁盘 存储策略

观看此视频,了解 vSphere with Tanzu 中的持久存储。


使用 Kubernetes 的 vSphere 7.0 中的持久存储
(http://link.brightcove.com/services/player/bcpid2296383276001?
bctid=ref:video_persistent_storage vs7_kubernetes)

vSphere 管理员的存储管理任务
通常,vSphere with Tanzu 中的存储管理任务包括以下各项。作为 vSphere 管理员,您可以使用
vSphere Client 执行这些任务。

n 对虚拟机存储策略执行生命周期操作。

VMware, Inc. 108


vSphere with Tanzu 配置和管理

在启用 主管集群 并配置命名空间之前,请为您的 Kubernetes 环境需要的所有三种存储(即临时存


储、容器映像存储和持久存储)创建存储策略。存储策略将基于 DevOps 工程师向您传达的存储要
求。请参见为 vSphere with Tanzu 创建存储策略。

注 在命名空间中运行具有相应存储类的持久卷声明时,请勿从 vCenter Server 或 主管命名空间 中


删除存储策略。此建议也适用于 Tanzu Kubernetes 集群。如果 Tanzu Kubernetes 集群 POD 正将
存储类用于其存储,请勿删除存储策略。

n 通过将存储策略分配给 主管集群 和命名空间以及设置存储限制,为 DevOps 工程师提供存储资源。


有关更改存储策略分配的信息,请参见更改 主管集群上的存储设置和更改命名空间上的存储设置。有
关设置限制的信息,请参见针对命名空间上的 Kubernetes 对象配置限制。

n 在 vSphere Client 中监控 Kubernetes 对象及其存储策略合规性。请参见在 vSphere Client 中监控


持久卷。

DevOps 工程师的存储管理任务
在 vSphere with Tanzu 环境中,DevOps 工程师可以是 Kubernetes 开发人员和应用程序所有者、
Kubernetes 管理员,或将两者的功能组合在一起。通常,DevOps 工程师使用 kubectl 执行任务。

n 管理存储类。请参见显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类。

n 部署和管理有状态应用程序。请参见为有状态应用程序置备动态持久卷。

n 对持久卷执行生命周期操作。Tanzu Kubernetes 持久卷声明示例。

本章讨论了以下主题:

n vSphere with Tanzu 如何与 vSphere 存储集成

n vSphere CNS-CSI 和准虚拟 CSI 支持的功能

n vSphere with Tanzu 中的存储权限

n 持久卷的动态置备和静态置备

n 更改 主管集群上的存储设置

n 更改命名空间上的存储设置

n 显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类

n 为有状态应用程序置备动态持久卷

n 为有状态应用程序置备静态持久卷

n 扩展持久卷

n 监控 主管命名空间 或 Tanzu Kubernetes 集群中的卷运行状况

n 在 vSphere Client 中监控持久卷

n 在 vSphere with Tanzu 中使用持久服务

VMware, Inc. 109


vSphere with Tanzu 配置和管理

vSphere with Tanzu 如何与 vSphere 存储集成


vSphere with Tanzu 使用多个组件与 vSphere 存储进行集成。

vCenter Server 上的云原生存储 (CNS)

CNS 组件驻留在 vCenter Server 中。它是 vCenter Server 管理的扩展,用于执行持久卷的置备和生


命周期操作。

置备容器卷时,该组件会与 vSphere 第一类磁盘功能进行交互,以创建支持卷的虚拟磁盘。此外,


CNS 服务器组件与基于存储策略的管理进行通信,以保证磁盘的所需服务级别。

CNS 还会执行查询操作,以便允许 vSphere 管理员通过 vCenter Server 管理和监控持久卷及其备用


存储对象。

第一类磁盘 (FCD)

也称为改进的虚拟磁盘。它是与虚拟机无关的已命名虚拟磁盘。这些磁盘驻留在 VMFS、NFS 或
vSAN 数据存储上,并且支持 ReadWriteOnce 持久卷。

FCD 技术可在虚拟机或 Pod 的生命周期之外执行与持久卷相关的生命周期操作。

基于存储策略的管理

基于存储策略的管理是一种 vCenter Server 服务,它支持根据存储策略中所述的存储要求置备持久卷


及其备用虚拟磁盘。置备后,服务会监控具有存储策略特性的卷的合规性。

vSphere CNS-CSI

vSphere CNS-CSI 组件符合容器存储接口 (CSI) 规范,这是一种旨在提供供容器 Orchestrator(如


Kubernetes)用于置备持久存储的接口的行业标准。CNS-CSI 驱动程序在 主管集群 中运行,并将
vSphere 存储连接到 主管命名空间 中的 Kubernetes 环境。vSphere CNS-CSI 直接与 CNS 控制平
面进行通信,处理来自 vSphere Pod 和在命名空间的 Tanzu Kubernetes 集群中运行的 pod 的所有
存储置备请求。

准虚拟 CSI (pvCSI)

pvCSI 是针对 Tanzu Kubernetes 集群修改的 vSphere CNS-CSI 驱动程序版本。pvCSI 驻留在


Tanzu Kubernetes 集群中,负责来自 Tanzu Kubernetes 集群的所有存储相关请求。这些请求将传
送到 CNS-CSI,随后将传播到 vCenter Server 中的 CNS。因此,pvCSI 不会直接与 CNS 组件通
信,而是依赖于 CNS-CSI 进行任何存储置备操作。

与 CNS-CSI 不同,pvCSI 不需要基础架构凭据。它在 主管命名空间 中配置了服务帐户。

VMware, Inc. 110


vSphere with Tanzu 配置和管理

用户命名空间

Tanzu Kubernetes 集群 vSphere Pod

Kubernetes
持久卷 存储类

pvCSI

主管集群 CNS-CSI

CNS

vCenter Server SPBM 策略

FCD
虚拟磁盘
vSAN/VMFS/NFS 数据存储

ESXi ESXi ESXi

下面说明了 DevOps 工程师在 Tanzu Kubernetes 集群中执行存储相关操作(例如,创建持久卷声明


(PVC))时不同组件的交互方式。

DevOps 工程师在 Tanzu Kubernetes 集群上使用命令行创建 PVC。此操作会在主管集群上生成匹配的


PVC,并触发 CNS-CSI。CNS-CSI 将调用 CNS 创建卷 API。

VMware, Inc. 111


vSphere with Tanzu 配置和管理

Tanzu Kubernetes 主管集群 vSphere


集群

CNS-CSI

持久 持久
卷 卷 卷
声明 声明

pvCSI CNS

成功创建卷后,该操作将通过主管集群传播回 Tanzu Kubernetes 集群。此传播的结果是,用户可以在主


管集群中看到持久卷和处于绑定状态的持久卷声明。此外,还会在 Tanzu Kubernetes 集群中看到持久卷
和处于绑定状态的持久卷声明。

vSphere CNS-CSI 和准虚拟 CSI 支持的功能


在 主管集群 中运行的 vSphere CNS-CSI 驱动程序和 pvCSI 驱动程序(针对 Tanzu Kubernetes 集群修
改的 CSI 版本)支持多个 vSphere 和 Kubernetes 存储功能。但是,存在一定的限制。

支持的功能 主管集群 中的 vSphere CNS-CSI Tanzu Kubernetes 集群中的 pvCSI

vSphere Client 中的 CNS 支持 是 是

vSphere Client 中的增强型对象运行状况 是(仅限 vSAN) 是(仅限 vSAN)

动态块持久卷(ReadWriteOnce 访问模 是 是
式)

动态文件持久卷(ReadWriteMany 访问 否 否
模式)

vSphere 数据存储 VMFS/NFS/vSAN/vVol VMFS/NFS/vSAN/vVol

静态持久卷 否 是

加密 否 否

脱机卷增加 否 是

卷拓扑和区域 否 否

Kubernetes 多个控制平面实例 是 是

WaitForConsumerFirst 否 否

VolumeHealth 是 是

VMware, Inc. 112


vSphere with Tanzu 配置和管理

vSphere with Tanzu 中的存储权限


vSphere with Tanzu 提供了一个样本角色,即工作负载存储主管,该角色包含一组用于存储操作的特权。
您可以通过克隆此角色创建类似的角色。

特权名称 描述 要求

Cns.可搜索 允许存储管理员查看云原生存储 UI。 根 vCenter Server

数据存储.分配空间 允许在数据存储上为虚拟机、快照、克隆 持久性卷所在的共享数据存储


数据存储.低级别文件操作 或虚拟磁盘分配空间。
允许在数据存储浏览器中执行读取、写
入、删除和重命名操作。

ESX Agent Manager.修改 允许对代理虚拟机进行修改,如关闭电源 vSphere Pod


或删除虚拟机。

资源.将虚拟机分配给资源池 允许将虚拟机分配到资源池。 资源池

配置文件驱动的存储.配置文件驱动的存储 允许查看定义的存储策略。 根 vCenter Server


视图

虚拟机.更改配置.添加现有磁盘 允许创建和删除虚拟机。允许配置虚拟机 vSphere Pod


虚拟机.更改配置.添加新磁盘 选项和设备。
虚拟机.更改配置.添加或移除设备
虚拟机.更改配置.更改设置
虚拟机.更改配置.移除磁盘
虚拟机.编辑清单.新建
虚拟机.编辑清单.移除

持久卷的动态置备和静态置备
持久卷通常用于有状态应用程序。vSphere with Tanzu 支持对持久卷进行动态置备和静态置备。

动态置备

执行动态卷置备时,不需要预置备存储,可以按需创建持久卷。DevOps 工程师会发出引用命名空间
中可用存储类的持久卷声明。vSphere with Tanzu 会自动置备相应的持久卷和支持虚拟磁盘。

主管集群 和 Tanzu Kubernetes 集群都支持动态置备。

有关如何为有状态应用程序动态创建持久卷的示例,请参见为有状态应用程序置备动态持久卷。

静态置备

执行静态置备时,可以使用现有存储对象,并将其提供给集群。

要置备静态持久卷,请手动创建虚拟磁盘以用作持久卷的支持存储。之后,创建包含支持存储详细信息
的持久卷。持久卷声明发出后,Kubernetes 将在系统中选择一个可用的持久卷,并将其分配给工作负
载。

仅 Tanzu Kubernetes 集群支持静态置备。

有关如何置备静态持久卷的示例,请参见为有状态应用程序置备静态持久卷。

VMware, Inc. 113


vSphere with Tanzu 配置和管理

有关 Kubernetes 中持久卷的详细信息,请参阅 Kubernetes 文档。

有关在 vSphere 存储和持久卷之间进行交互的信息,请参见第 7 章 vSphere with Tanzu 中的存储。

更改 主管集群上的存储设置
分配给 主管集群的存储策略可管理控制层面虚拟机、vSphere 和容器映像缓存等对象如何放置在 vSphere
Pod 存储环境中的数据存储中。作为 vSphere 管理员,您通常可以在启用主管集群时配置存储策略。如果
在执行 主管集群初始配置后需要对存储策略分配进行任何更改,请执行此任务。

对存储设置所做的更改仅适用于新对象。

步骤

1 在 vSphere Client 中,导航到已启用 vSphere with Tanzu 的主机集群。

2 依次单击配置选项卡和命名空间下方的存储。

3 更改以下项目的存储策略分配。

选项 描述

控制层面节点 选择用于放置控制层面虚拟机的存储策略。

Pod 临时磁盘 选择用于放置 vSphere Pod 的存储策略。

容器映像缓存 选择用于放置容器映像缓存的存储策略。

更改命名空间上的存储设置
vSphere 管理员分配给 主管集群中的命名空间的存储策略可控制如何将在 vSphere 数据存储中放置持久
卷和 Tanzu Kubernetes 集群节点。与持久卷相对应的持久卷声明可以来自 vSphere Pod 或 Tanzu
Kubernetes 集群。您可以更改原始存储策略分配。

前提条件

从 vCenter Server 或主管命名空间中删除存储策略或更改存储策略分配之前,请确保命名空间中没有运行


具有对应存储类的持久卷声明。此外,还要确保没有 Tanzu Kubernetes 集群使用存储类。

步骤

1 在 vSphere Client 中,导航到命名空间。

a 从 vSphere Client 主菜单中,选择工作负载管理。

b 选择命名空间。

2 单击存储选项卡,然后单击存储策略。

3 单击编辑图标,以更改存储策略分配。

VMware, Inc. 114


vSphere with Tanzu 配置和管理

显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类


vSphere 管理员创建存储策略并将其分配给 主管命名空间后,该存储策略将在命名空间和任何可用的
Tanzu Kubernetes 集群中显示为匹配的 Kubernetes 存储类。作为 DevOps 工程师,您可以验证存储类
是否可用。

能否运行命令取决于您的权限。

前提条件

确保 vSphere 管理员已创建适当的存储策略并将该策略分配给 主管命名空间。

步骤

1 使用以下命令之一验证存储类是否可用。

n kubectl get storageclass

注 具有管理员特权的用户才能使用此命令。

您会获得类似以下内容的输出。存储类的名称与 vSphere 端的存储策略名称相匹配。

NAME PROVISIONER AGE


silver csi.vsphere.vmware.com 2d
gold csi.vsphere.vmware.com 1d

n kubectl describe namespace namespace_name

在输出中,存储类的名称显示为
storageclass_name.storageclass.storage.k8s.io/requests.storage 参数的一部分。例
如:

–––––––––––––––––
Name: namespace_name
Resource Used Hard
-------- --- ---
silver.storageclass.storage.k8s.io/requests.storage 1Gi 9223372036854775807
gold.storageclass.storage.k8s.io/requests.storage 0 9223372036854775807

2 要检查命名空间上的可用存储空间量,请运行以下命令。

kubectl describe resourcequotas -namespace namespace

您会获得类似以下内容的输出。

Name: ns-my-namespace
Namespace: ns-my-namespace
Resource Used Hard
-------- ---- ----
requests.storage 0 200Gi

VMware, Inc. 115


vSphere with Tanzu 配置和管理

为有状态应用程序置备动态持久卷
有状态应用程序(例如数据库)在会话之间保存数据,并需要持久存储来存储数据。保留的数据称为应用
程序的状态。之后,您可以检索数据,并在下一个会话中使用该数据。Kubernetes 以能够保留其状态和
数据的对象形式提供持久卷。

在 vSphere 环境中,持久卷对象由位于数据存储上的虚拟磁盘提供支持。数据存储由存储策略表示。
vSphere 管理员创建存储策略(例如 gold)并将其分配给 主管集群 中的命名空间后,该存储策略将在 主
管命名空间 和任何可用的 Tanzu Kubernetes 集群中显示为匹配的 Kubernetes 存储类。

作为 DevOps 工程师,您可以在持久卷声明规范中使用存储类。然后,可以部署使用持久卷声明中存储的
应用程序。在此示例中,应用程序的持久卷是动态创建的。

前提条件

确保 vSphere 管理员已创建适当的存储策略并将该策略分配给命名空间。

步骤

1 在 vSphere Kubernetes 环境中访问您的命名空间。

2 验证存储类是否可用。

请参见显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类。

VMware, Inc. 116


vSphere with Tanzu 配置和管理

3 创建持久卷声明。

a 创建包含持久卷声明配置的 YAML 文件。

在此示例中,该文件引用 gold 存储类。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: gold
resources:
requests:
storage: 3Gi

b 将持久卷声明应用于 Kubernetes 集群。

kubectl apply -f pvc_name.yaml

此命令将使用满足声明的存储要求的备用虚拟磁盘动态地创建 Kubernetes 持久卷和 vSphere


卷。

c 检查持久卷声明的状态。

kubectl get pvc my-pvc

输出显示该卷已绑定到持久卷声明。

NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE


my-pvc Bound my-pvc 2Gi RWO gold 30s

VMware, Inc. 117


vSphere with Tanzu 配置和管理

4 创建挂载持久卷的 pod。

a 创建包含持久卷的 YAML 文件。

该文件包含以下参数。

...
volumes:
- name: my-pvc
persistentVolumeClaim:
claimName: my-pvc

b 从该 YAML 文件部署 pod。

kubectl create -f pv_pod_name.yaml

c 验证是否已创建 pod。

kubectl get pod

NAME READY STATUS RESTARTS AGE


pod_name 1/1 Ready 0 40s

结果

您配置的 pod 使用持久卷声明中描述的持久存储。

后续步骤

要监控持久卷的运行状况,请参见监控 主管命名空间 或 Tanzu Kubernetes 集群中的卷运行状况。要在


vSphere Client 中查看和监控持久卷,请参见在 vSphere Client 中监控持久卷。

为有状态应用程序置备静态持久卷
要置备静态持久卷,请手动创建虚拟磁盘以用作持久卷的支持存储。之后,创建包含支持存储详细信息的
持久卷。Pod 可通过持久卷声明请求此存储。

仅 Tanzu Kubernetes 集群支持静态置备。

步骤

1 创建虚拟磁盘。

a 登录到有权访问持久卷将驻留的数据存储的 ESXi 主机。

b 将目录更改为该数据存储,例如 vsanDatstore,然后使用 vmkfstools 命令创建虚拟磁盘文件。

$ cd /vmfs/volumes/vsanDatastore/demo/
$ vmkfstools -c 2G demo.vmdk

VMware, Inc. 118


vSphere with Tanzu 配置和管理

2 创建持久卷。

a 在 vSphere Kubernetes 环境中访问您的命名空间。

b 使用引用虚拟磁盘文件的 YAML 清单定义持久卷。

例如,创建一个名为 demo-pv.yaml 的包含以下内容的文件。

apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-pv
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
vsphereVolume:
volumePath: "[vsanDatastore] demo/demo.vmdk"
fsType: ext4

c 部署持久卷。

$ kubectl create -f demo-pv.yaml


persistentvolume/demo-pv created

d 验证是否已创建持久卷。

$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS
REASON AGE
demo-pv 2Gi RWO Retain
Available 3s

3 定义持久卷声明以匹配持久卷。

可参考以下 YAML 清单示例。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: demo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi

VMware, Inc. 119


vSphere with Tanzu 配置和管理

4 定义挂载持久卷的部署。

以下示例 YAML 清单将引用 demo-pvc 持久卷声明。

apiVersion: v1
kind: Pod
metadata:
name: demo-pod
.....
.....
volumes:
- name: demo-vol
persistentVolumeClaim:
claimName: demo-pvc

扩展持久卷
在 Tanzu Kubernetes 集群中,不管任何新的或现有的持久块卷,都可以在它处于脱机状态或未连接到节
点时对它进行扩展。

默认情况下,vSphere with Tanzu 环境中显示的所有存储类都将 allowVolumeExpansion 设置为 true。使


用此参数可以修改卷的大小。

步骤

1 使用可用的默认存储类创建持久卷声明 (PVC)。

a 使用以下 YAML 清单作为示例来定义 PVC。

在该示例中,所请求存储的大小为 1 Gi。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-block-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: example-block-sc

b 将该 PVC 应用到 Kubernetes 集群。

kubectl apply -f example-block-pvc.yaml

VMware, Inc. 120


vSphere with Tanzu 配置和管理

2 修补 PVC 以增加其大小。

例如,将大小增加到 2 Gi。

注 在更改大小之前,请确保 PVC 已绑定且未连接到 pod。仅支持脱机卷扩展。

kubectl patch pvc example-block-pvc -p '{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}'

此操作触发与该 PVC 关联的卷中的扩展。

3 确认卷大小已增加。

kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS
CLAIM STORAGECLASS REASON AGE
pvc-9e9a325d-ee1c-11e9-a223-005056ad1fc1 2Gi RWO Delete Bound default/
example-block-pvc example-block-sc 6m44s

注 在 pod 使用 PVC 之前,PVC 的大小保持不变。

以下示例显示 PVC 大小未更改。如果您描述该 PVC,可以在该 PVC 上看到应用了


FilesystemResizePending 条件。

kubectl get pvc


NAME STATUS VOLUME CAPACITY ACCESS MODES
STORAGECLASS AGE
example-block-pvc Bound pvc-9e9a325d-ee1c-11e9-a223-005056ad1fc1 1Gi RWO
example-block-sc 6m57s

4 创建 pod 以使用 PVC。

当 pod 使用 PVC 时,文件系统将得到扩展。

5 确认 PVC 的大小已修改。

kubectl get pvc


NAME STATUS VOLUME CAPACITY ACCESS MODES
STORAGECLASS AGE
example-block-pvc Bound pvc-24114458-9753-428e-9c90-9f568cb25788 2Gi RWO
example-block-sc 2m12s

FilesystemResizePending 条件已从该 PVC 中移除。卷扩展完成。

监控 主管命名空间 或 Tanzu Kubernetes 集群中的卷运行状况


作为 DevOps 工程师,您可以检查处于绑定状态的持久卷的运行状况。

对于处于绑定状态的每个持久卷,都会在 Annotations: volumehealth.storage.kubernetes.io/


messages: 字段中显示运行状况。存在两个可能的运行状况值。

VMware, Inc. 121


vSphere with Tanzu 配置和管理

运行状况 描述

可访问 持久卷可访问且可供使用。

不可访问 持久卷不可访问且无法使用。如果连接到数据存储的主机无法访问存储持久卷的数据存储,则该持久卷将变得不可访问。

要在 vSphere Client 中监控卷运行状况,请参见在 vSphere Client 中监控持久卷。

步骤

1 在 vSphere Kubernetes 环境中访问您的命名空间。

2 创建持久卷声明。

a 创建包含持久卷声明配置的 YAML 文件。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: gold
resources:
requests:
storage: 2Gi

b 将持久卷声明应用于 Kubernetes 集群。

kubectl apply -f pvc_name.yaml

此命令将创建具有满足声明存储要求的支持虚拟磁盘的 Kubernetes 持久卷和 vSphere 卷。

c 检查持久卷声明是否已绑定到卷。

kubectl get pvc my-pvc

输出将显示持久卷声明和卷已处于绑定状态。

NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE


my-pvc Bound my-pvc 2Gi RWO gold 30s

3 检查卷的运行状况。

kubectl describe pvc my-pvc

在以下示例输出中,volumehealth.storage.kubernetes.io/messages 字段将运行状况显示为可
访问。

Name: my-pvc
Namespace: test-ns
StorageClass: gold
Status: Bound

VMware, Inc. 122


vSphere with Tanzu 配置和管理

Volume: my-pvc
Labels: <none>
Annotations: pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
volume.beta.kubernetes.io/storage-provisioner: csi.vsphere.vmware.com
volumehealth.storage.kubernetes.io/messages: accessible
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 2Gi
Access Modes: RWO
VolumeMode: Filesystem

在 vSphere Client 中监控持久卷


当 DevOps 工程师使用持久卷声明部署有状态应用程序时,vSphere with Tanzu 会创建持久卷对象和匹
配的持久虚拟磁盘。作为 vSphere 管理员,您可以在 vSphere Client 中查看持久卷的详细信息。此外,
还可以监控持久卷的存储合规性和运行状况。

步骤

1 在 vSphere Client 中,导航到具有持久卷的命名空间。

a 从 vSphere Client 主菜单中,选择工作负载管理。

b 单击命名空间。

2 单击存储选项卡,然后单击持久卷声明。

vSphere Client 将列出命名空间中可用的所有持久卷声明对象和相应的卷。

3 要查看所选持久卷声明的详细信息,请在持久卷名称列中单击该卷的名称。

VMware, Inc. 123


vSphere with Tanzu 配置和管理

4 在容器卷页面上,检查卷的运行状况和存储策略合规性。

a 单击详细信息图标,然后在基础知识和 Kubernetes 对象选项卡之间切换,以查看 Kubernetes


持久卷的其他信息。

要使用 kubectl 命令监控卷的运行状况,请参见监控 主管命名空间 或 Tanzu Kubernetes 集群


中的卷运行状况。

b 验证卷的运行状况。

运行状况 描述

可访问 持久卷可访问且可供使用。

不可访问 持久卷不可访问且无法使用。如果连接到数据存储的主机无法访问存储持久卷的数据存储,则该持久卷将变得
不可访问。

VMware, Inc. 124


vSphere with Tanzu 配置和管理

c 验证存储合规性状态。

可以在合规性状态列中看到以下项之一。

合规性状态 描述

合规 支持卷的虚拟磁盘所在的数据存储具有策略所需的存储功能。

已过期 该状态表示策略已进行编辑,但新的存储要求尚未传递到数据存储。要传递更改,请将策略重新应用于已过
期的卷。

不合规 数据存储支持指定的存储要求,但目前无法符合存储策略。例如,当数据存储的物理资源不可用时,状态可
能变为“不合规”。您可以通过更改主机集群的物理配置将数据存储变为合规,例如向集群添加主机或磁
盘。如果其他资源符合存储策略,状态将变为“合规”。

不适用 存储策略引用不受数据存储支持的数据存储功能。

d 如果合规性状态为“已过期”,请选择卷,然后单击重新应用策略。

状态将更改为“合规”。

在 vSphere with Tanzu 中使用持久服务


在 7.0 Update 1 版本中,vSphere with Tanzu 提供了 vSAN 数据持久性平台。vSAN 数据持久性平台为
软件技术合作伙伴提供了一个与 VMware 基础架构相集成的框架。每个合作伙伴都必须为 VMware 客户
开发自己的插件,这样才能获得 vSAN 数据持久性平台的优势。在上面运行的合作伙伴解决方案正常运行
之前,平台将不会正常运行。

使用平台时,第三方可以构建与 vSphere 集成的插件,并提供持久应用程序服务,如对象存储、非关系数


据库等。当第三方技术可用时,vSphere with Tanzu 可以部署持久服务。这些服务使用 vSAN 存储来实
现数据持久性,并使用成本和性能优化的 vSAN 数据路径在 vSphere 上以最佳方式运行。此外,这些服
务还可以利用 vSphere 安全性和高可用性。

vSphere 无共享存储
通常,大多数持久服务采用无共享架构 (SNA)。它们使用非复制的本地存储,并提供自己的存储复制、压
缩和其他数据操作。因此,当底层存储执行相同的操作时,不会给这些服务带来优势。

为避免重复操作,vSAN 数据持久性平台提供了两个具有优化数据路径的 vSAN 解决方案。持久服务可以


在具有 SNA 存储策略的 vSAN 上运行,也可以在称为 vSAN Direct 的多半为原始本地存储的存储上运
行。

VMware, Inc. 125


vSphere with Tanzu 配置和管理

云原生应用 传统应用

对象存储 非关系数据库 传统数据库

vSAN 数据持久性平台

vSphere with Tanzu

vSAN vSAN-Direct

何时使用具有 SNA 的 vSAN 或 vSAN Direct?


当您希望云原生有状态应用程序与其他常规虚拟机或 Kubernetes 工作负载共享物理基础架构时,请使用
具有 SNA 的 vSAN。每个工作负载都可以定义自己的存储策略,并且可以从单个集群中充分利用这两个领
域。如果要为无共享云原生服务创建专用硬件集群,请使用 vSAN Direct。

有关设置 vSAN 存储的信息,请参见《管理 VMware vSAN》。要设置 vSAN Direct,请参见为


vSphere with Tanzu 设置 vSAN Direct。

为 vSphere with Tanzu 设置 vSAN Direct


作为 vSphere 管理员,请设置要与 vSAN 数据持久性平台结合使用的 vSAN Direct。使用 ESXi 主机本地
的空闲存储设备。

注 只有 vSAN 数据持久性平台可以使用 vSAN Direct 存储。vSAN 数据持久性平台为软件技术合作伙伴


提供了一个与 VMware 基础架构相集成的框架。每个合作伙伴都必须为 VMware 客户开发自己的插件,
这样才能获得 vSAN 数据持久性平台的优势。在上面运行的合作伙伴解决方案正常运行之前,平台将不会
正常运行。

步骤

1 在 vSphere Client 中,导航到 vSAN 集群。

2 单击配置选项卡。

3 在“vSAN”下,单击磁盘管理。

4 单击声明未使用的磁盘。

VMware, Inc. 126


vSphere with Tanzu 配置和管理

5 选择要声明的设备,然后从针对以下项声明列中选择 vSAN Direct。

6 单击创建。

对于您声明的每个设备,vSAN Direct 都会创建一个新的数据存储。

7 单击数据存储选项卡以显示集群中的所有 vSAN Direct 数据存储。

VMware, Inc. 127


在 vSphere with Tanzu 中运行
Tanzu Kubernetes 集群 8
可以通过使用 Tanzu Kubernetes Grid 服务 声明性 API 置备 Tanzu Kubernetes 集群,在 vSphere 上
部署基于容器的工作负载。Tanzu Kubernetes Grid 服务 提供与 vSphere 的原生集成以及 Kubernetes
集群的完整生命周期管理。Tanzu Kubernetes 集群包括对身份验证、存储、网络和云环境运维的支持。
可以使用熟悉的界面(包括 vSphere Client 和 Kubernetes CLI)与该服务和置备的集群进行交互。

本章讨论了以下主题:

n 创建 Tanzu Kubernetes 集群

n 在气隙环境中置备 Tanzu Kubernetes 集群

n 将工作负载部署到 Tanzu Kubernetes 集群

n 操作 Tanzu Kubernetes 集群

创建 Tanzu Kubernetes 集群
可以通过 kubectl CLI 和使用 YAML 定义的集群规范调用 Tanzu Kubernetes Grid 服务 声明性 API 来创
建 Tanzu Kubernetes 集群。

用于创建 Tanzu Kubernetes 集群的工作流


通过调用 Tanzu Kubernetes Grid 服务 声明性 API 来置备 Tanzu Kubernetes 集群。置备集群后,可以
使用 kubectl 对其进行管理并在其中部署工作负载。

该工作流简要地概述了置备过程。每个步骤都包含链接,可用于了解有关特定任务的详细信息。

前提条件

与您的 vSphere 管理员确认是否已完成以下必备任务。

n 已为您的数据中心启用 vSphere with Tanzu(工作负载管理)。请参见第 4 章 启用工作负载管理。

n 已创建并配置 主管命名空间。请参见创建和配置 vSphere 命名空间。需要完成以下各项:

n 已为一个或多个 DevOps 工程师添加编辑权限,以便能够使用 vCenter Single Sign-On 凭据访问


主管集群。

n 已定义基于标记的存储策略并将其与 主管命名空间 相关联。请参见第 7 章 vSphere with Tanzu


中的存储。

n 根据需要验证和调整容量与使用配额。

VMware, Inc. 128


vSphere with Tanzu 配置和管理

n 已在共享数据存储上创建已订阅内容库。请参见为 Tanzu Kubernetes 集群创建已订阅内容库。

步骤

1 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具。请参见下载并安装 适用于 vSphere 的


Kubernetes CLI 工具。

2 使用 kubectl 的 vSphere 插件,对 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户


的身份连接到 主管集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

3 使用 kubectl,将上下文切换到计划置备 Tanzu Kubernetes 集群的 主管命名空间。

kubectl config get-contexts

kubectl config use-context SUPERVISOR-NAMESPACE

例如:

kubectl config use-context tkgs-ns-1

4 列出并描述可用的虚拟机类别。请参见 Tanzu Kubernetes 集群的虚拟机类类型。

kubectl get virtualmachineclasses

kubectl describe virtualmachineclasses

5 通过描述命名空间获取可用的默认存储类。

kubectl describe namespace SUPERVISOR-NAMESPACE

6 通过运行以下任一命令,列出可用的 Tanzu Kubernetes 软件版本。

kubectl get tanzukubernetesreleases

kubectl get virtualmachineimages

注 请参阅 Tanzu Kubernetes 版本列表,了解兼容性。请参见支持的更新路径。

7 构建用于置备 Tanzu Kubernetes 集群的 YAML 文件。

a 从一个示例集群 YAML 文件开始。请参见用于置备 Tanzu Kubernetes 集群的示例 YAML 文件。

b 使用从前面命令的输出中收集的信息填充 YAML。

c 如有必要,请参考集群配置参数的完整列表。请参见 Tanzu Kubernetes 集群的配置参数。

d 将文件保存为 tkgs-cluster-1.yaml 或类似格式。

VMware, Inc. 129


vSphere with Tanzu 配置和管理

例如,以下 YAML 文件使用所有可用的集群默认设置置备最小 Tanzu Kubernetes 集群:

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
name: tkgs-cluster-1
namespace: tkgs-ns-1
spec:
distribution:
version: v1.18.5
topology:
controlPlane:
count: 1
class: best-effort-small
storageClass: vwk-storage-policy
workers:
count: 3
class: best-effort-small
storageClass: vwk-storage-policy

8 通过运行以下 kubectl 命令置备集群。请参见置备 Tanzu Kubernetes 集群。

kubectl apply -f CLUSTER-NAME.yaml

例如:

kubectl apply -f tkgs-cluster-1.yaml


tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 created

9 使用 kubectl 监控集群节点的部署。请参见使用 kubectl 监控 Tanzu Kubernetes 集群状态。

kubectl get tanzukubernetesclusters


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-2 1 3 v1.18.5+vmware.1-tkg.1.c40d30d 7m59s running

10 使用 vSphere Client 监控集群节点的部署。请参见使用 vSphere Client 监控 Tanzu Kubernetes 集


群状态。

11 使用 kubectl 的 vSphere 插件,登录到集群。请参见以 vCenter Single Sign-On 用户身份连接到


Tanzu Kubernetes 集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME


--tanzu-kubernetes-cluster-name CLUSTER-NAME --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME

VMware, Inc. 130


vSphere with Tanzu 配置和管理

12 使用以下 kubectl 命令验证集群置备。

kubectl cluster-info

kubectl get nodes

kubectl get namespaces

kubectl api-resources

13 部署示例工作负载并验证集群创建。请参见将工作负载部署到 Tanzu Kubernetes 集群。

注 Tanzu Kubernetes 集群已启用 pod 安全策略。根据工作负载和用户,您可能需要创建相应的


RoleBinding 或自定义 PodSecurityPolicy。请参见对 Tanzu Kubernetes 集群使用 POD 安全策
略。

为 Tanzu Kubernetes 集群创建已订阅内容库


vSphere 管理员在 主管集群 上配置已订阅内容库。将从此库提取用于 Tanzu Kubernetes 集群节点的虚
拟机映像。

已订阅内容库源自一个已发布的内容库。创建订阅后,系统会将其与此已发布库进行同步。为创建 Tanzu
Kubernetes 集群节点,VMware 发布了供您订阅的 Photon OS OVA 库。订阅者与发布者同步后,您可
以将内容库与 主管集群 相关联。

有两种方式同步映像。

n 按需。内容库会按需下载已订阅的映像。

n 发布时。发布后,内容库会自动同步已订阅的映像。

按需下载需要的存储空间较少,随着发布更多包含不同 Kubernetes 版本的映像,这是一个重要的考虑因


素。但在首次使用新版本时,您必须等待其下载完成。

注 如果已订阅内容库达到其数据存储的存储容量,则必须迁移集群以使用新库。请参见将 Tanzu
Kubernetes 集群迁移到新内容库。。

前提条件

创建已订阅内容库需要以下特权:

n 对要创建库的 vCenter Server 实例拥有内容库.创建本地库或内容库.创建已订阅库特权。

n 数据存储.分配空间- 在目标数据存储上。

步骤

1 在 vSphere Client 中,选择菜单 > 内容库。

2 单击创建新内容库图标。

此时将打开新建内容库向导。

VMware, Inc. 131


vSphere with Tanzu 配置和管理

3 在名称和位置页面上输入标识信息。

a 输入内容库的名称。

b 对于 vCenter Server,选择配置了 主管集群 的 vCenter Server 实例。

c 单击下一步。

4 在配置内容库页面上提供内容库配置详细信息。

a 选择菜单项已订阅内容库。

b 在订阅 URL 文本框中,输入已发布库的 URL 地址:https://wp-content.vmware.com/v2/latest/


lib.json。

c 对于下载内容选项,请选择选项在需要时下载库内容,这样将按需下载 OVA。

d 单击下一步。

5 出现提示时,接受 SSL 证书指纹。

在从清单中删除已订阅内容库之前,SSL 证书指纹存储在系统中。

6 在添加存储页面上,选择数据存储作为内容库内容的存储位置,然后单击下一步。

7 在即将完成页面上,检查详细信息并单击完成。

8 在内容库页面上,确认库已同步。

9 导航到菜单 > 主机和集群视图。

10 在 vSphere 清单中,选择 vSphere 集群对象,然后选择配置选项卡。

11 选择命名空间 > 常规选项。

12 对于内容库,单击编辑。

13 单击添加库。

14 选择所创建的 Kubernetes 已订阅内容库。

15 要完成此过程,请单击确定。

Tanzu Kubernetes 集群的配置参数


Tanzu Kubernetes Grid 服务 API 公开了几个用于置备和更新 Tanzu Kubernetes 集群的参数。

用于置备 Tanzu Kubernetes 集群的参数


下表列出并介绍了用于集群置备的所有 YAML 参数和可接受的值。

注 此表为所有集群置备参数提供参考。要查看示例 YAML 文件中参数的层次结构,请参见用于置备


Tanzu Kubernetes 集群的示例 YAML 文件。

VMware, Inc. 132


vSphere with Tanzu 配置和管理

表 8-1. 用于置备 Tanzu Kubernetes 集群的参数


名称 值 描述

apiVersion run.tanzu.vmware.com/v1alpha1 指定 Tanzu Kubernetes Grid 服务 API


的版本。

kind TanzuKubernetesCluster 指定要创建的 Kubernetes 资源的类型。


唯一允许的值为 TanzuKubernetesCluster
(区分大小写)。

metadata 不适用 包括集群元数据,例如 name 和


namespace。这是标准的 Kubernetes 元数
据,因此可以使用 generateName(而非
name),添加标签和注释等。

name 用户定义的字符串,接受字母数字字符和 指定要创建的集群的名称。当前集群命名


短划线,例如:my-tkg-cluster-1 限制:
n 名称长度不得超过 41 个字符。
n 名称必须以字母开头。
n 名称可以包含字母、数字和连字符。
n 名称必须以字母或数字结尾。

namespace 用户定义的字符串,接受字母数字字符和 标识将在其中部署集群的主管命名空间的


短划线,例如:my-sns-1 名称。这是对主管集群上存在的主管命名
空间的引用。

spec 不适用 包括集群最终状态的规范(以声明性方式


表示),其中包括节点 toplogy 和
Kubernetes 软件 distribution。

topology 不适用 包括描述集群节点数量、用途和组织以及


分配给每个节点的资源的字段。集群节点
根据其预期用途(control-plane 或
worker)分组到池。每个池都为同类,具
有相同的资源分配并使用相同的存储。

controlPlane 不适用 指定集群控制平面的拓扑,包括节点数量


(count)、虚拟机类型 (class) 以及为每个
节点分配的存储资源 (storageClass)。

count 值为 1 或 3 的整数 指定控制平面节点数量。控制平面的节点


数量必须为奇数。

class 系统定义的元素,采用枚举集合中字符串 指定 VirtualMachineClass 的名称,此参


的形式,例如:guaranteed-small 或 数描述了池中每个节点使用的虚拟硬件设
best-effort-large 置。此参数控制节点可用的硬件(CPU 和
内存)以及有关这些资源的请求和限制。
请参见 Tanzu Kubernetes 集群的虚拟机
类类型。

VMware, Inc. 133


vSphere with Tanzu 配置和管理

表 8-1. 用于置备 Tanzu Kubernetes 集群的参数 (续)


名称 值 描述

storageClass node-storage(示例) 标识用于存储磁盘(存储控制平面节点的


根文件系统)的存储类。在命名空间上运
行 kubectl describe ns 可查看可用的存
储类。命名空间的可用存储类取决于
vSphere 管理员设置的存储。与主管命名
空间关联的存储类将在集群中进行复制。
换句话说,存储类必须在主管命名空间上
可用,才能成为此字段的有效值。

workers 不适用 指定集群工作节点的拓扑,包括节点数量


(count)、虚拟机类型 (class) 以及为每个
节点分配的存储资源 (storageClass)。

count 介于 0 和 150 之间的整数,例如:1、2 指定集群中的工作节点数。可以创建具有


或7 零个工作节点的集群,从而允许使用仅具
有控制平面节点的集群。工作节点数上限
无硬性限制,但合理的限制为 150 个。

class 系统定义的元素,采用枚举集合中字符串 指定 VirtualMachineClass 的名称,此参


的形式,例如:guaranteed-small 或 数描述了池中每个节点使用的虚拟硬件设
best-effort-large 置。此参数控制节点可用的硬件(CPU 和
内存)以及有关这些资源的请求和限制。
请参见 Tanzu Kubernetes 集群的虚拟机
类类型。

storageClass node-storage(示例) 标识用于存储磁盘(存储工作节点的根文


件系统)的存储类。在命名空间上运行
kubectl describe ns 可列出可用的存储
类。命名空间的可用存储类取决于
vSphere 管理员设置的存储。与主管命名
空间关联的存储类将在集群中进行复制。
换句话说,存储类必须在主管命名空间上
可用,才能有效。

distribution 不适用 指示集群的分发:在控制平面节点和工作


节点上安装的 Tanzu Kubernetes 集群软
件,包括 Kubernetes 本身。

version 用字母数字字符串和短划线表示 使用语义版本表示法指定要在集群节点上


Kubernetes 版本,例如: 安装的 Kubernetes 发行版的软件版本。
v1.16.6+vmware.1-tkg.1、v1.16.6 或 可以指定完全限定版本,也可以使用版本
v1.16 快捷方式,如“version: v1.16.6”(解析
为与该修补程序版本匹配的最新映像)或
“version: v1.16”(解析为最新匹配的修
补程序版本)。在创建集群后,解析后的
版本将在集群描述中显示为
“fullVersion”。

settings 不适用 标识集群的可选运行时配置信息,包括


Pod 的节点 network 详细信息和持久
storage。

network 不适用 指定集群的网络相关设置。

VMware, Inc. 134


vSphere with Tanzu 配置和管理

表 8-1. 用于置备 Tanzu Kubernetes 集群的参数 (续)


名称 值 描述

cni 不适用 标识集群的容器网络接口 (CNI) 插件。默


认值为 Antrea,无需为新集群指定该值。

name antrea 或 calico 指定要使用的 CNI。支持 Antrea 和


Calico。系统配置会将 Antrea 设置为默认
CNI。可以更改默认 CNI。如果使用默认
值,则无需指定此字段。

services 不适用 标识 Kubernetes 服务的网络设置。默认


值为 10.96.0.0/12。

cidrBlocks ["198.51.100.0/12"](示例) 指定要用于 Kubernetes 服务的 IP 地址范


围。默认值为 10.96.0.0/12。不能与为主
管集群选择的设置重叠。虽然此字段是一
个阵列,允许使用多个范围,但当前只允
许使用一个 IP 范围。

pods 不适用 指定 Pod 的网络设置。默认值为


192.168.0.0/16。

cidrBlocks ["192.0.2.0/16"] (示例) 指定要用于 Kubernetes Pod 的 IP 地址范


围。默认值为 192.168.0.0/16。不能与为
主管集群选择的设置重叠。虽然此字段是
一个阵列,允许使用多个范围,但当前只
允许使用一个 IP 范围。

serviceDomain "cluster.local" 指定集群的服务域。默认值为


cluster.local。

storage 不适用 标识容器工作负载的持久卷 (PV) 存储条


目。

classes 由一个或多个用户定义的字符串组成的数 指定容器工作负载的命名持久卷 (PV) 存储


组,例如:["gold", "silver"] 类。与主管命名空间关联的存储类将在集
群中进行复制。换句话说,存储类必须在
主管命名空间上可用,才能成为有效值。

defaultClass silver(示例) 指定要注释为集群中默认值的命名存储


类。如果未指定,则没有默认值。无需指
定一个或多个 classes 即可指定
defaultClass。

Tanzu Kubernetes 集群的虚拟机类类型


置备 Tanzu Kubernetes 集群时指定虚拟机类类型。每个类类型都为虚拟机预留一组资源,包括处理、内
存和存储。此外,对于每种类型,都有保证版本和最大努力版本两个版本,具体取决于您的用例。

精选虚拟机类类型的默认值
下表列出了精选虚拟机类类型的默认值,将它们用作 Tanzu Kubernetes 集群节点的虚拟机部署大小。每
个类类型都是在虚拟机上预留资源以用于处理、内存和存储的一个请求。

VMware, Inc. 135


vSphere with Tanzu 配置和管理

每个类类型有两个版本:保证版本和最大努力版本。保证类版本将完整预留为其配置的资源,即对于集
群,spec.policies.resources.requests 与 spec.hardware 设置相匹配。最大努力类版本则不然,它允许
过量分配资源。通常,保证类用于生产工作负载。

注 该列表可能并不详尽,并且将来的虚拟机类型可能会可自定义。要查看您的环境中可用的虚拟机类型的
当前完整列表,请登录到 主管集群 并运行 kubectl describe virtualmachineclasses 命令。

表 8-2. 精选虚拟机类类型的默认值
类 CPU 内存 (GB) 存储 (GB) 预留的 CPU 和内存

guaranteed-8xlarge 32 128 16 是

best-effort-8xlarge 32 128 16 否

guaranteed-4xlarge 16 128 16 是

best-effort-4xlarge 16 128 16 否

guaranteed-2xlarge 8 64 16 是

best-effort-2xlarge 8 64 16 否

guaranteed-xlarge 4 32 16 是

best-effort-xlarge 4 32 16 否

guaranteed-large 4 16 16 是

best-effort-large 4 16 16 否

guaranteed-medium 2 8 16 是

best-effort-medium 2 8 16 否

guaranteed-small 2 4 16 是

best-effort-small 2 4 16 否

guaranteed-xsmall 2 2 16 是

best-effort-xsmall 2 2 16 否

用于置备 Tanzu Kubernetes 集群的示例 YAML 文件


您可以使用示例 YAML 文件作为使用 Tanzu Kubernetes Grid 服务 置备和更新 Tanzu Kubernetes 集群
的起点。

用于置备集群的最小 YAML
创建 Tanzu Kubernetes 集群所需的最小 YAML 配置具有以下特性:

n 此 YAML 置备一个具有单个控制平面节点和三个工作节点的集群。

n apiVersion 和 kind 参数值均为常量。

n Kubernetes 版本(列为 v1.17)解析为与该次版本匹配的最新分发版,即 v1.17.8+vmware.1-


tkg.1.5417466。要使用 Antrea 网络连接,版本必须至少为 v1.17.7+vmware.1-tkg.1.154236c。请参
见支持的更新路径。

VMware, Inc. 136


vSphere with Tanzu 配置和管理

n 虚拟机类 best-effort-<size> 没有预留。有关详细信息,请参见 Tanzu Kubernetes 集群的虚拟机类


类型。

n 如果要将 Helm 或 Kubeapps 用作 defaultClass(由许多图表引用),请将


spec.settings.storage.defaultClass 添加到最小 YAML。

n 未指定 settings.storage 的运行时参数,因为使用默认值。

n 不需要 settings.network 的运行时参数,因为使用默认值。以下是默认网络设置,供您参考。有关详


细信息,请参见 Tanzu Kubernetes 集群的配置参数。

n 默认 Pod CIDR:192.168.0.0/16

n 默认服务 CIDR:10.96.0.0/12

n 默认服务域:cluster.local

n 由于已实施 Pod 安全策略,使用此示例 YAML 创建 Tanzu Kubernetes 集群后,您将能够运行


Pod,而不是运行部署。要创建部署,请定义到默认 Pod 安全策略之一的绑定。有关详细信息,请参
见对 Tanzu Kubernetes 集群使用 POD 安全策略。

apiVersion: run.tanzu.vmware.com/v1alpha1 #TKG API endpoint


kind: TanzuKubernetesCluster #required parameter
metadata:
name: tkg-cluster-1 #cluster name, user defined
namespace: namespace-a #supervisor namespace
spec:
distribution:
version: v1.17 #Resolves to the latest v1.17 image (v1.17.8+vmware.1-tkg.1.5417466)
topology:
controlPlane:
count: 1 #number of control plane nodes
class: best-effort-small #vmclass for control plane nodes
storageClass: tkc-storage-policy #storageclass for control plane
workers:
count: 3 #number of worker nodes
class: best-effort-small #vmclass for worker nodes
storageClass: tkc-storage-policy #storageclass for worker nodes

注 如果未使用与 Antrea(v1.17.8 或更高版本)兼容的 Tanzu Kubernetes 版本,为了避免出现错误


antrea cni not supported in current tkc version,则必须在 spec.settings.network.cni 中指定
calico,或者将默认 CNI 更改为 Calico。请参见更改 Tanzu Kubernetes 集群的默认 CNI。

用于置备集群的完整 YAML
创建 Tanzu Kubernetes 集群所需的完整 YAML 配置具有以下特性:

n 此 YAML 置备一个具有三个控制平面节点和五个工作节点的集群。

n Kubernetes 版本(列为 v1.17)解析为与该次版本匹配的最新分发版,即 v1.17.8+vmware.1-


tkg.1.5417466。要使用 Antrea 网络连接,版本必须至少为 v1.17.7+vmware.1-tkg.1.154236c。请参
见支持的更新路径。

VMware, Inc. 137


vSphere with Tanzu 配置和管理

n 由于不使用默认设置,因此包括网络设置。CIDR 范围不得与 主管集群 的 CIDR 范围重叠。有关详细


信息,请参见 Tanzu Kubernetes 集群的配置参数。

n 控制平面和工作节点使用不同的存储类。

n 虚拟机类 guaranteed-effort-<size> 具有完整预留。有关详细信息,请参见 Tanzu Kubernetes 集群


的虚拟机类类型。

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
name: tkg-cluster-2
namespace: namespace-b
spec:
distribution:
version: 1.17 #Resolves to the latest v1.17 image (v1.17.8+vmware.1-tkg.1.5417466)
topology:
controlPlane:
count: 3 #3 control plane nodes
class: guaranteed-large #large size VM
storageClass: tkc-storage-policy-yellow #Specific storage class for control plane
workers:
count: 5 #5 worker nodes
class: guaranteed-xlarge #extra large size VM
storageClass: tkc-storage-policy-green #Specific storage class for workers
settings:
network:
cni:
name: calico
services:
cidrBlocks: ["198.51.100.0/12"] #Cannot overlap with Supervisor Cluster
pods:
cidrBlocks: ["192.0.2.0/16"] #Cannot overlap with Supervisor Cluster
storage:
classes: ["gold", "silver"] #Named PVC storage classes
defaultClass: silver #Default PVC storage class

置备 Tanzu Kubernetes 集群
使用调用 Tanzu Kubernetes Grid 服务 API 的描述性 YAML 文件置备 Tanzu Kubernetes 集群。

前提条件

n 查看集群置备工作流和必备条件。请参见用于创建 Tanzu Kubernetes 集群的工作流。

n 获取 主管集群 控制平面的 IP 地址。

n 获取计划部署 Tanzu Kubernetes 集群的 主管命名空间 的名称。

VMware, Inc. 138


vSphere with Tanzu 配置和管理

步骤

1 使用 kubectl 的 vSphere 插件,对 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户


的身份连接到 主管集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

2 将上下文切换到要在其中部署 Tanzu Kubernetes 集群的命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

例如:

kubectl config get-contexts


kubectl config use-context tkgs-ns-2

3 选择映像版本。

a 通过使用以下任一命令列出可用的内容映像,确定要使用的 Kubernetes 版本。

kubectl get tanzukubernetesreleases

kubectl get virtualmachineimages

b 使用以下任一命令查看有关可用映像的详细信息。

kubectl describe tanzukubernetesreleases

kubectl describe virtualmachineimages

注 另请参见主题支持的更新路径,了解有关可用映像的详细信息。

4 创建具有所需配置参数的 YAML 文件以定义集群。

a 从示例 YAML 文件之一开始。请参见用于置备 Tanzu Kubernetes 集群的示例 YAML 文件。

b 参考支持的参数列表编制 YAML,以符合您的规范。请参见 Tanzu Kubernetes 集群的配置参


数。

注 支持版本快捷方式,例如 version: v1.18.5 和 version: v1.18。

5 使用以下 kubectl 命令置备 Tanzu Kubernetes 集群。

kubectl apply -f CLUSTER-NAME.yaml

6 使用 vSphere Client 监控集群置备。请参见使用 vSphere Client 监控 Tanzu Kubernetes 集群状


态。

VMware, Inc. 139


vSphere with Tanzu 配置和管理

7 使用以下 kubectl 命令验证集群置备。

a 验证集群是否已置备。

kubectl get tanzukubernetesclusters

例如:

kubectl get tanzukubernetesclusters


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-2 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 18h running

b 获取有关集群的详细信息。

kubectl describe tanzukubernetescluster CLUSTER-NAME

c 运行其他命令以验证集群置备。请参见 Tanzu Kubernetes 集群操作命令。

d 如有必要,请使用以下命令调试集群的置备。

kubectl get tanzukubernetescluster,cluster-


api,virtualmachinesetresourcepolicy,virtualmachineservice,virtualmachine

注 如需进一步故障排除,请参见 Tanzu Kubernetes 集群故障排除。

8 登录到集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME


--tanzu-kubernetes-cluster-name CLUSTER-NAME --tanzu-kubernetes-cluster-namespace NAMESPACE

9 使用以下 kubectl 命令验证集群置备。

kubectl cluster-info

kubectl get nodes

kubectl get namespaces

kubectl api-resources

10 部署示例工作负载并验证集群创建。请参见将工作负载部署到 Tanzu Kubernetes 集群。

注 Tanzu Kubernetes 集群已启用 pod 安全策略。根据工作负载和用户,您可能需要创建相应的


RoleBinding 或自定义 PodSecurityPolicy。请参见对 Tanzu Kubernetes 集群使用 POD 安全策
略。

VMware, Inc. 140


vSphere with Tanzu 配置和管理

删除 Tanzu Kubernetes 集群
可使用 kubectl 删除 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群。

使用 kubectl 删除 Tanzu Kubernetes 集群时,Kubernetes 垃圾数据收集可确保删除所有从属资源。

注 请勿尝试使用 vSphere Client 或 vCenter Server CLI 删除 Tanzu Kubernetes 集群。

步骤

1 使用 主管集群 进行身份验证。

请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

2 将上下文更改为置备了要删除的 Tanzu Kubernetes 的 主管命名空间。

kubectl config use-context CLUSTER-NAMESPACE

例如:

kubectl config use-context tkgs-ns-1

3 列出命名空间中的 Tanzu Kubernetes 集群。

kubectl get clusters

例如:

kubectl get clusters


NAME PHASE
tkgs-cluster-1 provisioned

4 使用以下语法删除 Tanzu Kubernetes 集群。

kubectl delete tanzukubernetescluster --namespace CLUSTER-NAMESPACE CLUSTER-NAME

例如:

kubectl delete tanzukubernetescluster --namespace tkgs-ns-1 tkgs-cluster-1

预期结果:

tanzukubernetescluster.run.tanzu.vmware.com "tkgs-cluster-1" deleted

5 验证集群是否已删除。

kubectl get clusters

例如:

kubectl get clusters


No resources found in tkgs-ns-1 namespace.

VMware, Inc. 141


vSphere with Tanzu 配置和管理

6 从 kube 配置文件中删除集群上下文。

kubectl config delete-context CONTEXT

例如:

kubectl config get-contexts


CURRENT NAME CLUSTER AUTHINFO
NAMESPACE
192.0.2.1 192.0.2.1 wcp:192.0.2.1:administrator@vsphere.local
tkgs-cluster-1 192.0.2.6 wcp:192.0.2.6:administrator@vsphere.local
* tkgs-ns-1 192.0.2.7 wcp:192.0.2.7:administrator@vsphere.local tkgs-
ns-1

kubectl config delete-context tkgs-cluster-1


deleted context tkgs-cluster-1 from $HOME/.kube/config

kubectl config get-contexts


CURRENT NAME CLUSTER AUTHINFO
NAMESPACE
192.0.2.1 192.0.2.1 wcp:192.0.2.1:administrator@vsphere.local
* tkgs-ns-1 192.0.2.7 wcp:192.0.2.7:administrator@vsphere.local tkgs-
ns-1

在气隙环境中置备 Tanzu Kubernetes 集群


要在气隙环境中置备 Tanzu Kubernetes 集群,请下载虚拟机映像文件并创建本地内容库。将映像导入到
本地库,并将其与创建 Tanzu Kubernetes 集群的 主管命名空间 相关联。

下载映像文件
要在气隙环境中置备 Tanzu Kubernetes 集群,请首先从公用内容交付网络 (CDN) 下载 OVA 和 OVF 文
件。

前提条件

查看工作流。

n 在气隙环境中置备 Tanzu Kubernetes 集群.

步骤

1 使用浏览器,导航到以下 URL:https://wp-content.vmware.com/v2/latest/。

VMware, Inc. 142


vSphere with Tanzu 配置和管理

2 单击所需映像的目录。通常,此目录是最新的 Kubernetes 分发版本。

例如:

ob-15957779-photon-3-k8s-v1.17.8---vmware.1-tkg.1.5417466

注 稍后在将文件导入到本地内容库时需要提供该分发名称,因此您可能需要将它复制到某个文件,或
保持浏览器的打开状态,直到完成该过程为止。

3 对于以下每个文件,右键单击并选择将链接另存为。

n photon-ova.ovf

n photon-ova-disk1.vmdk

4 验证是否已将每个文件成功下载到您的本地文件系统。

后续步骤

创建本地内容库.

创建本地内容库
要在气隙环境中置备 Tanzu Kubernetes 集群,请创建本地内容库。

前提条件

下载映像文件.

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 单击菜单。

3 单击内容库。

4 单击 +创建图标。

5 在新建内容库向导中,按如下所示对库进行配置:

a 输入库的名称,例如 Kubernetes-local,然后单击下一步。

b 选择本地内容库,然后单击下一步。

c 选择数据存储,然后单击下一步。

d 查看配置,然后单击完成。

后续步骤

将映像导入到本地内容库.

VMware, Inc. 143


vSphere with Tanzu 配置和管理

将映像导入到本地内容库
要在气隙环境中置备 Tanzu Kubernetes 集群,请将下载的映像文件导入到本地内容库。

前提条件

n 下载映像文件

n 创建本地内容库

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 选择菜单 > 内容库 > 。

3 从内容库列表中,单击您创建的本地内容库的对应的链接。

4 单击操作。

5 选择导入项目。

6 在导入库项目窗口中,选择本地文件。

7 单击上载文件。

8 选择文件 photon-ova.ovf 和 photon-ova-disk1.vmdk。

您会看到消息 2 files ready to import。列出的每个文件的名称旁边都有一个绿色的复选标记。

9 将目标项名称更改为包含下载文件所在目录中的完整 Kubernetes 版本。

例如:

photon-3-k8s-v1.16.8---vmware.1-tkg.3.60d2ffd

10 单击导入。

11 此时将在页面底部显示近期任务窗格。

12 监控任务获取库项目的内容并确认它已成功完成。

后续步骤

将本地内容库与 主管命名空间 相关联.

将本地内容库与 主管命名空间 相关联


要在气隙环境中置备 Tanzu Kubernetes 集群,请将本地内容库与 主管命名空间 相关联。

前提条件

n 下载映像文件.

n 创建本地内容库.

n 将映像导入到本地内容库.

VMware, Inc. 144


vSphere with Tanzu 配置和管理

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 单击菜单。

3 单击工作负载管理。

4 单击命名空间。

5 选择计划置备 Tanzu Kubernetes 集群的 主管命名空间。或者,创建 主管命名空间 并将其选中。

6 选择 主管命名空间 后,找到 Tanzu Kubernetes 图标。

7 单击内容库标签旁边的编辑。

8 在内容库窗口中,选中您创建的本地内容库的名称(例如 Kubernetes-local)旁边的单选按钮。

9 单击确定。

后续步骤

验证虚拟机映像是否可用.

验证虚拟机映像是否可用
要在气隙环境中置备 Tanzu Kubernetes 集群,请验证虚拟机映像是否已同步且可用。

注 创建本地内容库并将其与目标 主管命名空间 关联后,虚拟机映像可能需要几分钟才能同步完毕并可用


于置备 Tanzu Kubernetes 集群。

前提条件

n 下载映像文件.

n 创建本地内容库.

n 将映像导入到本地内容库.

n 将本地内容库与 主管命名空间 相关联.

步骤

1 登录到 主管集群。

例如:

kubectl vsphere login --server IP-ADDRESS-SUPERVISOR-CLUSTER --vsphere-username VCENTER-SSO-


USERNAME

2 将上下文切换到目标 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

VMware, Inc. 145


vSphere with Tanzu 配置和管理

3 运行下列命令。

kubectl get tanzukubernetesreleases

验证是否看到从本地内容库同步的映像。

NAME AGE
photon-3-k8s-v1.17.8---vmware.1-tkg.1.5417466 14m

后续步骤

使用本地映像创建集群.

使用本地映像创建集群
要在气隙环境中置备 Tanzu Kubernetes 集群,请使用从本地内容库同步的虚拟机映像创建集群。

对于 distribution.version 值,可以输入完整映像名称,或者,如果您保留了映像目录中的名称格式,则
可以将其缩短为 Kubernetes 版本。如果要使用完全限定的版本号,请将 ----- 替换为 +。例如,如果有
一个名为 photon-3-k8s-v1.17.8---vmware.1-tkg.1.5417466 的 OVA 映像,则可以接受以下格式。

spec:
distribution:
version: v1.17.8

spec:
distribution:
version: v1.17.8+vmware.1-tkg.1

spec:
distribution:
version: v1.17.8+vmware.1-tkg.1.5417466
```

前提条件

n 下载映像文件.

n 创建本地内容库.

n 将映像导入到本地内容库.

n 将本地内容库与 主管命名空间 相关联.

n 验证虚拟机映像是否可用.

VMware, Inc. 146


vSphere with Tanzu 配置和管理

步骤

1 使用下载的映像版本更新集群规范文件。

例如:

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
name: dev-cluster
namespace: cltest
spec:
topology:
controlPlane:
count: 3
class: best-effort-xsmall
storageClass: high-performance-ssd
workers:
count: 3
class: best-effort-xsmall
storageClass: high-performance-ssd
distribution:
version: v1.17.8
settings:
network:
cni:
name: antrea #But could be left blank if using the default
services:
cidrBlocks: ["198.51.100.0/12"]
pods:
cidrBlocks: ["192.0.2.0/16"]

2 要创建集群,请运行以下命令。

kubectl apply -f CLUSTER-NAME.yaml

将工作负载部署到 Tanzu Kubernetes 集群


可以使用 pod、服务、持久卷和高级别资源(如 Deployment 和 Replica Set)将应用程序工作负载部署
到 Tanzu Kubernetes 集群。

将测试工作负载部署到 Tanzu Kubernetes 集群


置备 Tanzu Kubernetes 集群后,最好部署一个测试工作负载并验证集群功能。

使用 kuard 演示应用程序验证 Tanzu Kubernetes 集群是否已启动并正在运行。

前提条件

n 置备 Tanzu Kubernetes 集群

n 以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群

VMware, Inc. 147


vSphere with Tanzu 配置和管理

步骤

1 将配置上下文切换到目标 Tanzu Kubernetes 集群。

kubectl config use-context TANZU-KUBERNETES-CLUSTER-NAME

例如:

kubectl config use-context tkgs-cluster-1


Switched to context "tkgs-cluster-1".

2 部署 kuard 演示应用程序。

kubectl run --restart=Never --image=gcr.io/kuar-demo/kuard-amd64:blue kuard

预期结果:

pod/kuard created

3 验证 pod 是否正在运行。

kubectl get pods

预期结果:

NAME READY STATUS RESTARTS AGE


kuard 1/1 Running 0 10d

4 将容器容器端口 8080 转发到本地主机端口 8080。

kubectl port-forward kuard 8080:8080

预期结果:

Forwarding from 127.0.0.1:8080 -> 8080


Forwarding from [::1]:8080 -> 8080
Handling connection for 8080

5 使用浏览器访问 http://localhost:8080。

此时将显示 kuard 演示应用程序网页,您可以与之交互并验证集群的各个方面。例如,执行活跃度和


就绪状态探查。

6 通过在 kubectl 会话中按 Ctrl+C,停止端口转发。

7 删除 kuard pod。

kubectl delete pod kuard

预期结果:

pod "kuard" deleted

VMware, Inc. 148


vSphere with Tanzu 配置和管理

8 验证 pod 是否已删除。

kubectl get pods

安装并运行 Octant
可以安装 Octant Web 界面,以帮助您直观查看 Tanzu Kubernetes 集群工作负载、命名空间、元数据
等。

关于 Octant
Octant 是用于查看 Kubernetes 集群及其应用程序的开源 Web 界面。

可以在运行 kubectl 的同一客户端上安装并运行 Octant。下面提供了适用于常用平台的安装说明。有关详


细信息,请参见 Octant 站点。

安装 Octant 后,要开始使用,请使用 kubectl 登录到 Tanzu Kubernetes 集群,然后运行命令 octant。

在 Windows 上安装 Octant


安装适用于 Windows PowerShell 的 Chocolatey 软件包管理器。

以管理员身份运行 PowerShell 会话。

使用以下命令安装 Octant:

choco install octant --confirm

在 Mac 上安装 Octant


安装 Homebrew 软件包管理器。

使用以下命令安装 Octant:

brew install octant

在 Ubuntu 上安装 Octant


从版本页面下载 .deb。

使用 dpkg -i 命令进行安装。

Tanzu Kubernetes 服务负载均衡器示例


要在 Tanzu Kubernetes 集群中置备外部负载均衡器,可以创建 LoadBalancer 类型的服务。负载均衡器
服务公开公用 IP 地址。来自外部负载均衡器的流量可以定向到集群 pod。

可以为作为服务提供的 Kubernetes pod 置备外部负载均衡器。例如,可以部署 Nginx 容器,并将其作为


LoadBalancer 类型的 Kubernetes 服务提供。

前提条件

n 查看 Kubernetes 文档中的服务类型 LoadBalancer。

VMware, Inc. 149


vSphere with Tanzu 配置和管理

n 置备 Tanzu Kubernetes 集群。请参见置备 Tanzu Kubernetes 集群。

n 连接到目标 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu


Kubernetes 集群。

步骤

1 创建默认特权 PSP 的适当角色绑定。请参见 Pod 安全策略的角色绑定示例。

2 创建以下 nginx-lbsvc.yaml YAML 文件。

此 YAML 文件定义了 LoadBalancer 类型的 Kubernetes 服务,并将 Nginx 容器部署为该服务的外


部负载均衡器。

kind: Service
apiVersion: v1
metadata:
name: srvclb-ngnx
spec:
selector:
app: hello
tier: frontend
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: loadbalancer
spec:
replicas: 2
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
tier: frontend
spec:
containers:
- name: nginx
image: "nginxdemos/hello"

3 应用 YAML。

kubectl apply -f nginx-lbsvc.yaml

VMware, Inc. 150


vSphere with Tanzu 配置和管理

4 验证 Nginx 服务的部署。

kubectl get services

srvclb-ngnx 已启动,并且具有外部 IP 地址和内部 IP 地址。

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE


srvclb-ngnx LoadBalancer 10.11.12.19 10.19.15.89 80:30818/TCP 18m

5 使用浏览器,输入 Nginx LoadBalancer 服务的外部 IP 地址。

将显示消息 NGINX 横幅和负载均衡器的详细信息。

使用 Contour 的 Tanzu Kubernetes Ingress 示例


Kubernetes Ingress 资源提供从集群外部到集群中的一个或多个服务的 HTTP 或 HTTPS 路由。Tanzu
Kubernetes 集群通过第三方控制器(例如 Contour)支持 Ingress。

此教程演示了如何部署用于将外部流量路由到 Tanzu Kubernetes 集群中服务的 Contour Ingress 控制


器。Contour 是 VMware 参与的一个开源项目。

前提条件

n 查看 Kubernetes 文档中的 Ingress 资源。

n 查看 Contour Ingress 控制器。

n 置备 Tanzu Kubernetes 集群。请参见置备 Tanzu Kubernetes 集群。

n 连接到 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu


Kubernetes 集群。

步骤

1 创建一个 ClusterRoleBinding,以允许服务帐户管理集群的所有资源。

kubectl create clusterrolebinding default-tkg-admin-privileged-binding


--clusterrole=psp:vmware-system-privileged --group=system:authenticated

注 如果需要更严格的安全性,请在 projectcontour 命名空间上使用 RoleBinding。请参见 Pod 安全


策略的角色绑定示例。

2 创建名为 projectcontour 的命名空间。

这是 Contour Ingress 控制器部署的默认命名空间

kubectl create ns projectcontour

3 下载最新的 Contour Ingress 控制器 YAML:Contour Ingress 部署。

4 使用文本编辑器打开 contour.yaml 文件。

VMware, Inc. 151


vSphere with Tanzu 配置和管理

5 通过在每行前面加上 # 符号,注释掉以下两行:

第 1632 行:

# service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp

第 1634 行:

# externalTrafficPolicy: Local

6 通过应用 contour.yaml 文件部署 Countour。

kubectl apply -f contour.yaml

7 验证是否已部署 Contour Ingress 控制器和 Envoy 负载均衡器服务。

kubectl get services -n projectcontour

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE


contour ClusterIP 198.63.146.166 <none> 8001/TCP 120m
envoy LoadBalancer 198.48.52.47 192.168.123.5 80:30501/TCP,443:30173/TCP 120m

8 验证 Contour 和 Envory Pod 是否正在运行。

kubectl get pods -n projectcontour

NAME READY STATUS RESTARTS AGE


contour-7966d6cdbf-skqfl 1/1 Running 1 21h
contour-7966d6cdbf-vc8c7 1/1 Running 1 21h
contour-certgen-77m2n 0/1 Completed 0 21h
envoy-fsltp 1/1 Running 0 20h

9 使用外部 IP 地址对负载均衡器执行 Ping 操作。

ping 192.168.123.5

PING 192.168.123.5 (192.168.123.5) 56(84) bytes of data.


64 bytes from 192.168.123.5: icmp_seq=1 ttl=62 time=3.50 ms

10 创建名为 ingress-nihao.yaml 的 Ingress 资源。

创建 YAML。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nihao
spec:

VMware, Inc. 152


vSphere with Tanzu 配置和管理

rules:
- http:
paths:
- path: /nihao
backend:
serviceName: nihao
servicePort: 80

应用 YAML。

kubectl apply -f ingress-nihao.yaml

验证是否已创建 Ingress 资源。

kubectl get ingress

NAME CLASS HOSTS ADDRESS PORTS AGE


ingress-nihao <none> * 10.19.14.76 80 17s

11 部署具有后端应用程序的测试服务。

创建以下名为 ingress-nihao-test.yaml 的 YAML 文件。

kind: Service
apiVersion: v1
metadata:
name: nihao
spec:
selector:
app: nihao
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nihao
spec:
replicas: 3
selector:
matchLabels:
app: nihao
tier: backend
track: stable
template:
metadata:
labels:
app: nihao
tier: backend

VMware, Inc. 153


vSphere with Tanzu 配置和管理

track: stable
spec:
containers:
- name: nihao
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80

应用 YAML。

kubectl apply -f ingress-nihao-test.yaml

验证是否已创建 nihao 服务。

kubectl get services

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE


nihao ClusterIP 10.14.21.22 <none> 80/TCP 15s

验证是否已创建后端部署。

kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE


nihao 3/3 3 3 2m25s

验证后端 pod 是否存在。

kubectl get pods

NAME READY STATUS RESTARTS AGE


nihao-8646584495-9nm8x 1/1 Running 0 106s
nihao-8646584495-vscm5 1/1 Running 0 106s
nihao-8646584495-zcsdq 1/1 Running 0 106s

12 获取 Contour Ingress 控制器使用的负载均衡器的公用 IP 地址。

kubectl get ingress

NAME CLASS HOSTS ADDRESS PORTS AGE


ingress-nihao <none> * 10.19.14.76 80 13m

VMware, Inc. 154


vSphere with Tanzu 配置和管理

13 使用浏览器,导航到公用 IP,并包含 Ingress 路径。

http://10.19.14.76/nihao

将返回消息“hello”。

{"message":"Hello"}

结果

浏览器可从外部通过 Ingress 控制器使用负载均衡器的外部 IP 地址访问集群内部运行的服务管理的后端应


用程序。

使用 Nginx 的 Tanzu Kubernetes Ingress 示例


Kubernetes Ingress 资源提供从集群外部到集群中的一个或多个服务的 HTTP 或 HTTPS 路由。Tanzu
Kubernetes 集群通过第三方控制器(例如 Nginx)支持 Ingress。

此教程演示了如何部署基于 NGINX 的 Kubernetes Ingress 服务,用于将外部流量路由到 Tanzu


Kubernetes 集群中的服务。Ingress 服务需要 Ingress 控制器。我们使用 Helm 安装 NGINX Ingress 控
制器。Helm 是适用于 Kubernetes 的软件包管理器。

注 完成此任务的方法有多种。本文中的步骤提供了一种方法。在给定的环境中,其他方法可能更适合。

前提条件

n 查看 Kubernetes 文档中的 Ingress 资源。

n 查看 Nginx Ingress 控制器文档。

n 置备 Tanzu Kubernetes 集群。请参见置备 Tanzu Kubernetes 集群。

n 启用 pod 安全策略。请参见自定义 Pod 安全策略的示例角色。

n 连接到 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu


Kubernetes 集群。

步骤

1 参考文档,安装 Helm。

2 使用 Helm 安装 NGINX Ingress 控制器。

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx


helm install ingress-nginx ingress-nginx/ingress-nginx

VMware, Inc. 155


vSphere with Tanzu 配置和管理

3 验证 Nginx Ingress 控制器是否部署为 LoadBalancer 类型的服务。

kubectl get services

NAME TYPE CLUSTER-IP EXTERNAL-IP


PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.16.18.20 10.19.14.76 80:30635/
TCP,443:30873/TCP 59m
ingress-nginx-controller-admission ClusterIP 10.87.41.25 <none> 443/
TCP 59m

4 使用外部 IP 地址对负载均衡器执行 Ping 操作。

ping 10.19.14.76

Pinging 10.19.14.76 with 32 bytes of data:


Reply from 10.19.14.76: bytes=32 time<1ms TTL=62
Reply from 10.19.14.76: bytes=32 time=1ms TTL=62

5 验证 Nginx Ingress 控制器是否正在运行。

kubectl get pods

NAME READY STATUS RESTARTS AGE


ingress-nginx-controller-7c6c46898c-v6blt 1/1 Running 0 76m

6 创建具有 Ingress 规则和路径且名为 ingress-hello.yaml 的 Ingress 资源。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-hello
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello
servicePort: 80

7 部署 ingress-hello 资源。

kubectl apply -f ingress-hello.yaml

ingress.networking.k8s.io/ingress-hello created

VMware, Inc. 156


vSphere with Tanzu 配置和管理

8 验证该 Ingress 资源是否已部署。

请注意,IP 地址映射到 Ingress 控制器的外部 IP。

kubectl get ingress

NAME CLASS HOSTS ADDRESS PORTS AGE


ingress-hello <none> * 10.19.14.76 80 51m

9 创建名为 ingress-hello-test.yaml 的 hello 测试应用程序和服务。

kind: Service
apiVersion: v1
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
app: hello
tier: backend
track: stable
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80

VMware, Inc. 157


vSphere with Tanzu 配置和管理

10 部署 ingress-hello-test 资源。

kubectl apply -f ingress-hello-test.yaml

service/hello created
deployment.apps/hello created

11 验证 hello 部署是否可用。

kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE


hello 3/3 3 3 4m59s
ingress-nginx-controller 1/1 1 1 3h39m

12 获取 Nginx Ingress 控制器使用的负载均衡器的公用 IP 地址。

kubectl get ingress

NAME CLASS HOSTS ADDRESS PORTS AGE


ingress-hello <none> * 10.19.14.76 80 13m

13 使用浏览器,导航到公用 IP,并包含 Ingress 路径。

http://10.19.14.76/hello

将返回消息“hello”。

{"message":"Hello"}

结果

浏览器可从外部通过 Ingress 控制器使用负载均衡器的外部 IP 地址访问集群内部运行的服务管理的后端应


用程序。

Tanzu Kubernetes 存储类示例


对于需要持久性的工作负载,可以使用默认存储类,也可以定义自己的存储类以用于持久卷。Tanzu
Kubernetes 集群支持容器存储接口 (CSI) 置备程序。

支持容器存储接口 (CSI)
Tanzu Kubernetes 集群支持容器存储接口 (CSI)。在 StorageClass 定义中,这种类型的置备程序标识为
csi.vsphere.vware.com。

VMware, Inc. 158


vSphere with Tanzu 配置和管理

可以将以下 YAML 定义用作模板,用于为 Tanzu Kubernetes 集群定义存储类。指定是否要将存储类设置


为默认值(“true”),并为存储环境提供数据存储 URL。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: tkgs-storage-class
annotations:
storageclass.kubernetes.io/is-default-class: "true" or "false"
provisioner: csi.vsphere.vmware.com
parameters:
datastoreurl: "ds:///vmfs/volumes/vsan:52d8eb4842dbf493-41523be9cd4ff7b7/"

创建存储类:

kubectl apply -f tkgs-storage-class.yaml

storageclass.storage.k8s.io/tkgs-storage-class created

验证是否已创建存储类:

kubectl get storageclass

或者,使用快捷方式:

kubectl get sc

不支持 VMware Cloud Provider (vCP)


Tanzu Kubernetes 集群不支持旧版 VMware Cloud Provider (vCP) StorageClass,如下所示。如果尝
试使用 vCP 置备程序创建 StorageClass,则不会创建 StorageClass。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: demo-sts-sc
provisioner: kubernetes.io/vsphere-volume
parameters:
diskformat: thin

Tanzu Kubernetes 持久卷声明示例


要在 Tanzu Kubernetes 集群上运行有状态工作负载,可以创建持久卷声明 (PVC),以请求持久存储资
源,而无需了解底层存储基础架构的详细信息。用于 PVC 的存储从 vSphere Namespace 的存储配额进
行分配。

默认情况下,容器是临时和无状态容器。对于有状态工作负载,一种常用的方法是创建持久卷声明
(PVC)。可以使用 PVC 挂载持久卷和访问存储。请求会动态地置备持久卷对象和匹配的虚拟磁盘。此声明
将绑定到持久卷。删除此声明时,也将删除相应的持久卷对象和已置备的虚拟磁盘。

VMware, Inc. 159


vSphere with Tanzu 配置和管理

步骤

1 登录到目标 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu


Kubernetes 集群。

2 切换到正在运行集群的命名空间。

kubectl config use-context NAMESPACE

3 验证存储类或创建一个存储类。

要验证现有存储类,请执行以下命令:

kubectl get storageclass

要创建存储类,请参见 Tanzu Kubernetes 存储类示例。

4 创建命名空间。

kubectl create namespace guestbook

5 创建 Guestbook PVC YAML 文件。

n Redis 主节点 PVC

n Redis 从节点 PVC

6 将 Guestbook PVC 应用于集群。

kubectl apply -f redis-leader-pvc.yaml -n guestbook

kubectl apply -f redis-follower-pvc.yaml -n guestbook

7 验证 PVC 的状态。

kubectl get pvc,pv -n guestbook

PVC 和持久卷 (PV) 将列出,并可供使用。

NAME STATUS VOLUME


CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/redis-follower-pvc Bound pvc-37b72f35-3de2-4f84-be7d-50d5dd968f62
2Gi RWO tkgs-storage-class 66s
persistentvolumeclaim/redis-leader-pvc Bound pvc-2ef51f31-dd4b-4fe2-bf4c-f0149cb4f3da
2Gi RWO tkgs-storage-class 66s

NAME CAPACITY ACCESS MODES RECLAIM POLICY


STATUS CLAIM STORAGECLASS
persistentvolume/pvc-2ef51f31-dd4b-4fe2-bf4c 2Gi RWO Delete Bound
guestbook/redis-leader-pvc tkgs-storage-class
persistentvolume/pvc-37b72f35-3de2-4f84-be7d 2Gi RWO Delete Bound
guestbook/redis-follower-pvc tkgs-storage-class

VMware, Inc. 160


vSphere with Tanzu 配置和管理

Tanzu Kubernetes Guestbook 教程


可以将 Guestbook 应用程序部署到 Tanzu Kubernetes 集群,以了解服务帐户以及部署和服务创建的
pod 安全策略。

部署 Guestbook 应用程序是探索 Kubernetes 的一种常用方法。如果将所有 Guestbook YAML 文件部


署到 Tanzu Kubernetes Grid 服务 置备的一个 Tanzu Kubernetes 集群,将无法成功创建应用程序
pod。运行 kubectl describe pod 命令时,将显示以下错误消息:

“Error: container has runAsNonRoot and image will run as root”

Guestbook 应用程序使用 deployment 和 replicaset 资源在默认命名空间中部署特权容器。由于已为


Tanzu Kubernetes 集群启用 PodSecurityPolicy 控制器,因此当任何集群用户尝试创建 Guestbook 应
用程序 pod 时,都将根据 PodSecurityPolicy 检查这些控制器的服务帐户。如果适当的 PSP 未绑定到这
些服务帐户,则不会部署该应用程序。

默认情况下,Tanzu Kubernetes 管理员可以使用其用户帐户直接在任何命名空间中创建特权 pod。但


是,Guestbook 应用程序使用服务帐户部署特权容器。集群管理员可以在 kube-system 命名空间中创建
Deployment、StatefulSet 和 DaemonSet。但是,Guestbook 应用程序会在默认命名空间中部署这些
资源。此外,如果没有适当的 PSP 和绑定,非管理用户根本无法创建特权 pod 或非特权 pod。

一种解决方案是创建默认特权 PSP 的绑定,以允许部署 Guestbook 应用程序。对于绑定帐户,特权


PodSecurityPolicy 允许以 root 用户身份运行的 pod 和特权容器。可以创建适用于 vmware-system-
privileged 集群范围的 ClusterRoleBinding,但这样做可能会违反最小特权原则,因为授予的权限多于所
需权限。更好的方法是创建 RoleBinding,以允许系统服务帐户在默认命名空间中使用特权
PodSecurityPolicy。有关详细信息,请参见 Pod 安全策略的角色绑定示例。

前提条件

查看以下主题:

n Kubernetes 文档中的 Guestbook 应用程序教程

n 对 Tanzu Kubernetes 集群使用 POD 安全策略

n Pod 安全策略的角色绑定示例

步骤

1 登录到 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu


Kubernetes 集群。

2 创建 Guestbook 命名空间。

kubectl create namespace guestbook

验证:

kubectl get ns

VMware, Inc. 161


vSphere with Tanzu 配置和管理

3 使用默认特权 PSP 创建基于角色的访问控制。

kubectl create clusterrolebinding default-tkg-admin-privileged-binding


--clusterrole=psp:vmware-system-privileged --group=system:authenticated

注 如果需要更严格的安全性,请对 Guestbook 命名空间应用 RoleBinding。请参见 Pod 安全策略


的角色绑定示例

4 验证存储类或创建一个存储类。

要验证现有存储类,请执行以下命令:

kubectl get storageclass

要创建存储类,请参见 Tanzu Kubernetes 存储类示例。

5 创建使用存储类的持久卷声明 (PVC)。

n Redis 主节点 PVC

n Redis 从节点 PVC

6 创建 Guestbook YAML 文件。

n Redis 主节点部署

n Redis 主节点服务

n Redis 从节点部署

n Redis 从节点服务

n Guestbook 前端部署

n Guestbook 前端服务

7 在 Guestbook 命名空间中部署 Guestbook 应用程序。

kubectl apply -f . --namespace guestbook

8 验证 Guestbook 资源的创建。

kubectl get all -n guestbook

NAME READY STATUS RESTARTS AGE


pod/guestbook-frontend-deployment-56fc5b6b47-cd58r 1/1 Running 0 65s
pod/guestbook-frontend-deployment-56fc5b6b47-fh6dp 1/1 Running 0 65s
pod/guestbook-frontend-deployment-56fc5b6b47-hgd2b 1/1 Running 0 65s
pod/redis-follower-deployment-6fc9cf5759-99fgw 1/1 Running 0 65s
pod/redis-follower-deployment-6fc9cf5759-rhxf7 1/1 Running 0 65s
pod/redis-leader-deployment-7d89bbdbcf-flt4q 1/1 Running 0 65s

NAME TYPE CLUSTER-IP EXTERNAL-IP


PORT(S) AGE
service/guestbook-frontend-service LoadBalancer 10.10.89.59 10.19.15.99 80:31513/

VMware, Inc. 162


vSphere with Tanzu 配置和管理

TCP 65s
service/redis-follower-service ClusterIP 10.111.163.189 <none> 6379/
TCP 65s
service/redis-leader-service ClusterIP 10.111.70.189 <none> 6379/
TCP 65s

NAME READY UP-TO-DATE AVAILABLE AGE


deployment.apps/guestbook-frontend-deployment 3/3 3 3 65s
deployment.apps/redis-follower-deployment 1/2 2 1 65s
deployment.apps/redis-leader-deployment 1/1 1 1 65s

NAME DESIRED CURRENT READY AGE


replicaset.apps/guestbook-frontend-deployment-56fc5b6b47 3 3 3 65s
replicaset.apps/redis-follower-deployment-6fc9cf5759 2 2 1 65s
replicaset.apps/redis-leader-deployment-7d89bbdbcf 1 1 1 65s

9 通过前端服务负载均衡器的 IP 地址访问 Guestbook 应用程序。

您应该会看到 Guestbook Web 界面,并应能够在 Guestbook 数据库中输入值。如果应用程序重新


启动,则数据应会持久保留。

Guestbook 示例 YAML 文件
可使用示例 YAML 文件部署具有永久数据的 Guestbook 应用程序。

Redis 主节点 PVC


文件 redis-leader-pvc.yaml 是一个引用命名存储类的持久卷声明示例。要使用此示例,请输入存储类的
名称。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: redis-leader-pvc
spec:
accessModes:
- ReadWriteOnce
storgaeClassName: tkgs-storage-class-name
resources:
requests:
storage: 2Gi

Redis 从节点 PVC


文件 redis-follower-pvc.yaml 是一个引用命名存储类的持久卷声明示例。要使用此示例,请输入存储类
的名称。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: redis-follower-pvc
spec:
accessModes:
- ReadWriteOnce

VMware, Inc. 163


vSphere with Tanzu 配置和管理

storgaeClassName: tkgs-storage-class-name
resources:
requests:
storage: 2Gi

Redis 主节点部署
文件 redis-leader-deployment.yaml 是一个具有持久卷的 Redis 主节点部署示例。

apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-leader-deployment
spec:
selector:
matchLabels:
app: redis
role: leader
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: leader
tier: backend
spec:
containers:
- name: leader
image: redis
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
volumeMounts:
- name: redis-leader-data
mountPath: /data
volumes:
- name: redis-leader-data
persistentVolumeClaim:
claimName: redis-leader-pvc

Redis 从节点部署
文件 redis-follower-deployment.yaml 是一个具有持久卷的 Redis 从节点部署示例。

apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-follower-deployment
labels:
app: redis

VMware, Inc. 164


vSphere with Tanzu 配置和管理

spec:
selector:
matchLabels:
app: redis
role: follower
tier: backend
replicas: 2
template:
metadata:
labels:
app: redis
role: follower
tier: backend
spec:
containers:
- name: follower
image: redisfollower
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 6379
volumeMounts:
- name: redis-follower-data
mountPath: /data
volumes:
- name: redis-follower-data
persistentVolumeClaim:
claimName: redis-follower-pvc

Redis 主节点服务
文件 redis-leader-service.yaml 是一个 Redis 主节点服务示例。

apiVersion: v1
kind: Service
metadata:
name: redis-leader-service
labels:
app: redis
role: leader
tier: backend
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: leader
tier: backend

VMware, Inc. 165


vSphere with Tanzu 配置和管理

Redis 从节点服务
文件 redis-follower-service.yaml 是一个 Redis 从节点服务示例。

apiVersion: v1
kind: Service
metadata:
name: redis-follower-service
labels:
app: redis
role: follower
tier: backend
spec:
ports:
- port: 6379
selector:
app: redis
role: follower
tier: backend

Guestbook 前端部署
文件 guestbook-frontend-deployment.yaml 是一个 Guestbook 前端部署示例。

apiVersion: apps/v1
kind: Deployment
metadata:
name: guestbook-frontend-deployment
spec:
selector:
matchLabels:
app: guestbook
tier: frontend
replicas: 3
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google-samples/gb-frontend:v4
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80

VMware, Inc. 166


vSphere with Tanzu 配置和管理

Guestbook 前端服务
文件 guestbook-frontend-service.yaml 是一个 Guestbook 前端负载均衡器服务示例。

apiVersion: v1
kind: Service
metadata:
name: guestbook-frontend-service
labels:
app: guestbook
tier: frontend
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: guestbook
tier: frontend

对 Tanzu Kubernetes 集群使用 POD 安全策略


Tanzu Kubernetes Grid 服务 会置备已启用 PodSecurityPolicy 准入控制器的 Tanzu Kubernetes 集
群。这意味着部署工作负载需要 Pod 安全策略。集群管理员可以将 Pod 从其用户帐户部署到任何命名空
间以及从服务帐户部署到 kube-system 命名空间。对于所有其他用例,必须明确绑定到 Pod 安全策略。
集群包括您可以绑定的默认 Pod 安全策略,您也可以创建自己的安全策略。

关于 Kubernetes Pod 安全策略


Kubernetes Pod 安全策略 (PSP) 是控制 Pod 安全性的集群级别资源。通过使用 PSP,能够控制可以部
署的 Pod 类型以及可以部署这些 Pod 的帐户类型。

PodSecurityPolicy 资源定义了一组条件,Pod 必须满足这些条件才能进行部署。如果不满足这些条件,


则无法部署 Pod。单个 PodSecurityPolicy 必须验证整个 Pod。Pod 不能在一个策略中包含部分规则,
同时又在另一个策略中包含部分规则。

可以通过多种方法在 Kubernetes 中使用 Pod 安全策略。典型的方法是使用基于角色的访问控制 (RBAC)


对象。ClusterRole 和 ClusterRoleBinding 适用于集群范围;Role 和 RoleBinding 适用于特定的命名空
间。如果使用 RoleBinding,该绑定仅允许 Pod 在与绑定相同的命名空间中运行。

创建 Kubernetes Pod 有两种方法:直接创建或间接创建。可以通过使用用户帐户部署 Pod 规范来直接创


建 Pod。可以通过定义某种高级别资源(如 Deployment 或 DaemonSet)来间接创建 Pod。在这种情况
下,服务帐户将创建底层 Pod。

要有效使用 PSP,必须同时考虑这两个 Pod 创建工作流。如果用户直接创建 Pod,则绑定到用户帐户的


PSP 将控制操作。如果用户通过服务帐户创建 Pod,则 PSP 必须绑定到用于创建 Pod 的服务帐户。如果
在 Pod 规范中未指定服务帐户,则将使用命名空间的默认服务帐户。

有关详细信息,请参见 Kubernetes 文档中的 Pod 安全策略、RBAC 和服务帐户。

VMware, Inc. 167


vSphere with Tanzu 配置和管理

Tanzu Kubernetes 集群的默认 PodSecurityPolicy


下表列出并介绍了 Tanzu Kubernetes 集群的特权和受限默认 Pod 安全策略,以及与每个策略关联的默认
ClusterRole。

表 8-3. 具有关联 ClusterRole 的默认 PodSecurityPolicy


默认 PSP 权限 描述 关联的默认 ClusterRole

vmware-system-privileged 以任何用户身份运行 可允许 PSP。相当于在未启用 psp:vmware-system-privileged


PSP 准入控制器的情况下运行 可以使用此 PSP
集群。

vmware-system-restricted 必须以非 root 用户身份运行 限制性 PSP。不允许对 Pod psp:vmware-system-restricted


容器进行特权访问,阻止可能 可以使用此 PSP
升级到 root,并且需要使用多
个安全机制。

Tanzu Kubernetes 集群没有默认绑定


Tanzu Kubernetes Grid 服务 不会为 Tanzu Kubernetes 集群提供默认的 RoleBinding 和
ClusterRoleBinding。

获得 主管命名空间 上编辑权限的 vCenter Single Sign-On 用户将分配有在该命名空间中部署的任何


Tanzu Kubernetes 集群的 cluster-admin 角色。经过身份验证的集群管理员可以隐式使用 vmware-
system-privileged PSP。尽管在技术上并不是 ClusterRoleBinding,但具有相同的效果。

集群管理员必须定义任何绑定,以允许或限制用户可以部署到集群的 Pod 类型。如果使用 RoleBinding,


该绑定仅允许 Pod 在与绑定相同的命名空间中运行。这可以与系统组配对,以向命名空间中运行的所有
Pod 授予访问权限。向集群进行身份验证的非管理员用户将分配有 authenticated 角色,由此可以绑定到
默认的 PSP。请参见向开发人员授予 Tanzu Kubernetes 集群访问权限。

默认 PodSecurityPolicy 对 Tanzu Kubernetes 集群的影响


对于任何 Tanzu Kubernetes 集群,都将执行以下行为:

n 集群管理员可以使用其用户帐户直接在任何命名空间中创建特权 Pod。

n 集群管理员可以在 kube-system 命名空间中创建 Deployment、StatefulSet 和 DaemonSet(每个


都创建特权 Pod)。如果要使用不同的命名空间,请参见 Tanzu Kubernetes Guestbook 教程。

n 集群管理员可以创建自己的 PSP(除了两个默认 PSP 之外),并将这些 PSP 绑定到任何用户。如果


定义自己的 PSP,请参见 Kubernetes 文档中的 策略顺序。

n 在集群管理员将 PSP 绑定到经过身份验证的用户,任何经过身份验证的用户都无法创建特权或非特权


Pod。请参见 Tanzu Kubernetes Guestbook 教程。

VMware, Inc. 168


vSphere with Tanzu 配置和管理

Pod 安全策略的角色绑定示例
Tanzu Kubernetes 集群包括可绑定到的默认 PodSecurityPolicy,以进行特权和受限工作负载部署。

关于默认 Pod 安全策略


本部分介绍用于创建默认 pod 安全策略的角色绑定的 YAML 和命令。有关详细信息,请参见对 Tanzu
Kubernetes 集群使用 POD 安全策略。

示例 1:用于运行特权工作负载集的 ClusterRoleBinding
下面的 kubectl 命令创建了一个 ClusterRoleBinding,用于向经过身份验证的用户授予访问权限,使其能
够使用默认 PSP vmware-system-privileged 运行特权工作负载集。

kubectl create clusterrolebinding default-tkg-admin-privileged-binding


--clusterrole=psp:vmware-system-privileged --group=system:authenticated

注 上述命令允许在集群范围内部署特权工作负载。为加强安全性,请考虑改用 RoleBinding。

示例 2:用于运行特权工作负载集的 RoleBinding
下面的 kubectl 命令创建了一个 RoleBinding,用于向默认命名空间内的所有服务帐户授予访问权限,使
其能够使用默认 PSP vmware-system-privileged 运行特权工作负载集。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: rolebinding-default-privileged-sa-ns_default
namespace: default
roleRef:
kind: ClusterRole
name: psp:vmware-system-privileged
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
apiGroup: rbac.authorization.k8s.io
name: system:serviceaccounts

作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。

kubectl create rolebinding rolebinding-default-privileged-sa-ns_default


--namespace=default --clusterrole=psp:vmware-system-privileged
--group=system:serviceaccounts

VMware, Inc. 169


vSphere with Tanzu 配置和管理

示例 3:用于运行受限工作负载集的 ClusterRoleBinding
下面的 YAML 创建了一个 ClusterRoleBinding,用于向经过身份验证的用户授予集群范围的访问权限,使
其能够使用默认 PSP vmware-system-restricted 运行受限工作负载集。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: psp:authenticated
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:authenticated
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: psp:vmware-system-restricted

作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。

kubectl create clusterrolebinding psp:authenticated


--clusterrole=psp:vmware-system-restricted --group=system:authenticated

示例 4:用于运行受限工作负载集的 RoleBinding
下面的 YAML 创建了一个 RoleBinding,用于向特定命名空间内的所有服务帐户授予访问权限,使其能够
使用默认 PSP vmware-system-restricted 运行受限工作负载集。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: psp:serviceaccounts
namespace: some-namespace
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:serviceaccounts
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: psp:vmware-system-restricted

作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。

kubectl create rolebinding psp:serviceaccounts


--clusterrole=psp:vmware-system-restricted --group=system:serviceaccounts

VMware, Inc. 170


vSphere with Tanzu 配置和管理

自定义 Pod 安全策略的示例角色


Tanzu Kubernetes 集群需要 Pod 安全策略 (PSP) 才能部署工作负载。如果您定义自己的 PSP,则必须
创建引用 PSP 的 Role 或 ClusterRole。

PodSecurityPolicy 的示例角色
为演示引用 PSP 的角色,我们以 使用 Contour 的 Tanzu Kubernetes Ingress 示例为例。

要部署 Contour Ingress 控制器,请创建一个名为 contour-leaderelection 的角色。在角色定义中,将


contour-leaderelection 角色和 use 动词授予您定义的自定义 PSP 资源。或者,使用一个默认的 PSP。
然后,创建 Tanzu Kubernetes Guestbook 教程。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: contour-leaderelection
namespace: projectcontour
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- get
- list
- watch
- update
- apiGroups:
- ""
resources:
- events
verbs:
- create
- update
- patch
- apiGroups:
- extensions
resourceNames:
- CUSTOM-OR-DEFAULT-PSP
resources:
- podsecuritypolicies
verbs:
- use

VMware, Inc. 171


vSphere with Tanzu 配置和管理

操作 Tanzu Kubernetes 集群
Tanzu Kubernetes Grid 服务 包括用于操作 Tanzu Kubernetes 集群的自定义资源。此外,由于与
vSphere 基础架构紧密集成,可以使用熟悉的 vSphere 工具帮助管理和维护 Tanzu Kubernetes 集群。

使用 vSphere Client 监控 Tanzu Kubernetes 集群状态


可以使用 vSphere Client 监控 Tanzu Kubernetes 集群的状态。

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 从菜单中,选择主机和集群视图。

3 展开创建 主管集群 所在的数据中心 > 集群对象。

4 展开命名空间资源池。

5 选择已部署 Tanzu Kubernetes 集群的 主管命名空间。

每个 Tanzu Kubernetes 集群均在其命名空间资源池中作为一个文件夹列出。每个 Tanzu


Kubernetes 的名称旁边都有三个六边形图标进行图形表示。

6 切换到菜单 > 虚拟机和模板视图。

在集群文件夹中,您会看到构成集群节点的虚拟机。

7 选择 主管命名空间,然后选择计算选项卡。

8 在 VMware 资源下,选择 Tanzu Kubernetes。

将列出在此 主管命名空间 中部署的每个 Tanzu Kubernetes 集群。有关每个状态字段的描述,请参阅


vSphere 中的 Tanzu Kubernetes 集群生命周期状态。

使用 kubectl 监控 Tanzu Kubernetes 集群状态


您可以使用 kubectl 监控已置备 Tanzu Kubernetes 集群的状态。

步骤

1 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

2 切换到正在运行集群的 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

3 查看命名空间中运行的 Tanzu Kubernetes 集群列表。

kubectl get tanzukubernetesclusters

该命令将返回集群的状态。有关状态字段的描述,请参阅 kubectl 中的 Tanzu Kubernetes 集群生命


周期状态。

VMware, Inc. 172


vSphere with Tanzu 配置和管理

4 查看集群详细信息。

kubectl describe tanzukubernetescluster <cluster-name>

该命令将返回有关集群的详细信息。在命令输出的“状态”部分中,您将看到有关集群的详细信息。

...
Status:
Addons:
Cni:
Name: calico
Status: applied
Csi:
Name: pvcsi
Status: applied
Psp:
Name: defaultpsp
Status: applied
Cloudprovider:
Name: vmware-guest-cluster
Cluster API Status:
API Endpoints:
Host: 10.161.90.22
Port: 6443
Phase: provisioned
Node Status:
test-tanzu-cluster-control-plane-0: ready
test-tanzu-cluster-workers-0-749458f97c-97ljv: ready
Phase: running
Vm Status:
test-tanzu-cluster-control-plane-0: ready
test-tanzu-cluster-workers-0-749458f97c-97ljv: ready
Events: <none>

5 运行其他 kubectl 命令查看有关集群的更多详细信息。请参见 Tanzu Kubernetes 集群操作命令。

查看 Tanzu Kubernetes 集群的完整资源层次结构


您可以使用 kubectl 查看 Tanzu Kubernetes 集群的完整资源层次结构。查看集群资源的完整列表可帮助
您查明可能导致出现问题的资源。

前提条件

连接到 主管集群。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

步骤

1 切换上下文以使用目标集群上下文。

kubectl config use-context CLUSTER-NAME

VMware, Inc. 173


vSphere with Tanzu 配置和管理

2 运行以下命令以查看集群 API 集群资源。

kubectl describe clusters.cluster.x-k8s.io CLUSTER-NAME

此命令返回指定集群的资源层次结构,例如命名空间、API 版本和资源版本。

扩展 Tanzu Kubernetes 集群
可以通过增加控制平面节点数以及增加或减少工作节点数来横向扩展 Tanzu Kubernetes 集群。可以通过
更改托管节点的虚拟机类来纵向扩展 Tanzu Kubernetes 集群。

横向扩展控制平面
可以通过使用 kubectl 增加控制平面节点数来横向扩展 Tanzu Kubernetes 集群。

只能通过将节点数从 1 增加到 3 来横向扩展控制平面。控制平面节点数必须为奇数(1 或 3)。无法横向缩


减(减少)控制平面节点数。

前提条件

n 要扩展 Tanzu Kubernetes 集群,请更新集群清单。要以内嵌方式编辑集群清单,请为您的首选文本


编辑器配置 KUBE_EDITOR 或 EDITOR 环境变量。有关说明,请参见 Kubernetes 文档中的 edit 命
令。

n 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

步骤

1 切换到正在运行 Kubernetes 集群的命名空间。

kubectl config use-context NAMESPACE

2 列出正在命名空间中运行的 Kubernetes 集群。

kubectl get tanzukubernetescluster -n NAMESPACE

例如:

kubectl get tanzukubernetescluster -n tkg-cluster-ns

该命令将返回正在运行的集群的名称、控制平面虚拟机数量、工作节点数、软件版本、经过天数和阶
段。有关状态字段的描述,请参阅 kubectl 中的 Tanzu Kubernetes 集群生命周期状态。

3 获取在目标集群中运行的节点数。

kubectl get tanzukubernetescluster CLUSTER-NAME

以下示例集群具有 1 个控制平面节点和 3 个工作节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE


tkg-cluster-01 1 3 v1.18.5+vmware.1-tkg.1.886c781 1d running

VMware, Inc. 174


vSphere with Tanzu 配置和管理

4 要加载集群清单进行编辑,请运行命令 kubectl edit。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

例如:

kubectl edit tanzukubernetescluster/tkg-cluster-01

在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件后,


kubectl 将更新此清单。

5 编辑集群清单中的 spec.workers.count 参数,并将控制平面计数从 1 增加到 3。

...
controlPlane:
count: 1
...

...
ControlPlane:
count: 3
...

6 要应用更改,请在文本编辑器中保存该文件。

保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作


节点。

7 要验证新节点是否已添加,请运行以下命令。

kubectl get tanzukubernetescluster CLUSTER-NAME

横向扩展后的控制平面现在具有 3 个节点:

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE


tkg-cluster-01 3 3 v1.18.5+vmware.1-tkg.1.886c781 1d running

横向扩展工作节点
可以通过使用 kubectl 增加工作节点数来横向扩展 Tanzu Kubernetes 集群。

前提条件

n 要扩展 Tanzu Kubernetes 集群,请更新集群清单。要以内嵌方式编辑集群清单,请为您的首选文本


编辑器配置 KUBE_EDITOR 或 EDITOR 环境变量。有关说明,请参见 Kubernetes 文档中的 edit 命
令。

n 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

VMware, Inc. 175


vSphere with Tanzu 配置和管理

步骤

1 切换到正在运行 Kubernetes 集群的命名空间。

kubectl config use-context NAMESPACE

2 列出正在命名空间中运行的 Kubernetes 集群。

kubectl get tanzukubernetescluster -n NAMESPACE

例如:

kubectl get tanzukubernetescluster -n tkg-cluster-ns

该命令将返回正在运行的集群的名称、控制平面虚拟机数量、工作节点数、软件版本、经过天数和阶
段。有关状态字段的描述,请参阅 kubectl 中的 Tanzu Kubernetes 集群生命周期状态。

3 获取在目标集群中运行的节点数。

kubectl get tanzukubernetescluster CLUSTER-NAME

以下示例集群具有 3 个控制平面节点和 3 个工作节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE


tkg-cluster-01 3 3 v1.18.5+vmware.1-tkg.1.886c781 1d running

4 要加载集群清单进行编辑,请运行命令 kubectl edit。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

例如:

kubectl edit tanzukubernetescluster/tkg-cluster-01

在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件后,


kubectl 将更新此清单。

5 根据您是要增加还是减少容量,编辑集群清单中的 spec.workers.count 参数,以增加或减少工作线程


计数。

要扩大集群,请增加工作线程节点数,例如从 3 增加到 4:

...
workers:
count: 3
...

...
workers:
count: 4
...

VMware, Inc. 176


vSphere with Tanzu 配置和管理

6 要应用更改,请在文本编辑器中保存该文件。

保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作


节点。

7 要验证是否已添加新节点,请运行以下命令。

kubectl get tanzukubernetescluster CLUSTER-NAME

横向扩展后,现在有 4 个工作节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE


tkg-cluster-01 3 4 v1.18.5+vmware.1-tkg.1.886c781 1d running

横向缩减工作节点
可以通过使用 kubectl 减少工作节点数来横向缩减 Tanzu Kubernetes 集群。

前提条件

n 要扩展 Tanzu Kubernetes 集群,请更新集群清单。要以内嵌方式编辑集群清单,请为您的首选文本


编辑器配置 KUBE_EDITOR 或 EDITOR 环境变量。有关说明,请参见 Kubernetes 文档中的 edit 命
令。

n 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

步骤

1 切换到正在运行 Kubernetes 集群的命名空间。

kubectl config use-context NAMESPACE

2 列出正在命名空间中运行的 Kubernetes 集群。

kubectl get tanzukubernetescluster -n NAMESPACE

例如:

kubectl get tanzukubernetescluster -n tkg-cluster-ns

该命令将返回正在运行的集群的名称、控制平面虚拟机数量、工作节点数、软件版本、经过天数和阶
段。有关状态字段的描述,请参阅 kubectl 中的 Tanzu Kubernetes 集群生命周期状态。

3 获取在目标集群中运行的节点数。

kubectl get tanzukubernetescluster CLUSTER-NAME

以下示例集群具有 3 个控制平面节点和 3 个工作节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE


tkg-cluster-01 3 3 v1.18.5+vmware.1-tkg.1.886c781 1d running

VMware, Inc. 177


vSphere with Tanzu 配置和管理

4 要加载集群清单进行编辑,请运行命令 kubectl edit。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

例如:

kubectl edit tanzukubernetescluster/tkg-cluster-01

在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件后,


kubectl 将更新此清单。

5 编辑集群清单中的 spec.workers.count 参数,例如,将工作节点计数从 3 减少到 2。

...
workers:
count: 3
...

...
workers:
count: 2
...

6 要应用更改,请在文本编辑器中保存该文件。

保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作


节点。

7 验证工作节点是否已移除。

kubectl get tanzukubernetescluster CLUSTER-NAME

横向缩减后,有 2 个工作节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE


tkg-cluster-01 3 2 v1.18.5+vmware.1-tkg.1.886c781 1d running

通过更新 VirtualMachineClass 纵向扩展 Tanzu Kubernetes 集群


可以通过更改用于托管集群节点的虚拟机类来纵向扩展 Tanzu Kubernetes 集群。

Tanzu Kubernetes Grid 服务 支持通过服务中内置的滚动更新机制纵向扩展集群节点。如果更改


VirtualMachineClass 定义,该服务将推出具有该新类的新节点,并停止旧节点。请参见关于 Tanzu
Kubernetes 集群更新。

请注意,纵向扩展集群节点时,由于缺少可用资源,工作负载可能无法再运行于节点上。因此,横向扩展
集群节点可能是首选方法。请参见横向扩展工作节点。

VMware, Inc. 178


vSphere with Tanzu 配置和管理

前提条件

此任务使用命令 kubectl edit tanzukubernetescluster/CLUSTER-NAME 更新集群清单。kubectl edit 命令


将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件时,将使用
所做更改更新集群。请参见为 Kubectl 指定默认的文本编辑器。

步骤

1 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

2 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

3 描述目标 Tanzu Kubernetes 集群并检查虚拟机类。

kubectl describe tanzukubernetescluster CLUSTER-NAME

例如,以下集群使用的是 best-effort-small 虚拟机类:

Spec:
...
Topology:
Control Plane:
Class: best-effort-small
...
Workers:
Class: best-effort-small
...

4 列出并描述可用的虚拟机类。

kubectl get virtualmachineclasses

kubectl describe virtualmachineclasses

5 运行以下命令以编辑集群清单。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

6 通过以下方式编辑清单:更改 version 字符串,并取消设置 fullVersion 或将其设为 null,以避免在


发现过程中可能出现版本不匹配问题。

例如,将集群清单从对控制平面和工作节点使用 best-effort-small 虚拟机类:

spec:
topology:
controlPlane:
class: best-effort-small

VMware, Inc. 179


vSphere with Tanzu 配置和管理

...
workers:
class: best-effort-small
...

更改为对控制平面和工作节点使用 best-effort-large 虚拟机类:

spec:
topology:
controlPlane:
class: best-effort-large
...
workers:
class: best-effort-large
...

7 保存对清单文件所做的更改。

保存该文件时,kubectl 会将更改应用到集群。在后台,Tanzu Kubernetes Grid 服务 将置备新的节


点虚拟机并停止旧虚拟机。

8 验证 kubectl 是否报告清单编辑已成功记录。

kubectl edit tanzukubernetescluster/tkgs-cluster-1


tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited

注 如果显示错误,或者 kubectl 未报告集群清单已成功编辑,请确保使用 KUBE_EDITOR 环境变量


正确配置了默认文本编辑器。请参见为 Kubectl 指定默认的文本编辑器。

9 验证集群是否正在更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 21h updating

10 验证集群是否已更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 22h running

将 Tanzu Kubernetes 集群迁移到新内容库。


如果已订阅内容库达到容量限制,可以迁移 Tanzu Kubernetes 集群,以使用具有额外存储容量的新库。

当 vSphere 管理员创建已订阅内容库时,管理员将指定用于存储库内容的数据存储,在这种情况下为
OVA 文件。随着分发更多的 Kubernetes 版本,已订阅内容库的大小将会扩展,因为每次更新都会添加
OVA 文件。虽然已订阅内容库上没有明确的容量限制,但它受其数据存储容量的限制。

VMware, Inc. 180


vSphere with Tanzu 配置和管理

如果已订阅内容库达到容量限制,您可能会看到消息 Internal error occurred: get library items


failed for.。在这种情况下,可以将 Tanzu Kubernetes 集群迁移到新的已订阅内容库,以增加存储容
量。迁移由 vSphere 管理员使用 vSphere Client 完成。

步骤

1 创建一个新的已订阅内容库,使其具有足以用于目标集群的容量。请参见为 Tanzu Kubernetes 集群


创建已订阅内容库。

2 使用 vSphere Client 登录 vCenter Server。

3 选择菜单 > 主机和集群。

4 选择已置备包含 Tanzu Kubernetes 集群的 主管集群 的 vSphere 集群对象。

5 选择配置选项卡。

6 在导航面板中选择命名空间 > 常规 > 选项。

7 单击主面板中内容库部分旁边的编辑。

8 选择您创建的新内容库,然后单击确定。

此操作会触发对集群配置的更新。

注 修改内容库后,可能需要长达 10 分钟,Tanzu Kubernetes 集群才能从 Content Source 中获取


更改。

验证 Tanzu Kubernetes 集群的默认 CNI


Tanzu Kubernetes Grid 服务 提供用于 Tanzu Kubernetes 集群的默认容器网络接口 (CNI)。可以使用
kubectl 验证默认 CNI。

Tanzu Kubernetes Grid 服务 支持两个 CNI:Antrea 和 Calico,其中 Antrea 是默认值。有关详细信


息,请参见 Tanzu Kubernetes 集群网络连接。

前提条件

n 以 vCenter Single Sign-On 用户的身份连接到 主管集群

步骤

1 登录到 主管集群 后,将上下文切换到 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

2 运行以下命令以列出默认 CNI。

kubectl get tkgserviceconfigurations

NAME DEFAULT CNI


tkg-service-configuration antrea

VMware, Inc. 181


vSphere with Tanzu 配置和管理

更改 Tanzu Kubernetes 集群的默认 CNI


Tanzu Kubernetes Grid 服务 提供用于 Tanzu Kubernetes 集群的默认容器网络接口 (CNI)。默认配置允
许您创建集群,而无需指定 CNI。可以通过编辑服务规范来更改默认 CNI。

Tanzu Kubernetes Grid 服务 支持两个 CNI:Antrea 和 Calico,其中 Antrea 是默认值。有关详细信


息,请参见 Tanzu Kubernetes 集群网络连接。

您可以通过明确指定要使用的 CNI 来替代默认 CNI。或者,也可以通过编辑 CNI 的 TKG 服务控制器来更


改默认 CNI。

前提条件

n 为首选文本编辑器配置 KUBE_EDITOR 或 EDITOR 环境变量。有关说明,请参见 Kubernetes 文档中


的 edit 命令。

n 以 vCenter Single Sign-On 用户的身份连接到 主管集群

步骤

1 登录到 主管集群 后,将上下文切换到 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

2 要加载待编辑的 CNI 规范,请运行以下 kubectl edit 命令。

kubectl edit tkgserviceconfigurations tkg-service-configuration

tkg-service-configuration 服务规范将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的默认文本


编辑器中打开。

3 编辑 spec.defaultCNI 值。

例如,将

spec:
defaultCNI: antrea

更改为

spec:
defaultCNI: calico

4 保存更改。

在文本编辑器中保存更改时,kubectl 会更新 tkg-service-configuration 服务规范。

VMware, Inc. 182


vSphere with Tanzu 配置和管理

5 验证默认 CNI 是否已更新。

kubectl get tkgserviceconfigurations

NAME DEFAULT CNI


tkg-service-configuration calico

Tanzu Kubernetes 集群生命周期状态


您可以在 vSphere 清单中使用 kubectl 查看 Tanzu Kubernetes 集群的生命周期状态。

vSphere 中的 Tanzu Kubernetes 集群生命周期状态


下表列出并介绍了 vSphere 清单中显示的 Tanzu Kubernetes 集群状态信息。要查看此信息,请参见使
用 vSphere Client 监控 Tanzu Kubernetes 集群状态。

表 8-4. vSphere 清单中的 Tanzu Kubernetes 集群状态


字段 描述 示例

名称 用户定义的集群名称。 tkg-cluster-01

创建时间 创建集群的日期和时间。 Mar 17, 2020, 11:42:46 PM

阶段 集群的生命周期状态。请参见表 8-6. 集群生命周 creating


期阶段状态。

工作线程计数 集群中的工作节点数。 1、2 或 5

分发版本 集群正在运行的 Kubernetes 软件的版本。 v1.16.6+vmware.1-tkg.1.7144628

控制平面地址 集群控制平面负载均衡器的 IP 地址。 192.168.123.2

kubectl 中的 Tanzu Kubernetes 集群生命周期状态


下表列出并介绍了 kubectl 中显示的 Tanzu Kubernetes 集群状态信息。要查看此信息,请参见使用
kubectl 监控 Tanzu Kubernetes 集群状态。

表 8-5. kubectl 中的集群状态 Tanzu Kubernetes


字段 描述 示例

NAME 集群的名称。 tkg-cluster-01

CONTROL PLANE 集群中的控制平面节点数。 3

WORKER 集群中的工作节点数。 5

DISTRIBUTION 集群正在运行的 Kubernetes 版本。 v1.16.6+vmware.1-tkg.1.5b5608b

AGE 集群已运行的天数。 13d

PHASE 集群的生命周期状态。请参见表 8-6. 集 running


群生命周期阶段状态。

VMware, Inc. 183


vSphere with Tanzu 配置和管理

集群生命周期阶段状态
下表列出并介绍了集群生命周期每个阶段的状态。请参见表 8-6. 集群生命周期阶段状态

表 8-6. 集群生命周期阶段状态
阶段 描述

creating 集群置备可以开始,正在创建控制平面,或者已创建控制平面但未初始化。

deleting 正在删除集群。

failed 创建集群控制平面失败,可能需要用户干预。

running 已创建并配置基础架构,并且控制平面已完全初始化。

updating 正在更新集群。

Tanzu Kubernetes 集群操作命令


可以使用自定义 kubectl 命令管理 Tanzu Kubernetes 集群。这些命令通过 Tanzu Kubernetes Grid 服
务 创建的自定义资源使用。

用于管理 Tanzu Kubernetes 集群的自定义命令


下表列出并介绍了用于管理 Tanzu Kubernetes 集群的 kubectl 命令。

表 8-7. 用于管理 Tanzu Kubernetes 集群的自定义命令


命令 描述

列出当前命名空间中的集群。
kubectl get tanzukubernetescluster

上述命令的缩写版本。
kubectl get tkc

描述指定的集群,显示表述的状况、状态和事件。置备完成后,
kubectl describe tanzukubernetescluster CLUSTER-
NAME 此命令将显示为位于 Kubernetes API 端点之前的负载均衡器创
建的虚拟 IP。

列出支持当前命名空间中的集群的集群 API 资源,包括集群 API


kubectl get cluster-api
项目中的资源以及 Tanzu Kubernetes Grid 服务所用集群 API
提供程序中的资源。

列出可用的 Tanzu Kubernetes 版本。


kubectl get tanzukubernetesreleases

上述命令的缩写版本。
kubectl get tkr

提供有关指定的 Tanzu Kubernetes 版本的详细信息。


kubectl get tkr v1.17.8---vmware.1-
tkg.1.5417466 -o yaml

列出支持当前命名空间中的集群节点的虚拟机资源。
kubectl get virtualmachine

上述命令的缩写版本。
kubectl get vm

VMware, Inc. 184


vSphere with Tanzu 配置和管理

表 8-7. 用于管理 Tanzu Kubernetes 集群的自定义命令 (续)


命令 描述

描述指定的虚拟机,显示状况、当前状态和事件。
kubectl describe virtualmachine VIRTUAL-MACHINE-
NAME

列出支持当前命名空间中的集群的“虚拟机集资源策略”资源。
kubectl describe virtualmachinesetresourcepolicy
此资源表示用于集群的 vSphere 对象资源池和文件夹。

列出支持当前命名空间中的集群节点的虚拟机服务资源。这些资
kubectl get virtualmachineservice
源类似于服务,但用于虚拟机,而非 Pod。虚拟机服务既用于为
集群的控制平面节点提供负载均衡器,也用于由准虚拟云提供商
支持集群中 LoadBalancer 类型的 Kubernetes 服务。另请参见
命令 kubectl loadbalancer。

上述命令的缩写版本。
kubectl get vmservice

描述指定的虚拟机服务,显示表述的集群状况、当前状态和事
kubectl describe virtualmachineservice VIRTUAL-
MACHINE-SERVICE-NAME 件。

列出当前命名空间中的负载均衡器资源,包括用于集群的负载均
kubectl get loadbalancer
衡器资源。将为虚拟机服务创建负载均衡器。

列出当前命名空间中的虚拟网络资源,包括用于集群的资源。将
kubectl get virtualnetwork
为每个置备了集群的命名空间和每个集群本身创建一个虚拟网
络。

列出当前命名空间中的持久卷声明资源,包括用于集群的资源。
kubectl get persistentvolumeclaim
请参见第 7 章 vSphere with Tanzu 中的存储。

列出当前命名空间中的 CNS 节点虚拟机附加资源。这些资源表


kubectl get cnsnodevmattachment
示 CNS 管理的持久卷附加到用作集群节点的虚拟机的情况。请
参见第 7 章 vSphere with Tanzu 中的存储。

列出当前命名空间中的配置映射,包括用于创建集群节点的映
kubectl get configmap
射。配置映射不能由用户修改,且任何更改都会被覆盖。

列出当前命名空间中的密钥,包括用于创建和管理集群节点的密
kubectl get secret
钥。请参见 Tanzu Kubernetes 集群密钥。

VMware, Inc. 185


vSphere with Tanzu 配置和管理

Tanzu Kubernetes 集群网络连接命令


Tanzu Kubernetes Grid 服务 置备 Tanzu Kubernetes 集群时为节点、pod 和服务设置了默认网络连
接。可以使用自定义 kubectl 命令验证集群网络连接。

用于验证 Tanzu Kubernetes 集群网络连接的自定义命令


表 8-8. 用于验证集群网络连接的自定义 kubectl 命令
命令 描述

返回默认 CNI,即 antrea(除非已更改)。除非在集群 YAML


kubectl get tkgserviceconfigurations
中明确替代,否则使用默认 CNI 创建集群。要更改默认 CNI,请
参见更改 Tanzu Kubernetes 集群的默认 CNI。

返回集群节点的虚拟网络。用于验证是否已分配源网络地址转换
kubectl get virtualnetwork -n NAMESPACE
(SNAT) IP 地址。

返回集群节点的虚拟网络接口。用于验证每个集群节点的虚拟机
kubectl get virtualmachines -n NAMESPACE NODE-
NAME 是否已分配 IP 地址。

返回每个集群节点的虚拟机服务。用于验证状态是否已更新,是
kubectl get virtualmachineservices -n NAMESPACE
cluster-1-control-plane-service 否包括负载均衡器虚拟 IP (VIP) 地址。

返回为集群 API 访问创建的 Kubernetes 服务负载均衡器。用于


kubectl get services -n NAMESPACE
验证是否已分配外部 IP。使用 curl 验证能否使用负载均衡器服
务的外部 IP 地址和端口来访问 API。
curl -k https://EXTERNAL-IP:PORT/healthz

返回集群的控制平面节点(端点)。用于验证是否每个端点均已
kubectl get endpoints -n NAMESPACE
cluster-1-control-plane-service 创建并包含在端点池中。

Tanzu Kubernetes 集群密钥


Tanzu Kubernetes 集群使用密钥来存储操作 Tanzu Kubernetes 集群所需的令牌、密钥和密码。

Tanzu Kubernetes 集群密钥列表


Kubernetes 机密是一个存储少量敏感数据的对象,如密码、令牌或 SSH 密钥。Tanzu Kubernetes 集群
管理员在操作集群时可能会使用多个密钥。下表列出并介绍了集群管理员可能会使用的关键密钥。

注 该列表并不完整。它仅仅包含那些可能需要手动轮换或用于访问集群节点进行故障排除的密钥。

密钥 描述

准虚拟云提供商的云控制器管理器用于连接到 主管命名空间 的服
TANZU-KUBERNETES-CLUSTER-NAME-ccm-token-RANDOM
务帐户令牌。要触发此凭据的轮换,请删除该密钥。

准虚拟 CSI 插件用于连接到 主管命名空间 的服务帐户令牌。要


TANZU-KUBERNETES-CLUSTER-NAME-pvcsi-token-RANDOM
触发此凭据的轮换,请删除该密钥。请参见 vSphere with
Tanzu 如何与 vSphere 存储集成。

VMware, Inc. 186


vSphere with Tanzu 配置和管理

密钥 描述

可用于以 kubernetes-admin 用户身份连接到集群控制平面的


TANZU-KUBERNETES-CLUSTER-NAME-kubeconfig
kubeconfig 文件。在 vCenter Single Sign-On 身份验证不可用
时,可以使用此机密访问集群并对其进行故障排除。请参见以管
理员用户身份连接到 Tanzu Kubernetes 集群控制平面。

可用于以 vmware-system-user 身份连接到任何集群节点的 SSH


TANZU-KUBERNETES-CLUSTER-NAME-ssh
私钥。此机密可用于通过 SSH 访问任何集群节点并对其进行故障
排除。请参见以系统用户身份使用私钥通过 SSH 连接到 Tanzu
Kubernetes 集群节点。

可用于以 vmware-system-user 身份连接到任何集群节点的密码。


TANZU-KUBERNETES-CLUSTER-NAME-ssh-password
请参见以系统用户身份使用私钥通过 SSH 连接到 Tanzu
Kubernetes 集群节点。

kubectl 用于安全连接到 Kubernetes API 服务器的 Tanzu


TANZU-KUBERNETES-CLUSTER-NAME-ca
Kubernetes 集群控制平面的根 CA 证书。

VMware, Inc. 187


使用 vSphere Pod
9
作为 DevOps 工程师,您可以在 主管集群上运行的命名空间的资源边界内部署 vSphere Pod 并对其进行
生命周期管理。您必须对命名空间具有写权限,才能在该命名空间上部署 vSphere Pod。

本章讨论了以下主题:

n 以 vCenter Single Sign-On 用户的身份连接到 主管集群

n 在命名空间中部署应用程序

n 扩展和缩小应用程序

n 将映像推送到 注册表服务 上的命名空间

n 使用 注册表服务中的映像部署应用程序

以 vCenter Single Sign-On 用户的身份连接到 主管集群


要使用 Tanzu Kubernetes Grid 服务 置备 vSphere Pod 或 Tanzu Kubernetes 集群,请使用 kubectl
的 vSphere 插件 连接到 主管集群,并使用您的 vCenter Single Sign-On 凭据进行身份验证。

登录到 主管集群 后,kubectl 的 vSphere 插件 将为集群生成上下文。在 Kubernetes 中,配置上下文包


含集群、命名空间和用户。可以在 .kube/config 文件中查看集群上下文。此文件通常称为 kubeconfig
文件。

注 如果您有现有的 kubeconfig 文件,则该文件将附加每个集群上下文。kubectl 的 vSphere 插件 采用


kubectl 自身使用的 KUBECONFIG 环境变量。请在运行 kubectl vsphere login ... 之前设置此变量,
虽然此操作并非必需,但非常有用,因为这样可将信息写入新文件(而不是添加到当前 kubeconfig 文
件)。

前提条件

n 获取您的 vCenter Single Sign-On 凭据。

n 获取 主管集群 控制平面的 IP 地址。

n 获取 主管命名空间 的名称。

n 确认您对 主管命名空间 具有编辑权限。

n 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具.

VMware, Inc. 188


vSphere with Tanzu 配置和管理

n 通过将签名 CA 作为可信 Root 进行安装或将证书直接添加为可信 Root,验证 Kubernetes 控制平面


提供的证书在您的系统上是否受信任。

步骤

1 要查看用于登录的命令语法和选项,请运行以下命令。

kubectl vsphere login --help

2 要连接到 主管集群,请运行以下命令。

kubectl vsphere login --server=<KUBERNETES-CONTROL-PLANE-IP-ADDRESS> --vsphere-username <VCENTER-


SSO-USER>

例如:

kubectl vsphere login --server=10.92.42.13 --vsphere-username administrator@example.com

此操作将创建一个配置文件,其中包含用于向 Kubernetes API 进行身份验证的 JSON Web 令牌


(JWT)。

3 要进行身份验证,请输入用户的密码。

连接到 主管集群 后,您会看到可以访问的配置上下文。例如:

You have access to the following contexts:


tanzu-ns-1
tkg-cluster-1
tkg-cluster-2

4 要查看您可以访问的配置上下文的详细信息,请运行以下 kubectl 命令:

kubectl config get-contexts

CLI 将显示每个可用上下文的详细信息。

5 要在上下文之间切换,请使用以下命令:

kubectl config use-context <example-context-name>

后续步骤

以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群.

在命名空间中部署应用程序
您可以在主管集群上的命名空间中部署应用程序。部署应用程序后,将在 主管集群的命名空间内创建相应
数量的 vSphere Pod。

您还可以从存储在 Harbor 映像注册表中的映像部署应用程序。请参见使用 注册表服务中的映像部署应用


程序。

VMware, Inc. 189


vSphere with Tanzu 配置和管理

前提条件

n 从 vSphere 管理员处获取 主管集群 上的 Kubernetes 控制平面的 IP 地址。

n 在 vCenter Single Sign-On 中获取您的用户帐户。

n 请与您的 vSphere 管理员联系,确认您具有访问所需上下文的权限。

步骤

1 使用 主管集群进行身份验证。

kubectl vsphere login --server <makster URL> --vsphere-username <vSphere user account name>

2 切换到要在其中部署应用程序的上下文。

kubectl config use-context <namespace>

3 部署应用程序。

kubectl apply -f <application name>.yaml

扩展和缩小应用程序
您可以扩展和缩小 主管集群上运行的每个应用程序的副本数量。

前提条件

n 从 vSphere 管理员处获取 主管集群 上的 Kubernetes 控制平面的 IP 地址。

n 在 vCenter Single Sign-On 中获取您的用户帐户。

n 请与您的 vSphere 管理员联系,确认您具有访问所需上下文的权限。

步骤

1 使用 主管集群进行身份验证。

kubectl vsphere login --server <control plane load balancer IP address> --vsphere-username
<vSphere user account name>

2 扩展或缩小应用程序。

kubectl get deployments


kubectl scale deployment <deployment-name> --replicas=<number-of-replicas>

VMware, Inc. 190


vSphere with Tanzu 配置和管理

将映像推送到 注册表服务 上的命名空间


您可以将映像从 Docker 推送到 注册表服务 上的项目。注册表服务 中的项目与 vSphere with Tanzu 上
主管集群 中的命名空间相对应。

前提条件

n 验证 主管集群 上是否启用了 注册表服务。

n 从 vSphere 管理员处获取 注册表服务 用户界面的 URL。

n 获取对以下命名空间具有写入权限的用户帐户:与要推送映像的 注册表服务 上的项目对应的命名空


间。

n 从 vSphere 管理员处获取 主管集群 上的 Kubernetes 控制平面的 IP 地址。

n 从 Kubernetes 控制平面的页面下载 vSphere Docker Credential Helper 插件,并在系统的可执行


文件路径上配置此插件。

步骤

1 在浏览器中,通过 注册表服务 URL 登录到 注册表服务 用户界面。

2 单击注册表证书以将证书保存在您的计算机上。

3 根据您的操作系统,复制以下目录中的证书。

n Linux

/etc/docker/certs.d/<Container Registry IP>

n Mac OS

security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt

导入完成后,重新启动 Docker。

4 使用 vSphere Docker Credential Helper 登录到 注册表服务。

docker-credential-vsphere login <container-registry-IP> --user username@domain.com

注 虽然可接受提供 --user username 进行登录,但是您应该使用 UserPrincipalName (UPN) 语法


(--user username@domain.com) 登录并使用 docker push 命令。

5 对要推入到 注册表服务 中与命名空间同名的项目中的映像进行标记,您可以使用该映像:

docker tag <image-name>[:TAG] <container-registry-IP>/<project-name>/<image-name>[:TAG]

6 要将映像推送到 Harbor 中的项目,请运行以下命令:

docker push <container-registry-IP>/<namespace-name>/<image_name>

VMware, Inc. 191


vSphere with Tanzu 配置和管理

示例

将以下映像推送到 Harbor 映像注册表:

docker tag busybox:latest <container-registry-IP>/<namespace-name>/busybox:latest


docker push <container-registry-IP>/busybox/busybox:latest

后续步骤

使用来自 Harbor 的映像部署 vSphere Pod。

使用 注册表服务中的映像部署应用程序
您可以使用 注册表服务中存储的映像在 主管集群 上的命名空间中部署 vSphere Pod。

前提条件

n 将映像推送到注册表服务中一个与要部署应用程序的命名空间具有相同名称的项目。请参见将映像推送
到 注册表服务 上的命名空间 。

n 将 vspere-plugin.zip 的内容添加到环境的执行文件路径中。

步骤

1 创建一个包含以下参数的 YAML 文件:

...
namespace: <namespace-name>
...
spec:
...
image: <image registry URL>/<namespace name>/<image name>

2 登录到 主管集群:

kubectl vsphere login --server=https://<server_adress> --vsphere-username <your user account name>

3 切换到要在其中部署应用程序的命名空间。

kubectl config use-context <namespace>

4 从该 YAML 文件部署 vSphere Pod:

kubectl apply -f <yaml file name>.yaml

5 运行以下命令,确认已从 注册表服务中提取映像,并且 vSphere Pod 处于运行状态:

kubectl describe pod/<yaml name>

结果

通过使用 注册表服务中以命名空间命名的项目中的映像将创建的 YAML 文件部署到指定的命名空间。

VMware, Inc. 192


vSphere with Tanzu 配置和管理

示例:
使用 注册表服务中 demoapp1 项目内的 busybox 映像在命名空间 demoapp1 上创建和部署以下 YAML
文件:

apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: demoapp1
spec:
containers:
- name: busybox
image: <harbor_IP>/demoapp1/busybox:latest
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always

VMware, Inc. 193


使用 vSphere Lifecycle Manager
10
作为 vSphere 管理员,您可以在 VMware vSphere Lifecycle Manager 管理的 vSphere 集群上启用
Kubernetes 工作负载。然后,可以在 vSphere Lifecycle Manager 进行管理时使用 主管集群。

通过 vSphere Lifecycle Manager,您可以管理环境中的 ESXi 主机和集群。可以使用映像安装、更新或


升级在 ESXi 主机上运行的软件和固件。

vSphere Lifecycle Manager 是在 vCenter Server 中运行的一项服务。部署 vCenter Server 时,将在


基于 HML5 的 vSphere Client 中启用 vSphere Lifecycle Manager 用户界面。

有关 vSphere Lifecycle Manager 的详细信息,请参见《管理主机和集群生命周期》文档。

本章讨论了以下主题:

n 要求

n 在 vSphere Lifecycle Manager 管理的集群上启用 vSphere with Tanzu

n 升级 主管集群

n 将主机添加到 主管集群

n 从 主管集群 中移除主机

n 禁用主管集群

要求
要在 vSphere Lifecycle Manager 管理的 vSphere 集群上配置 vSphere with Tanzu,您的环境必须满
足特定要求。

系统要求
要启用 vSphere with Tanzu,请确认 vSphere 集群上的组件满足以下要求:

n vCenter Server 的版本必须为 7.0 U1。

n 所有 ESXi 主机的版本必须为 7.0 U1。

n 已向要用作 主管集群 中一部分的所有 ESXi 主机分配一个 VMware vSphere 7 Enterprise Plus with
Add-on for Kubernetes 许可证

n 已在集群上配置 vSphere 网络连接。您无法使用 vSphere Lifecycle Manager 管理配置有 NSX-T


Data Center 的集群。

VMware, Inc. 194


vSphere with Tanzu 配置和管理

在 vSphere Lifecycle Manager 管理的集群上启用 vSphere


with Tanzu
要运行 Kubernetes 工作负载,可以在使用单个 vSphere Lifecycle Manager 映像管理的集群上启用
vSphere with Tanzu。

启用了 vSphere with Tanzu 的集群称为 主管集群。启用后,可以使用 vSphere Lifecycle Manager 管


理 主管集群。

有关启用集群的步骤,请参见使用 vSphere 网络堆栈启用工作负载管理平台。

升级 主管集群
可以更新到最新版本的 vSphere with Tanzu,其中包括支持 vSphere with Tanzu 集群的 vSphere 基础
架构、Kubernetes 版本,以及适用于 vSphere Lifecycle Manager 所管理集群上的 vSphere 的
Kubernetes CLI 工具。

通过从 vSphere Lifecycle Manager 修复集群,可以升级 主管集群 中主机的 ESXi 版本。

注 仅当 主管集群 由 vSphere Lifecycle Manager 管理时,才能使用 vSphere Lifecycle Manager 升级


该集群。

主机升级后,vSphere Lifecycle Manager 会将控制权归还 WCP 服务,然后执行 vSphere with Tanzu 任


务。请参见如何更新 vSphere with Tanzu 集群。

步骤

1 从 vSphere Client 菜单中,选择工作负载管理。

2 选择更新选项卡。

3 选择要更新到的可用版本。

例如,选择版本 v1.17.4-vsc0.0.2-16293900。

4 选择要将更新应用到的 主管集群。

5 要启动更新,请单击应用更新。

6 使用近期任务窗格监控更新的状态。

将主机添加到 主管集群
作为 vSphere 管理员,您可能需要横向扩展 主管集群 以运行更多工作负载。要向集群添加容量,可以将
ESXi 主机添加到 vSphere Lifecycle Manager 管理的集群。

前提条件

n 获取主机 root 用户帐户的用户名和密码。

n 确认受防火墙保护的主机可以与 vCenter Server 进行通信。

VMware, Inc. 195


vSphere with Tanzu 配置和管理

步骤

1 从 vSphere Client 菜单中,选择工作负载管理。

2 右键单击该数据中心、集群或文件夹,然后选择添加主机。

3 输入主机的 IP 地址或名称,然后单击下一步。

4 输入管理员凭据,然后单击下一步。

5 检查主机摘要,然后单击下一步。

6 将许可证分配给主机,然后单击完成。

7 在添加主机向导中,单击下一步。

8 检查摘要,然后单击完成。

注 如果主机属于同一数据中心,则可以将其移至 主管集群 中。要移动主机,请将其置于维护模式,


然后将其拖到集群中。

从 主管集群 中移除主机
作为 vSphere 管理员,您可能需要缩小 主管集群 以节省成本。要减少 主管集群 的容量,可以从
vSphere Lifecycle Manager 管理的集群中移除 ESXi 主机。

前提条件

在可以从集群中移除主机之前,必须关闭正在主机上运行的所有虚拟机的电源,或者将虚拟机迁移到新主
机。

步骤

1 在 vSphere Client 中,导航到要从中移除主机的集群。

2 右键单击主机,然后在弹出菜单中选择进入维护模式。

3 在显示的确认对话框中,单击是。

确认对话框还会询问您是否要将已关闭电源的虚拟机移到其他主机。如果您希望这些虚拟机在集群中的
某个主机上保持注册状态,可使用此选项。

主机图标会改变,并且“maintenance mode”一词将添加到名称中,其外面标有圆括号。

4 从清单中选择主机图标,并将其拖至新位置。

可将主机移至另一个集群或另一个数据中心。

vCenter Server 将主机移至新位置。

5 右键单击主机,然后在弹出菜单中选择退出维护模式。

6 (可选) 如果需要,重新启动任何虚拟机。

VMware, Inc. 196


vSphere with Tanzu 配置和管理

禁用主管集群
您可以从 vSphere Lifecycle Manager 管理的 vSphere 集群中禁用 vSphere with Tanzu,以使其可用
于传统工作负载。

在集群上禁用 vSphere with Tanzu 时,WCP 服务将停止并从集群中删除所有工作负载。

步骤

1 从 vSphere Client 菜单中,选择工作负载管理。

2 选择集群选项卡。

3 选择要禁用 vSphere with Tanzu 的集群。

4 单击禁用。

此时将显示禁用集群对话框,其中一条消息指出将在集群上禁用所有 Kubernetes 工作负载和 NSX-T


Data Center 配置。

5 单击禁用。

VMware, Inc. 197


更新 vSphere with Tanzu 集群
11
可以更新到最新版本的 vSphere with Tanzu,包括支持 vSphere with Tanzu 集群的 vSphere 基础架
构、Kubernetes 版本和 适用于 vSphere 的 Kubernetes CLI 工具。

本章讨论了以下主题:

n 关于 vSphere with Tanzu 集群更新

n 支持的更新路径

n 通过执行 vSphere 命名空间更新来更新 主管集群

n 更新 kubectl 的 vSphere 插件

n 更新 Tanzu Kubernetes 集群

关于 vSphere with Tanzu 集群更新


vSphere with Tanzu 支持对 主管集群 和 Tanzu Kubernetes 集群以及支持这些集群的基础架构执行滚动
更新。

如何更新 vSphere with Tanzu 集群


vSphere with Tanzu 对 主管集群 和 Tanzu Kubernetes 集群使用滚动更新模型。滚动更新模型可确保在
更新过程中将集群工作负载的停机时间降至最低。滚动更新包括升级 Kubernetes 软件版本以及支持
Kubernetes 集群的基础架构和服务,如虚拟机配置和资源、vSphere 服务和命名空间以及自定义资源。

为确保成功更新,您的配置必须满足多个兼容性要求,因此系统会实施复查条件以确保集群已准备好进行
更新,并在集群升级失败时支持回滚。

注 vSphere with Tanzu 更新不仅仅是升级 Kubernetes 软件版本。我们使用“更新”(而非“升级”)


一词描述此过程,因为升级是增加软件版本的有限更新形式。

主管集群 更新和 Tanzu Kubernetes 集群更新之间的依赖关系


在大多数情况下,可以独立于 Tanzu Kubernetes 集群更新来更新 主管集群。您可以选择仅更新 主管集
群 或仅更新 Tanzu Kubernetes 集群。

但是,目前这两种类型的集群更新之间存在依赖关系。有关更新路径,请参见支持的更新路径。

VMware, Inc. 198


vSphere with Tanzu 配置和管理

关于 主管集群 更新
启动 主管集群 更新时,系统将创建一个新的控制平面节点,并将其加入到现有控制平面。在此更新阶段,
vSphere 清单将显示四个控制平面节点,因为系统会添加一个新的更新节点,然后移除旧的过期节点。对
象将从一个旧的控制平面节点迁移到该新的控制平面节点,并移除旧的控制平面节点。此过程逐个重复执
行,直到所有控制平面节点都已更新。控制平面更新后,将以类似的滚动更新方式更新工作节点。工作节
点是 ESXi 主机,每个 ESXi 主机上的每个 spherelet 进程逐个进行更新。

可以选择执行两种类型的 主管集群 更新:主管命名空间更新或更新所有内容,包括 VMware 版本和


Kubernetes 版本。

可以使用 vSphere 命名空间更新工作流更新主管集群运行的 Kubernetes 版本(例如从 Kubernetes


1.16.7 更新到 Kubernetes 1.17.4)以及支持 Kubernetes 集群的基础架构。这种类型的更新较为频繁,用
来与 Kubernetes 发布周期保持一致。以下是 vSphere 命名空间更新顺序。

1 升级 vCenter Server。

2 执行主管命名空间更新(包括 Kubernetes 升级)。

要执行 vSphere 命名空间更新,请参见通过执行 vSphere 命名空间更新来更新 主管集群。

可以使用更新所有内容工作流更新所有 vSphere with Tanzu 组件。更新主要版本时需要采用这种类型的


更新,例如从 NSX-T 3.0 更新到 3.X,以及从 vSphere 7.0 更新到 7.X。此更新工作流不常执行,具体取
决于何时有新的 VMware 产品版本发布。以下是更新所有内容的顺序:

1 升级 NSX-T Data Center。

2 升级 vCenter Server。

3 升级 ESXi 主机。

4 执行主管命名空间更新(包括 Kubernetes 升级)。

关于 Tanzu Kubernetes 集群更新


更新 主管集群 时,支持部署到该 主管集群 的 Tanzu Kubernetes 集群的基础架构组件(如 Tanzu
Kubernetes Grid 服务)也会进行更新。每个基础架构更新都可以包括支持 Tanzu Kubernetes Grid 服务
的服务(CNI、CSI、CPI)的更新,以及可应用于现有 Tanzu Kubernetes 集群的控制平面和工作节点的
更新配置设置。为确保您的配置符合兼容性要求,vSphere with Tanzu 会在滚动更新期间执行预检查并实
施合规性。

要对 Tanzu Kubernetes 集群执行滚动更新,通常需要更新集群清单。请参见更新 Tanzu Kubernetes 集


群。但是,请注意,执行 vSphere 命名空间更新时,系统会立即将更新的配置传播到所有 Tanzu
Kubernetes 集群。这些更新可自动触发 Tanzu Kubernetes 控制平面和工作节点的滚动更新。

用于替换集群节点的滚动更新过程类似于 Kubernetes 部署中的 pod 滚动更新。有两个不同的控制器负责


执行 Tanzu Kubernetes 集群的滚动更新:加载项控制器和 TanzuKubernetesCluster 控制器。在这两个
控制器中,滚动更新有三个关键阶段:更新加载项、更新控制平面以及更新工作节点。这些阶段按顺序进
行,并执行预检查以防止某一步骤在前一步骤充分完成之前开始。如果确定不需要执行这些步骤,则可以
跳过这些步骤。例如,更新可能仅影响工作节点,因此不需要任何加载项或控制平面更新。

VMware, Inc. 199


vSphere with Tanzu 配置和管理

在更新过程中,系统会添加一个新的集群节点,并等待该节点与目标 Kubernetes 版本一起上线。然后,


系统将旧节点标记为删除,移至下一个节点,并重复此过程。移除所有 pod 后,才会删除旧节点。例如,
如果 pod 定义为 PodDisruptionBudgets 以阻止某节点完全引流,则该节点将隔离,直到可以逐出这些
pod 后才会移除。系统首先升级所有控制平面节点,然后再升级工作节点。在更新过程中,Tanzu
Kubernetes 集群状态将更改为“正在更新”。滚动更新过程完成后,Tanzu Kubernetes 集群状态将更
改为“正在运行”。

在 Kubernetes 版本升级过程中,在不受复制控制器监管的 Tanzu Kubernetes 集群上运行的 Pod 将在


Tanzu Kubernetes 集群更新期间作为工作节点引流过程的一部分删除。如果手动触发集群更新或由
vSphere 命名空间更新自动触发,则会出现此情况。不受复制控制器监管的 Pod 包括不作为
Deployment 或 ReplicaSet 规范的一部分创建的 Pod。有关详细信息,请参考 Kubernetes 文档中的
Pod 生命周期:Pod 生命周期主题。

支持的更新路径
遵循用于升级工作负载管理组件(包括 主管集群 和 Tanzu Kubernetes 集群)的受支持更新路径。

请按照下面所述路径更新工作负载管理组件。

前提条件

n 熟悉工作负载管理更新过程。请参见关于 vSphere with Tanzu 集群更新。

n 阅读发行说明。请参见 vSphere with Tanzu 发行说明。

n 如果在 vSphere 7.0 上使用工作负载管理的初始版本,则必须先将 vSphere 命名空间更新到正式发布


后的第一个可用版本,以便安装 Tanzu Kubernetes 集群升级功能。有关详细信息,请参考发行说明
中的 2020 年 5 月 19 日版本。

步骤

1 将 vCenter Server 更新到 vSphere 7 U1 版本。请参见 vCenter Server 文档中的升级 vCenter


Server Appliance。

2 根据下表按要求更新 Tanzu Kubernetes 集群。请参见更新 Tanzu Kubernetes 集群。

当前版本 更新要求和建议

v1.16.8 n 与 vSphere 7.0 U1 不兼容。


n 与 Antrea CNI 不兼容。
对 vSphere 7.0 U1 执行 vSphere 命名空间更新之前,必须先更新到与 vSphere
7.0 U1 兼容的版本。
对 vSphere 7.0 U1 执行 vSphere 命名空间更新之前,应更新到与 Antrea 兼容的
版本,以避免在置备集群时出现错误 Antrea CNI not supported in current TKC
version。

v1.16.12 n 与 vSphere 7.0 U1 兼容。


n 与 Antrea CNI 不兼容。

v1.16.14 n 与 vSphere 7.0 U1 兼容。


n 与 Antrea CNI 兼容。
对 vSphere 7.0 U1 执行 vSphere 命名空间更新之前,建议使用 1.16 版本。

VMware, Inc. 200


vSphere with Tanzu 配置和管理

当前版本 更新要求和建议

v1.17.7 n 与 vSphere 7.0 U1 兼容。


n 与 Antrea CNI 不兼容。

v1.17.8 n 与 vSphere 7.0 U1 兼容。


n 与 Antrea CNI 兼容。
对 vSphere 7.0 U1 执行 vSphere 命名空间更新之前,最低版本应为 1.17。

v1.17.11 n 与 vSphere 7.0 U1 兼容。


n 与 Antrea CNI 兼容。
对 vSphere 7.0 U1 执行 vSphere 命名空间更新之前,建议使用 1.17 版本。

v1.18.5 n 与 vSphere 7.0 U1 兼容。


n 与 Antrea CNI 兼容。
新发布的 1.18 版本。

3 执行 vSphere 命名空间更新。请参见通过执行 vSphere 命名空间更新来更新 主管集群。

4 在内容库中提供时,将 Tanzu Kubernetes 集群更新到 1.18 版本。请参见更新 Tanzu Kubernetes 集


群。

通过执行 vSphere 命名空间更新来更新 主管集群


要更新一个或多个 主管集群(包括 主管集群 运行的 Kubernetes 版本,以及支持 Tanzu Kubernetes 集
群的基础架构,其中包括 Tanzu Kubernetes Grid 服务),请执行 vSphere 命名空间更新。

vSphere with Tanzu 有一个新版本实体。该版本实体是语义版本字符串,格式为 v1.18.2-


vsc0.0.5-16762486,其中前缀是 Kubernetes 版本 (v1.18.2),后缀是 vSphere 命名空间版本
(vsc0.0.5-16762486)。

下表列出了可用的 主管集群 版本:

版本 描述

v1.18.2-vsc0.0.5-16762486 最新的 主管集群 版本;支持 vSphere 7.0.1 U1,建议使用。

v1.17.4-vsc0.0.5-16762486 最低的 主管集群 版本,其中包含支持 Antrea CNI 的 Tanzu


Kubernetes Grid 服务。

v1.16.7-vsc0.0.5-16762486 如果运行的是此版本,则应至少将其更新到 1.17。

前提条件

在执行 vSphere 命名空间更新之前,请阅读发行说明。

要安装所需的二进制文件,请将 vCenter Server Appliance 和 ESXi 主机升级到受支持的版本。请参见


vCenter Server 文档中的升级 vCenter Server Appliance。

注 执行 vSphere 命名空间更新时,所有已置备的 Tanzu Kubernetes 集群都必须处于正在运行状态。如


果 Tanzu Kubernetes 处于正在创建或正在删除状态,请等待该过程完成,然后再更新 主管集群,否则可
能不会成功。

VMware, Inc. 201


vSphere with Tanzu 配置和管理

步骤

1 以 vSphere 管理员身份登录到 vCenter Server。

2 选择菜单 > 工作负载管理。

3 选择命名空间 > 更新选项卡。

4 选择要更新到的可用版本。

例如,选择版本 v1.18.2-vsc0.0.5-16762486。

注 必须以渐进方式更新。不要跳过更新,例如从 1.16 更新到 1.18。更新途径应为 1.16、1.17、1.18。

5 选择一个或多个要将更新应用到的 主管集群。

6 要启动更新,请单击应用更新。

7 使用近期任务窗格监控更新的状态。

更新 kubectl 的 vSphere 插件
更新 vSphere 命名空间后,会更新 kubectl 的 vSphere 插件。

最新版本的 kubectl 的 vSphere 插件 将在名为 TANZU-KUBERNETES-CLUSTER-NAME-ca 的 Kubernetes 密钥


中下载并安装 Tanzu Kubernetes 集群根 CA 证书。该插件使用此证书在相应集群的证书颁发机构数据存
储中填充 CA 信息。要下载并安装 kubectl 的 vSphere 插件,请参见下载并安装 适用于 vSphere 的
Kubernetes CLI 工具。有关 TANZU-KUBERNETES-CLUSTER-NAME-ca 密钥的详细信息,请参见 Tanzu
Kubernetes 集群密钥。

更新 Tanzu Kubernetes 集群
可以通过更新分发版本、虚拟机类或存储类来更新 Tanzu Kubernetes 集群,包括 Kubernetes 版本。

Tanzu Kubernetes 集群更新要求


在执行 Tanzu Kubernetes 集群更新之前,请阅读发行说明。

要更新 Tanzu Kubernetes 集群,请先执行 vSphere 命名空间更新。执行 vSphere 命名空间更新时,所


有 Tanzu Kubernetes 集群都必须处于正在运行状态。请参见通过执行 vSphere 命名空间更新来更新 主
管集群。

Kubernetes 软件版本是集群清单中采用语义版本表示法的字符串。例如,如果版本为 1.18.5,则“1”是


主要版本,“18”是次要版本,“5”是修补程序版本。

升级现有 Tanzu Kubernetes 集群的 Kubernetes 版本时,请遵循以下要求:

n 您不能降低版本。例如,无法从 Kubernetes v1.18 降级到 v1.17。

n 可以升级次要版本,但只能逐步升级。不支持跳过次要版本。例如,可以从 Kubernetes v1.17 升级到


v1.18,但无法从 Kubernetes v1.16 升级到 v1.18。

n 无法更改主要版本,例如从 v1.18 升级到 v2.0。

VMware, Inc. 202


vSphere with Tanzu 配置和管理

可以指定完全限定版本,也可以使用版本快捷方式,如 version: v1.18.5(解析为与该修补程序版本匹配


的最新映像)或 version: v1.18(解析为最新匹配的修补程序版本)。解析后的版本在集群清单中显示为
fullVersion,例如 v1.18.5+vmware.1-tkg.1.c40d30d。

注 当使用版本快捷方式创建集群时,系统会将 fullVersion 添加到清单中。要使用版本快捷方式执行


Kubernetes 分发版本升级,必须从清单中取消设置(移除)fullVersion。

执行 Tanzu Kubernetes 集群更新


可以通过对 TanzuKubernetesCluster 规范进行以下一项或多项修改来启动滚动更新:

n 通过升级 Kubernetes 版本更新 Tanzu Kubernetes 集群

n 通过更改 VirtualMachineClass 更新 Tanzu Kubernetes 集群

n 通过更改 StorageClass 更新 Tanzu Kubernetes 集群

注 虽然这些是启动滚动更新的最常用方法,但它们并不是唯一的方法。对任何配置元素进行更改也可以启
动滚动更新。例如,当系统尝试在新映像上运行所有节点时,重命名或替换与分发版本对应的
VirtualMachineImage 会启动滚动更新。此外,更新 主管集群 也会触发在其中部署的 Tanzu Kubernetes
集群的滚动更新。例如,如果更新 vmware-system-tkg-controller-manager,则系统将向清单生成器中引
入新值,并且控制器将启动滚动更新以部署这些值。

集群清单更新方法
要更新集群,需要更新集群清单。可通过各种方法执行此操作,包括:

n 使用 kubectl edit tanzukubernetescluster/CLUSTER-NAME 命令。此命令将在您的 KUBE_EDITOR


或 EDITOR 环境变量定义的文本编辑器中打开整个集群清单。保存文件时,将使用所做更改更新集
群。有关 kubectl edit 命令的详细信息,请参见 Kubernetes 文档中的 edit 命令。要使用 kubectl
edit 方法,请参阅以下主题:

n 通过升级 Kubernetes 版本更新 Tanzu Kubernetes 集群

n 通过更改 VirtualMachineClass 更新 Tanzu Kubernetes 集群

n 通过更改 StorageClass 更新 Tanzu Kubernetes 集群

n 使用 kubectl patch 命令。此命令执行集群的“就地”更新。此命令的目的是提供一种升级


Kubernetes 版本的方法,也是此处介绍的方法。有关 kubectl patch 命令的详细信息,请参见
Kubernetes 文档中的使用 kubectl patch 就地更新 API 对象。要使用 kubectl patch 方法,请参阅
以下主题:

n 使用 Patch 方法更新 Tanzu Kubernetes 集群

n 使用 kubectl apply 命令与手动更新的本地 YAML 文件。虽然这种方法具有类似创建集群的方式的优


势,但如果您无权访问当前集群 YAML,则此方法可能具有破坏性,因此不建议使用。

VMware, Inc. 203


vSphere with Tanzu 配置和管理

通过升级 Kubernetes 版本更新 Tanzu Kubernetes 集群


通过升级 Kubernetes 版本更新 Tanzu Kubernetes 集群。

可以通过升级 Kubernetes 版本更新 Tanzu Kubernetes 集群。要执行此操作,请在集群清单


的 .spec.distribution.version 和 .spec.distribution.fullVersion 属性中更改集群的分发版本。

前提条件

参阅支持的 Tanzu Kubernetes 版本列表,了解版本兼容性和升级建议。请参见支持的更新路径。

此任务使用命令 kubectl edit tanzukubernetescluster/CLUSTER-NAME 更新集群清单。kubectl edit 命令


将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件时,将使用
所做更改更新集群。请参见为 Kubectl 指定默认的文本编辑器。

步骤

1 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

2 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

3 获取目标 Tanzu Kubernetes 集群和版本。

kubectl get tanzukubernetescluster

例如:

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.17.8+vmware.1-tkg.1.5417466 19h running

4 通过运行以下任一命令,列出可用的 Tanzu Kubernetes 版本。

kubectl get tanzukubernetesreleases

kubectl get virtualmachineimages

在此示例场景中,我们将 Tanzu Kubernetes 集群从 v1.17.8 升级到 v1.18.5。

5 运行以下命令以编辑集群清单。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

VMware, Inc. 204


vSphere with Tanzu 配置和管理

6 通过以下方式编辑清单:更改 version 字符串,并取消设置 fullVersion 或将其设为 null,以避免在


发现过程中可能出现版本不匹配问题。

例如,将清单从以下内容:

spec:
distribution:
fullVersion: v1.17.8+vmware.1-tkg.1.5417466
version: v1.17.8

更改为以下内容:

spec:
distribution:
fullVersion: null
version: v1.18.5

7 保存对清单文件所做的更改。

保存该文件时,kubectl 会将更改应用到集群。在后台,主管集群中的虚拟机服务置备新的工作节点。

8 验证 kubectl 是否报告清单编辑已成功记录。

kubectl edit tanzukubernetescluster/tkgs-cluster-1


tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited

注 如果显示错误,或者 kubectl 未报告集群清单已成功编辑,请确保使用 KUBE_EDITOR 环境变量


正确配置了默认文本编辑器。请参见为 Kubectl 指定默认的文本编辑器。

9 验证集群是否正在更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 21h updating

10 验证集群是否已更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 22h running

通过更改 VirtualMachineClass 更新 Tanzu Kubernetes 集群


可以通过更改用于托管集群节点的虚拟机类来更新 Tanzu Kubernetes 集群。

Tanzu Kubernetes Grid 服务 支持通过更改 VirtualMachineClass 定义来更新集群。如果这样做,该服务


将推出具有该新类的新节点,并停止旧节点。请参见关于 Tanzu Kubernetes 集群更新。

VMware, Inc. 205


vSphere with Tanzu 配置和管理

前提条件

此任务使用命令 kubectl edit tanzukubernetescluster/CLUSTER-NAME 更新集群清单。kubectl edit 命令


将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件时,将使用
所做更改更新集群。请参见为 Kubectl 指定默认的文本编辑器。

步骤

1 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

2 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

3 描述目标 Tanzu Kubernetes 集群并检查虚拟机类。

kubectl describe tanzukubernetescluster CLUSTER-NAME

例如,以下集群使用的是 best-effort-small 虚拟机类:

Spec:
...
Topology:
Control Plane:
Class: best-effort-small
...
Workers:
Class: best-effort-small
...

4 列出并描述可用的虚拟机类。

kubectl get virtualmachineclasses

kubectl describe virtualmachineclasses

5 运行以下命令以编辑集群清单。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

6 通过以下方式编辑清单:更改 version 字符串,并取消设置 fullVersion 或将其设为 null,以避免在


发现过程中可能出现版本不匹配问题。

例如,将集群清单从对控制平面和工作节点使用 best-effort-small 虚拟机类:

spec:
topology:
controlPlane:
class: best-effort-small

VMware, Inc. 206


vSphere with Tanzu 配置和管理

...
workers:
class: best-effort-small
...

更改为对控制平面和工作节点使用 best-effort-large 虚拟机类:

spec:
topology:
controlPlane:
class: best-effort-large
...
workers:
class: best-effort-large
...

7 保存对清单文件所做的更改。

保存该文件时,kubectl 会将更改应用到集群。在后台,Tanzu Kubernetes Grid 服务 将置备新的节


点虚拟机并停止旧虚拟机。

8 验证 kubectl 是否报告清单编辑已成功记录。

kubectl edit tanzukubernetescluster/tkgs-cluster-1


tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited

注 如果显示错误,或者 kubectl 未报告集群清单已成功编辑,请确保使用 KUBE_EDITOR 环境变量


正确配置了默认文本编辑器。请参见为 Kubectl 指定默认的文本编辑器。

9 验证集群是否正在更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 21h updating

10 验证集群是否已更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 22h running

通过更改 StorageClass 更新 Tanzu Kubernetes 集群


可以通过更改集群节点使用的存储类来更新 Tanzu Kubernetes 集群。

Tanzu Kubernetes Grid 服务 支持通过更改节点池的 StorageClass(即更改属


性 .spec.topology.controlPlane.storageClass 或属性 .spec.topology.workers.storageClass)来更新
集群。请参见关于 Tanzu Kubernetes 集群更新。

VMware, Inc. 207


vSphere with Tanzu 配置和管理

前提条件

此任务使用命令 kubectl edit tanzukubernetescluster/CLUSTER-NAME 更新集群清单。kubectl edit 命令


将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件时,将使用
所做更改更新集群。请参见为 Kubectl 指定默认的文本编辑器。

步骤

1 使用 主管集群 进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

2 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

3 要确定可用存储类并确定要使用的存储类,请运行以下命令。

kubectl describe tanzukubernetescluster CLUSTER-NAME

4 运行以下命令以编辑集群清单。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

5 通过以下方式编辑清单:更改 version 字符串,并取消设置 fullVersion 或将其设为 null,以避免在


发现过程中可能出现版本不匹配问题。

例如,将集群清单从针对控制平面和工作节点使用 silver-storage-class 类:

spec:
topology:
controlPlane:
...
storageClass: silver-storage-class
workers:
...
storageClass: silver-storage-class

更改为针对控制平面和工作节点使用 gold-storage-class 类:

spec:
topology:
controlPlane:
...
storageClass: gold-storage-class
workers:
...
storageClass: gold-storage-class

VMware, Inc. 208


vSphere with Tanzu 配置和管理

6 保存对清单文件所做的更改。

保存该文件时,kubectl 会将更改应用到集群。在后台,Tanzu Kubernetes Grid 服务 将置备新的节


点虚拟机并停止旧虚拟机。

7 验证 kubectl 是否报告清单编辑已成功记录。

kubectl edit tanzukubernetescluster/tkgs-cluster-1


tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited

注 如果显示错误,或者 kubectl 未报告集群清单已成功编辑,请确保使用 KUBE_EDITOR 环境变量


正确配置了默认文本编辑器。请参见为 Kubectl 指定默认的文本编辑器。

8 验证集群是否正在更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 21h updating

9 验证集群是否已更新。

kubectl get tanzukubernetescluster


NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE
tkgs-cluster-1 3 3 v1.18.5+vmware.1-tkg.1.c40d30d 22h running

使用 Patch 方法更新 Tanzu Kubernetes 集群


可以使用 kubectl patch 方法对 Tanzu Kubernetes 集群执行“就地”更新。可使用 kubectl patch 方法
替代 kubectl edit 命令执行任一支持的集群更新操作。

关于 Kubectl 修补程序命令
kubectl patch 命令对集群执行“就地”更新。此命令的目的是提供一种升级 Kubernetes 版本的方法,
也是此处介绍的方法。有关 kubectl patch 命令的详细信息,请参见 Kubernetes 文档中的使用 kubectl
patch 就地更新 API 对象。

下文展示的方法使用 UNIX shell 命令 read 从键盘获取输入并将其分配给名为 $PATCH 的变量。kubectl


patch 命令将调用 Kubernetes API 以更新集群清单。--type=merge 标记表示数据只包含不同于现有清单
的属性。

VMware, Inc. 209


vSphere with Tanzu 配置和管理

使用修补程序方法升级 Kubernetes 版本
触发滚动更新的最常用方法是使用 .spec.distribution.version 和 .spec.distribution.fullVersion 属
性更改集群的 Kubernetes 分发版本。您需要更新 version 提示并取消设置 fullVersion 或将其设为
null,以避免发现过程中可能出现的版本不匹配问题。

$ read -r -d '' PATCH <<'EOF'


spec:
distribution:
fullVersion: null # NOTE: Must set to null when updating just the version field
version: v1.18.5
EOF

使用 kubectl patch 命令应用更新。必须在 "$PATCH" 变量两侧加上引号,以在集群清单中保留换行符。将


TKG-CLUSTER-NAME 值替换为集群的实际名称。

kubectl patch --type=merge tanzukubernetescluster TKG-CLUSTER-NAME --patch "$PATCH"

预期结果:

tanzukubernetescluster.run.tanzu.vmware.com/TKG-CLUSTER-NAME patched

通过更改节点的 VirtualMachineClass 使用 Patch 方法更新集群


触发 Tanzu Kubernetes 集群滚动更新的另一种方法是更改节点池的 VirtualMachineClass,即更改属
性 .spec.topology.controlPlane.class 或属性 .spec.topology.workers.class。

read -r -d '' PATCH <<'EOF'


spec:
topology:
controlPlane:
class: best-effort-xlarge
workers:
class: best-effort-xlarge
EOF

使用 kubectl patch 命令应用更新,并将变量替换为集群名称。

kubectl patch --type=merge tanzukubernetescluster TKG-CLUSTER-NAME --patch "$PATCH"

预期结果:

tanzukubernetescluster.run.tanzu.vmware.com/TKG-CLUSTER-NAME patched

VMware, Inc. 210


vSphere with Tanzu 配置和管理

通过更改节点的 StorageClass 使用 Patch 方法更新集群


触发 Tanzu Kubernetes 集群滚动更新的另一种方法是更改节点池的 StorageClass,即更改属
性 .spec.topology.controlPlane.storageClass 或属性 .spec.topology.workers.storageClass。

$ read -r -d '' PATCH <<'EOF'


spec:
topology:
controlPlane:
storageClass: gc-storage-profile
workers:
storageClass: gc-storage-profile
EOF

使用 kubectl patch 命令应用更新,并将变量替换为集群名称。

kubectl patch --type=merge tanzukubernetescluster TKG-CLUSTER-NAME --patch "$PATCH"

预期结果:

tanzukubernetescluster.run.tanzu.vmware.com/TKG-CLUSTER-NAME patched

VMware, Inc. 211


vSphere with Tanzu 故障排除和最
佳做法 12
可以对 vSphere with Tanzu 中的基础架构使用以下故障排除技术和最佳做法。

本章讨论了以下主题:

n 在 vSphere with Tanzu 中执行存储故障排除

n 网络故障排除

n Tanzu Kubernetes 集群故障排除

n 对工作负载管理启用问题进行故障排除

n 关闭和启动 vSphere with Tanzu 工作负载域

在 vSphere with Tanzu 中执行存储故障排除


在 vSphere with Tanzu 中,为您的存储环境使用故障排除技术。

对非 vSAN 数据存储上的控制层面虚拟机使用反关联性规则
在包含 vSphere with Tanzu 的集群中使用除 vSAN 以外的其他数据存储时,请将三个控制层面虚拟机放
置在不同的数据存储上,以确保可用性。

由于控制层面虚拟机由系统管理,因此无法手动迁移它们。使用数据存储集群和 Storage DRS 的组合来重


新平衡控制层面虚拟机,并将其放置在单独的数据存储中。

步骤

1 在 vSphere Client 中,创建数据存储集群。

a 导航到数据中心。

b 右键单击数据中心对象并选择新建数据存储集群。

c 对数据存储集群进行命名,并确保启用打开 Storage DRS。

d 将集群自动化级别设置为非自动 (手动模式)。

e 将 Storage DRS 运行时设置保留为默认值。

f 选择启用了 vSphere with Tanzu 的 ESXi 集群。

VMware, Inc. 212


vSphere with Tanzu 配置和管理

g 选择要添加到数据存储集群的所有共享数据存储。

h 单击完成。

2 定义控制层面虚拟机的 Storage DRS 规则。

a 导航到数据存储集群。

b 单击配置选项卡,然后单击配置下的规则。

c 单击添加图标并输入规则的名称。

d 确保启用规则已经启用。

e 将规则类型设置为虚拟机反关联性。

f 单击添加图标,然后选择三个主管控制层面虚拟机。

g 单击确定完成配置。

3 创建虚拟机替代项。

a 导航到数据存储集群。

b 单击配置选项卡,然后单击配置下的虚拟机替代项。

c 单击添加图标,然后选择三个控制层面虚拟机。

d 要启用 Storage DRS 自动化级别,请选中替代复选框,并将该值设置为全自动。

e 单击完成。

结果

此任务仅为控制层面虚拟机启用 Storage DRS,并将虚拟机重新平衡到不同的数据存储上。

执行 Storage vMotion 后,您可以移除 SDRS 规则和替代项,禁用 Storage DRS,然后移除数据存储集


群。

从 vSphere 中移除的存储策略继续显示为 Kubernetes 存储类


使用 vSphere Client 从 vCenter Server 或 主管集群中的命名空间中移除存储策略时,其匹配的存储类仍
保留在 Kubernetes 环境中,但无法使用。

问题

如果运行 kubectl get sc 命令,则输出会继续在命名空间中将存储类列为可用。但是,不能使用存储


类。例如,尝试对新的持久卷声明使用存储类会失败。

如果 Kubernetes 部署已经使用存储类,则部署的行为可能会不可预测。

解决方案

1 要验证命名空间中存在哪些存储类,请运行 kubectl describe namespace namespace_name 命


令。

如果移除存储类匹配的存储策略,则该命令的输出不会列出该存储类。

VMware, Inc. 213


vSphere with Tanzu 配置和管理

2 如果存储类已被部署使用,请还原该存储类。

a 通过 vSphere Client,使用与您移除的策略相同的名称创建新的存储策略。

例如,如果您删除了 Gold 策略,请将新策略命名为 Gold。请参见为 vSphere with Tanzu 创建


存储策略。

b 将策略分配给命名空间。

请参见更改命名空间上的存储设置。

将策略分配给命名空间后,vSphere with Tanzu 将删除旧存储类,并使用相同名称创建匹配的存


储类。

网络故障排除
您可以对使用 NSX 配置 vSphere with Tanzu 时可能遇到的网络问题进行故障排除。

将 vCenter Server 注册到 NSX Manager


某些情况下,您可能需要在 NSX Manager 中重新注册 vCenter Server OIDC,例如,当 vCenter
Server 的 FQDN/PNID 发生变化时。

步骤

1 通过 SSH 连接到 vCenter Server Appliance

2 运行命令 shell。

3 要获取 vCenter Server 指纹,请运行命令 - openssl s_client -connect <vcenterserver-


FQDN:443 </dev/null 2>/dev/null | openssl x509 -fingerprint -sha256 -noout -
in /dev/stdin。

此时将显示指纹。例如,
08:77:43:29:E4:D1:6F:29:96:78:5F:BF:D6:45:21:F4:0E:3B:2A:68:05:99:C3:A4:89:8F:F2:0B:EA:3A:
BE:9D

4 复制 SHA256 指纹并移除冒号。

08774329E4D16F2996785FBFD64521F40E3B2A680599C3A4898FF20BEA3ABE9D

5 要更新 vCenter Server 的 OIDC,请运行以下命令:

curl --location --request POST 'https://<NSX-T_ADDRESS>/api/v1/trust-management/oidc-uris' \


--header 'Content-Type: application/json' \
--header 'Authorization: Basic <AUTH_CODE>' \
--data-raw '{
"oidc_type": "vcenter",
"oidc_uri": "https://<VC_ADDRESS>/openidconnect/vsphere.local/.well-known/openid-
configuration",
"thumbprint": "<VC_THUMBPRINT>"
}'

VMware, Inc. 214


vSphere with Tanzu 配置和管理

无法更改 NSX 设备密码


您可能无法更改 root、admin 或 audit 用户的 NSX 设备密码。

问题

尝试通过 vSphere Client 更改 root、admin 或 audit 用户的 NSX 设备密码可能会失败。

原因

在安装 NSX Manager 期间,该过程仅接受所有三个角色使用同一个密码。稍后尝试更改此密码可能会失


败。

解决方案

u 使用 NSX API 更改密码。

有关更多信息,请参见 https://kb.vmware.com/s/article/70691 和《NSX-T Data Center 管理指


南》。

对失败的工作流和不稳定的 NSX Edge 进行故障排除


如果工作流失败或 NSX 或 NSX Edge 不稳定,您可以执行故障排除步骤。

问题

在 vSphere Client 上更改分布式端口组配置时,工作流可能会失败,并且 NSX Edge 可能会变得不稳


定。

原因

按照设计,不允许移除或修改在集群配置的 NSX Edge 集群设置期间创建的覆盖网络和上行链路的分布式


端口组。

解决方案

如果需要更改 NSX Edge 的 VLAN 或 IP 池配置,则必须先从集群中移除 NSX-T Data Center 的元素和


vSphere with Tanzu 配置。

有关移除 NSX-T Data Center 的元素的信息,请参见《NSX-T Data Center 安装指南》。

收集支持包以进行故障排除
您可以在已注册的集群和结构层节点上收集支持包以便进行故障排除,并可将包下载到您的计算机中或将
其上载到文件服务器。

如果选择将包下载到计算机,则会获得一个存档文件,其中包含一个清单文件和每个节点对应的支持包。
如果选择将包上载到文件服务器,则会将清单文件和各个包单独上载到文件服务器。

步骤

1 从浏览器中,使用管理员特权登录到 NSX Manager。

2 选择系统 > 支持包。

VMware, Inc. 215


vSphere with Tanzu 配置和管理

3 选择目标节点。

可用的节点类型有管理节点、Edge、主机和公有云网关。

4 (可选) 指定以天为单位的日志保留期限,以排除早于指定天数的日志。

5 (可选) 切换用于指示是包括还是排除核心文件和审核日志的开关。

注 核心文件和审核日志可能包含敏感信息,如密码或加密密钥。

6 (可选) 选中该复选框可将包上载到文件服务器。

7 单击启动包收集开始收集支持包。

每个节点的日志文件数决定了收集支持包所用的时间。

8 监控收集进程的状态。

状态选项卡显示支持包收集的进度。

9 如果未设置将包发送到文件服务器的选项,请单击下载以下载包。

收集日志文件
可以收集 vSphere with Tanzu 和 NSX-T Data Center 组件中的日志,用于检测错误并进行故障排除。
VMware 技术支持可能会要求提供日志文件。

步骤

1 使用 vSphere Client 登录到 vCenter Server。

2 收集以下日志文件。

日志文件 描述

/var/log/vmware/wcp/wcpsvc.log 包含与 vSphere with Tanzu 启用相关的信息。

/var/log/vmware/wcp/nsxd.log 包含与 NSX-T Data Center 组件配置相关的信息。

3 登录到 NSX Manager。

4 收集 /var/log/proton/nsxapi.log,了解当特定 vSphere with Tanzu 操作失败时 NSX Manager


所返回错误的相关信息。

NSX-T 管理证书、指纹或 IP 地址发生更改时重新启动 WCP 服务


如果在安装 vSphere with Tanzu 之后 NSX-T 管理证书、指纹或 IP 地址发生更改,则必须重新启动 WCP
服务。

NSX-T 证书发生更改时重新启动 vSphere with Tanzu 服务


当前,vSphere with Tanzu 具有如下要求:如果 NSX-T 证书或指纹发生更改,或者 NSX-T IP 地址发生
更改,则必须重新启动 WCP 服务才能使更改生效。如果其中的任何一项发生更改时未重新启动该服务,则
vSphere with Tanzu 和 NSX-T 之间的通信将失败,并且可能会出现某些症状,如 NCP 进入
CrashLoopBackoff 阶段或主管集群资源变得无法部署。

VMware, Inc. 216


vSphere with Tanzu 配置和管理

要重新启动 WCP 服务,请使用 vmon-cli。

1 通过 SSH 以 root 用户身份登录到 vCenter Server。

2 运行命令 shell。

3 运行命令 vmon-cli -h,查看使用语法和选项。

4 运行命令 vmon-cli -l,查看 wcp 进程。

将在列表底部看到 wcp 服务。

5 运行命令 vmon-cli --restart wcp,重新启动 wcp 服务。

您会看到消息 Completed Restart service request。

6 运行命令 vmon-cli -s wcp 并验证 wcp 服务是否已启动。

例如:

root@localhost [ ~ ]# vmon-cli -s wcp


Name: wcp
Starttype: AUTOMATIC
RunState: STARTED
RunAsUser: root
CurrentRunStateDuration(ms): 22158
HealthState: HEALTHY
FailStop: N/A
MainProcessId: 34372

要求将 VDS 用于主机传输节点流量


vSphere with Tanzu 要求将 vSphere 7 虚拟分布式交换机 (VDS) 用于主机传输节点流量。在 vSphere
with Tanzu 中,无法将 NSX-T VDS (N-VDS) 用于主机传输节点流量。

要求使用 VDS
vSphere with Tanzu 要求使用在同一 VDS 上支持 vSphere 7 流量和 NSX-T 3 流量的融合 VDS。在以
前版本的 vSphere 和 NSX-T 中,有一个 VDS(或 VSS)用于 vSphere 流量,一个 N-VDS 用于 NSX-T
流量。vSphere with Tanzu 不支持此配置。如果尝试使用 N-VDS 启用工作负载管理,系统将报告
vCenter 集群不兼容。有关详细信息,请参见对启用工作负载管理的集群兼容性错误进行故障排除。

要使用融合 VDS,请在准备将 ESXi 主机作为传输节点时使用 vCenter 创建 vSphere 7 VDS,并在


NSX-T 中指定此 VDS。仅在 vCenter 端具有 VDS-DSwitch 还不足够。必须按照主题创建传输节点配置
文件中所述和下面所示内容为 VDS-DSwitch 7.0 配置 NSX-T 传输节点配置文件。

VMware, Inc. 217


vSphere with Tanzu 配置和管理

图 12-1. NSX-T 中的 VDS 配置

如果从以前版本升级到 vSphere 7 和 NSX-T 3,则必须从每个 ESXi 传输节点卸载 N-VDS,然后为每个


主机重新配置 VDS。请联系 VMware 全球支持服务部门以获得指导。

Tanzu Kubernetes 集群故障排除


您可以通过连接到任何集群节点、查看集群资源层次结构和收集日志文件对 Tanzu Kubernetes 集群进行
故障排除。

收集 Tanzu Kubernetes 集群的支持包


要对 Tanzu Kubernetes 集群错误进行故障排除,可以运行一个实用程序来收集诊断日志包。

VMware 提供了 TKC Support Bundler 实用程序,可用于收集 Tanzu Kubernetes 集群日志文件并对问


题进行故障排除。

要获取并使用该实用程序,请参阅 VMware 技术支持知识库中的文章如何从 Tanzu Kubernetes 集群收


集诊断日志包 (80949)。

对 vCenter Single Sign-On 连接错误进行故障排除


如果您对 主管命名空间 没有足够的权限,则无法以 vCenter Single Sign-On 用户身份连接到 主管集群
或 Tanzu Kubernetes 集群。

问题

当您尝试以 vCenter Single Sign-On 用户身份连接到 主管集群 或 Tanzu Kubernetes 集群时,kubectl


的 vSphere 插件 返回错误消息 Error from server (Forbidden)。

原因

您对 主管命名空间 没有足够的权限,或者没有集群访问权限。

VMware, Inc. 218


vSphere with Tanzu 配置和管理

解决方案

如果您是操作集群的 DevOps 工程师,请与您的 vSphere 管理员核实是否已向您授予对 主管命名空间 的


编辑权限。请参见创建和配置 vSphere 命名空间。

如果您是使用集群部署工作负载的开发人员,请与您的集群管理员核实是否已向您授予集群访问权限。请
参见向开发人员授予 Tanzu Kubernetes 集群访问权限。

已订阅内容库错误故障排除
如果已订阅内容库达到存储容量限制,将无法置备 Tanzu Kubernetes 集群。

问题

在尝试置备 Tanzu Kubernetes 集群时,将无法从已订阅内容库提取项目,并且显示以下错误:

Internal error occurred: get library items failed for.

原因

已订阅内容库已达到容量限制。内容库由连接的存储提供支持。随着更多 Kubernetes 版本的发布和将


OVA 文件提取到库中,存储空间可能会填满整个容量。

解决方案

迁移到新内容库。请参见将 Tanzu Kubernetes 集群迁移到新内容库。。

对集群置备错误进行故障排除
如果您已置备 Tanzu Kubernetes 集群,但控制平面虚拟机未启动,则可能需要更改虚拟机大小或类。

问题

您已置备 Tanzu Kubernetes 集群。系统正在尝试打开控制平面虚拟机的电源,但出错并显示以下错误消


息:

The host does not have sufficient CPU resources to satisfy the reservation.

原因

虚拟机大小或类不足以进行集群部署。

解决方案

更改虚拟机类型或类。请参见 Tanzu Kubernetes 集群的虚拟机类类型。

VMware, Inc. 219


vSphere with Tanzu 配置和管理

工作负载部署错误故障排除
如果未为经过身份验证的用户配置 PodSecurityPolicy 和绑定,则可能出现工作负载部署错误。

问题

您将容器工作负载部署到 Tanzu Kubernetes 集群,但该工作负载未启动。您会看到类似以下内容的错


误:

Error: container has runAsNonRoot and image will run as root.

原因

已在启用 PodSecurityPolicy 准入控制器的情况下置备 Tanzu Kubernetes 集群。在集群管理员将


PodSecurityPolicy 绑定到经过身份验证的用户之前,经过身份验证的用户不能创建特权或非特权 POD。

解决方案

创建到默认 PodSecurityPolicy 的适当绑定,或定义自定义 PodSecurityPolicy。请参见对 Tanzu


Kubernetes 集群使用 POD 安全策略和 Tanzu Kubernetes Guestbook 教程。

重新启动失败的 Tanzu Kubernetes 集群更新作业


如果更新 Tanzu Kubernetes 集群失败,您可以重新启动更新作业,然后再次尝试进行更新。

问题

更新 Tanzu Kubernetes 集群失败,并导致集群状态变为 upgradefailed。

原因

集群更新失败的原因有很多,如存储不足。要重新启动失败的更新作业并重试集群更新,请完成以下过
程。

解决方案

1 以管理员身份登录到 主管集群。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

2 查找 update_job_name。

kubectl get jobs -n vmware-system-tkg -l "run.tanzu.vmware.com/cluster-namespace=$


{cluster_namespace},cluster.x-k8s.io/cluster-name=${cluster_name}"

3 运行 kubectl proxy,以便可以使用 curl 发出请求。

kubectl proxy &

您应看到 Starting to serve on 127.0.0.1:8001。

注 无法使用 kubectl 修补或更新资源的 .status。

VMware, Inc. 220


vSphere with Tanzu 配置和管理

4 使用 curl 将发出以下修补命令以引发 .spec.backoffLimit。

curl -H "Accept: application/json" -H "Content-Type: application/json-patch+json"


--request PATCH --data '[{"op": "replace", "path": "/spec/backoffLimit", "value": 8}]'
http://127.0.0.1:8001/apis/batch/v1/namespaces/vmware-system-tkg/jobs/${update_job_name}

5 使用 curl 将发出以下修补命令以清除 .status.conditions,从而使作业控制器创建新的 Pod。

$ curl -H "Accept: application/json" -H "Content-Type: application/json-patch+json"


--request PATCH --data '[{"op": "remove", "path": "/status/conditions"}]'
http://127.0.0.1:8001/apis/batch/v1/namespaces/vmware-system-tkg/jobs/${update_job_name}/status

对工作负载管理启用问题进行故障排除
如果无法启用工作负载管理,请尝试以下故障排除提示。

对启用工作负载管理的集群兼容性错误进行故障排除
如果系统指示您的 vSphere 集群不兼容,无法启用工作负载管理,请按照以下故障排除提示执行操作。

问题

尝试启用工作负载管理时,工作负载管理页面指示 vCenter 集群不兼容。

原因

导致出现此错误的可能原因有多种。首先,请确保您的环境满足启用工作负载管理的最低要求:

n 有效的许可证:VMware vSphere 7 Enterprise Plus with Add-on for Kubernetes

n 至少两个 ESXi 主机

n 全自动 DRS

n vSphere HA

n vSphere Distributed Switch 7.0

n 足够的存储容量

如果您的环境满足这些必备条件,但目标 vCenter 集群不兼容,请使用 VMware Datacenter CLI (DCLI)


帮助发现问题。

解决方案

1 通过 SSH 登录到 vCenter Server。

2 以 root 用户身份登录。

3 运行命令 dcli 以列出 VMware Datacenter CLI 帮助。

4 运行以下 DCLI 命令,列出可用的 vCenter 集群。

dcli com vmware vcenter cluster list

VMware, Inc. 221


vSphere with Tanzu 配置和管理

例如:

dcli +username VI-ADMIN-USER-NAME +password VI-ADMIN-PASSWORD com vmware vcenter cluster list

示例结果:

|-----------|---------|------------|----------|
|drs_enabled|cluster |name |ha_enabled|
|-----------|---------|------------|----------|
|True |domain-d7|vSAN Cluster|True |
|-----------|---------|------------|----------|

5 运行以下 DCLI 命令,验证 vCenter 集群的兼容性。

dcli com vmware vcenter namespacemanagement clustercompatibility list

例如:

dcli +username VI-ADMIN-USER-NAME +password VI-ADMIN-PASSWORD com vmware vcenter


namespacemanagement clustercompatibility list

以下示例结果表示环境缺少兼容的 NSX-T VDS 交换机。

|---------|----------|----------------------------------------------------------------------------
------------|
|cluster |compatible|
incompatibility_reasons |
|---------|----------|----------------------------------------------------------------------------
------------|
|domain-d7|False |Failed to list all distributed switches in vCenter 2b1c1fa5-e9d4-45d7-824c-
fa4176da96b8.|
| | |Cluster domain-d7 is missing compatible NSX-T
VDS. |
|---------|----------|----------------------------------------------------------------------------
------------|

6 根据需要运行其他 DCLI 命令以确定其他兼容性问题。除了 NSX-T 错误之外,导致不兼容的其他常见


原因有 DNS 和 NTP 连接问题。

7 要进一步排除故障,请完成下列步骤。

a 跟踪 wcpsvc.log 文件。请参见跟踪工作负载管理日志文件。

b 导航到工作负载管理页面,然后单击启用。

跟踪工作负载管理日志文件
跟踪工作负载管理日志文件可帮助对启用问题和主管集群部署错误进行故障排除。

解决方案

1 建立与 vCenter Server Appliance 的 SSH 连接。

VMware, Inc. 222


vSphere with Tanzu 配置和管理

2 以 root 用户身份登录。

3 运行命令 shell。

将显示以下输出:

Shell access is granted to root


root@localhost [ ~ ]#

4 运行以下命令以跟踪日志。

tail -f /var/log/vmware/wcp/wcpsvc.log

关闭和启动 vSphere with Tanzu 工作负载域


为避免数据丢失以及确保 vSphere with Tanzu 环境的组件和工作负载正常运行,在关闭或启动组件时,
必须遵循指定的顺序。

通常情况下,在应用修补程序、升级或还原 vSphere with Tanzu 环境之后,执行关闭和启动操作。有关


详细信息,请参见 VMware Validated Design 关闭和启动文档,其中提供了这些操作的分步说明。

VMware, Inc. 223

You might also like