153
vSphere with Kubernetes 配置和管理 修改日期2020 7 30 VMware vSphere 7.0 vCenter Server 7.0 VMware ESXi 7.0

vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

  • Upload
    others

  • View
    66

  • Download
    0

Embed Size (px)

Citation preview

Page 1: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere with Kubernetes 配置和管理

修改日期:2020 年 7 月 30 日VMware vSphere 7.0vCenter Server 7.0VMware ESXi 7.0

Page 2: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

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

VMware, Inc.3401 Hillview Ave.Palo Alto, CA 94304www.vmware.com

威睿信息技术(中国)有限公司北京办公室北京市朝阳区新源南路 8 号启皓北京东塔 8 层 801www.vmware.com/cn

上海办公室上海市淮海中路 333 号瑞安大厦 804-809 室www.vmware.com/cn

广州办公室广州市天河路 385 号太古汇一座 3502 室www.vmware.com/cn

版权所有 ©

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 2

Page 3: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

目录

vSphere with Kubernetes 配置和管理 7

1 更新信息 8

2 vSphere with Kubernetes 基础知识 11什么是 vSphere with Kubernetes? 11

什么是 vSphere Pod? 14

什么是 Tanzu Kubernetes 集群? 15

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

vSphere with Kubernetes 用户角色和工作流 18

vSphere with Kubernetes 的许可 24

vSphere with Kubernetes 如何更改 vSphere 环境? 24

3 vSphere with Kubernetes 组件和架构 25vSphere with Kubernetes 架构 25

Tanzu Kubernetes Grid 服务架构 28

Tanzu Kubernetes 集群租户模型 30

vSphere with Kubernetes 中的网络连接 31

vSphere with Kubernetes 中的存储 35

vSphere with Kubernetes 如何与 vSphere 存储集成 40

vSphere CNS-CSI 和准虚拟 CSI 支持的功能 42

vSphere with Kubernetes 中的存储权限 43

vSphere with Kubernetes 的身份验证 43

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

4 配置 主管集群 46vSphere with Kubernetes 系统要求和拓扑 46

为 vSphere with Kubernetes 创建存储策略 51

将 vSphere with Kubernetes 配置为使用 NSX-T Data Center 53

创建 vSphere Distributed Switch 55

部署和配置 NSX Manager 56

添加许可证 57

添加计算管理器 57

创建传输区域 58

创建主机上行链路配置文件 58

创建 Edge 上行链路配置文件 59

为主机隧道端点 IP 地址创建 IP 池 60

VMware, Inc. 3

Page 4: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

创建传输节点配置文件 60

将传输节点配置文件应用于 vSphere 集群 61

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

创建 NSX Edge 集群 63

创建第 0 层上行链路分段 64

创建第 0 层网关 64

在具有 NSX-T Data Center 的集群上启用 vSphere with Kubernetes 65

vSphere with Kubernetes 配置 佳做法 68

更改 主管集群上的存储设置 68

更改 Kubernetes API 端点证书 69

5 在 主管集群上使用命名空间 70创建和配置 主管命名空间 70

针对命名空间上的 Kubernetes 对象配置限制 71

设置容器的默认内存和 CPU 预留与限制 72

使用注册表服务提供专用映像注册表 72

通过 注册表服务在 主管集群上启用专用映像注册表 73

清除专用映像注册表中的映像 73

更改命名空间上的存储设置 73

6 使用 vSphere Pod 75对 主管集群进行身份验证并获取上下文 75

显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类 76

在命名空间中部署应用程序 77

扩展和缩小应用程序 78

将映像推送到注册表服务上的命名空间 78

使用 注册表服务中的映像部署应用程序 79

部署有状态应用程序 81

监控持久卷 83

7 在 vSphere with Kubernetes 中运行 Tanzu Kubernetes 集群 86连接到 Tanzu Kubernetes 集群环境 86

下载并安装 适用于 vSphere 的 Kubernetes CLI 工具 86

下载并安装 TLS 证书 87

以 vCenter Single Sign-On 用户的身份连接到 主管集群 88

以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群 89

以 Kubernetes 管理员用户身份连接到 Tanzu Kubernetes 集群控制平面 91

以系统用户身份使用 SSH 访问 Tanzu Kubernetes 集群节点 92

以系统用户身份使用密码连接到集群节点 93

向开发人员授予 Tanzu Kubernetes 集群访问权限 94

创建 Tanzu Kubernetes 集群 96

vSphere with Kubernetes 配置和管理

VMware, Inc. 4

Page 5: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

用于创建 Tanzu Kubernetes 集群的工作流 96

为 Tanzu Kubernetes 集群创建已订阅内容库 97

置备 Tanzu Kubernetes 集群 99

Tanzu Kubernetes 集群的配置参数 100

Tanzu Kubernetes 集群的虚拟机类类型 103

用于置备 Tanzu Kubernetes 集群的示例 YAML 文件 104

删除 Tanzu Kubernetes 集群 106

在气隙环境中置备 Tanzu Kubernetes 集群 107

将工作负载部署到 Tanzu Kubernetes 集群 112

Tanzu Kubernetes 工作负载示例 112

Tanzu Kubernetes 服务负载平衡器示例 113

Tanzu Kubernetes Ingress 示例 115

Tanzu Kubernetes 持久卷声明示例 119

对 Tanzu Kubernetes 集群使用 POD 安全策略 120

Kubernetes Guestbook 教程:绑定到默认特权 Pod 安全策略 122

默认 Pod 安全策略的示例绑定 123

自定义 Pod 安全策略的示例角色 125

操作 Tanzu Kubernetes 集群 126

使用 vSphere Client 监控 Tanzu Kubernetes 集群状态 126

使用 kubectl 监控 Tanzu Kubernetes 集群状态 126

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

将 Tanzu Kubernetes 集群迁移到新内容库。 128

选择 Tanzu Kubernetes 集群 129

Tanzu Kubernetes 集群生命周期状态 131

Tanzu Kubernetes 集群操作命令 132

Tanzu Kubernetes 集群网络连接命令 133

Tanzu Kubernetes 集群密钥 134

8 更新 vSphere with Kubernetes 集群 135关于 vSphere with Kubernetes 集群更新 135

更新 vSphere 命名空间 137

更新 kubectl 的 vSphere 插件 138

更新 Tanzu Kubernetes 集群 138

9 对 vSphere with Kubernetes 进行故障排除 141在 vSphere with Kubernetes 中执行存储故障排除 141

对非 vSAN 数据存储上的控制层面虚拟机使用反关联性规则 141

从 vSphere 中移除的存储策略继续显示为 Kubernetes 存储类 142

网络故障排除 143

将 vCenter Server 注册到 NSX Manager 143

无法更改 NSX 设备密码 144

vSphere with Kubernetes 配置和管理

VMware, Inc. 5

Page 6: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

对失败的工作流和不稳定的 NSX Edge 进行故障排除 144

收集支持包以进行故障排除 144

收集日志文件 145

NSX-T 管理证书或 IP 地址发生更改时重新启动 WCP 服务 145

要求将 VDS 用于主机传输节点流量 146

Tanzu Kubernetes 集群故障排除 147

Tanzu Kubernetes 集群的已知限制 147

收集 Tanzu Kubernetes 集群的支持包 148

对 vCenter Single Sign-On 连接错误进行故障排除 148

已订阅内容库错误故障排除 149

对集群置备错误进行故障排除 149

工作负载部署错误故障排除 149

重新启动失败的 Tanzu Kubernetes 集群更新作业 150

对工作负载管理启用问题进行故障排除 151

对启用工作负载管理的集群兼容性错误进行故障排除 151

跟踪工作负载管理日志文件 152

vSphere with Kubernetes 配置和管理

VMware, Inc. 6

Page 7: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere with Kubernetes 配置和管理

“vSphere with Kubernetes 配置和管理”提供有关使用 vSphere Client 配置和管理 vSphere with Kubernetes 的信息。此外,还提供了有关使用 kubectl 连接到在 vSphere with Kubernetes 上运行的命

名空间以及在指定的命名空间上运行 Kubernetes 工作负载的信息。

“vSphere with Kubernetes 配置和管理”概述了平台架构,以及设置满足 vSphere with Kubernetes 特定要求的存储、计算及网络连接的注意事项和 佳做法。它提供了有关在现有 vSphere 集群上启用

vSphere with Kubernetes、创建和管理命名空间以及监控使用 VMware Tanzu™ Kubernetes Grid™ 服务 创建的 Kubernetes 集群的说明。

此信息还提供了有关通过 kubectl 与 vSphere with KubernetesKubernetes 控制层面建立会话、运行示

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

目标读者

“vSphere with Kubernetes 配置和管理”的目标用户是希望在 vSphere 中启用 vSphere with Kubernetes、为 DevOps 团队配置和提供命名空间,以及在 vSphere 中管理和监控 Kubernetes 工作负

载的 vSphere 管理员。希望使用 vSphere with Kubernetes 的 vSphere 管理员应具备容器和

Kubernetes 技术的基本知识。

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

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

VMware, Inc. 7

Page 8: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

更新信息 1《vSphere with Kubernetes 配置和管理》会定期更新,并根据需要添加新信息和修复。

修订版本 描述

2020 年 7 月 30 日 n 添加了有关更改 Kubernetes API 端点证书的内容。请参见更改 Kubernetes API 端点证书。

n 添加了有关 Tanzu Kubernetes 集群扩展的内容。请参见选择 Tanzu Kubernetes 集群。

n 添加了有关在 vCenter Server 的 FQDN/PNID 发生变化时将 vCenter Server 注册到 NSX Manager 的主题。请参见将 vCenter Server 注册到 NSX Manager。

2020 年 7 月 17 日 n 更新了示例 kubectl 命令,以指示您必须指定命名空间名称。用于创建 Tanzu Kubernetes 集群的工作流。

2020 年 7 月 10 日 n 添加了有关为 Tanzu Kubernetes 集群重新启动失败的更新作业的故障排除主题。请参见重新

启动失败的 Tanzu Kubernetes 集群更新作业。

n 更新了 vSphere with Kubernetes 架构图形以更正组件标签名称。请参见 vSphere with Kubernetes 架构。

n 更新了 Tanzu Kubernetes 集群 OVA 库 URL,使其结尾包含一个斜杠。请参见下载映像文

件。

n 更新了 VDS 故障排除主题,以对 vSphere 7 VDS 使用正确的术语。请参见要求将 VDS 用于

主机传输节点流量。

2020 年 7 月 8 日 n 更新了系统要求主题中的 NSX Manager、输出 CIDR 和输入 CIDR 要求,并添加了说明,指出

在主机 TEP 和 Edge TEP 使用不同的物理网卡时,它们可以使用相同的 VLAN。请参见

vSphere with Kubernetes 系统要求和拓扑。

2020 年 7 月 2 日 n 添加了一个额外的说明,重申在执行 Kubernetes 版本升级时需要取消设置 fullVersion 版本字

段。请参见更新 Tanzu Kubernetes 集群。

n 添加了一个额外的示例,用于创建 ClusterRoleBinding 以使用默认 PodSecurityPolicy 为经过

身份验证的用户运行一组特权工作负载。请参见默认 Pod 安全策略的示例绑定。

n 更新了有关集群创建 YAML 示例的文本,以指出已实施 Pod 安全策略,因此需要绑定才能创建

部署和 ReplicaSet 对象。请参见用于置备 Tanzu Kubernetes 集群的示例 YAML 文件。

n 更新了通过 SSH 连接到集群节点的主题,以指出在登录后可能需要使用 sudo 执行某些操作。

请参见以系统用户身份使用 SSH 访问 Tanzu Kubernetes 集群节点。

n 更新了有关创建内容库的主题,以指出在有多个 OVA 文件时,您应选择按需同步内容。为

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

VMware, Inc. 8

Page 9: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

修订版本 描述

2020 年 6 月 23 日 n 重新组织了概念和架构主题,改进了结构。

n 更新了创建 Tanzu Kubernetes 集群的配置参数列表,添加了集群命名要求和限制。请参见

Tanzu Kubernetes 集群的配置参数。

n 移除了在 Tanzu Kubernetes 集群中使用嵌入式注册表时对知识库文章的引用。

n 添加了阐明 vSphere with Kubernetes 需要对 vSphere 和 NSX-T 网络流量使用融合 VDS (C-VDS) 的主题。请参见要求将 VDS 用于主机传输节点流量。

n 添加了有关主管集群和 Tanzu Kubernetes 集群支持的 vSphere 和 Kubernetes 存储功能列表

的主题。请参见 vSphere CNS-CSI 和准虚拟 CSI 支持的功能。

n 更新了有关创建第 0 层网关的主题,添加了在同一个传输区域中的多个 NSX Edge 集群上提供

多个第 0 层网关的支持。请参见创建第 0 层网关。

n 添加了有关收集日志文件的主题。请参见收集日志文件。

2020 年 6 月 16 日 n 添加了有关对 vSphere 和 NSX-T 流量使用所需融合 VDS 的故障排除主题。请参见要求将

VDS 用于主机传输节点流量。

n 更新了创建示例 Contour Ingress 控制器的示例 ingress-test.yaml。请参见 Tanzu Kubernetes Ingress 示例。

2020 年 6 月 5 日 n 更新了主题关于 vSphere with Kubernetes 集群更新,说明了在 Tanzu Kubernetes 集群更新

期间将删除不受复制控制器监管的 pod。

n 更新了有关以 Kubernetes 管理员身份连接到 Tanzu Kubernetes 集群的主题,提供了示例登

录命令。请参见以 Kubernetes 管理员用户身份连接到 Tanzu Kubernetes 集群控制平面。

n 更新了使用 Helm 时创建 Tanzu Kubernetes 集群的 小 YAML 示例描述。请参见用于置备

Tanzu Kubernetes 集群的示例 YAML 文件。

n 更新了有关创建 Ingress 控制器的主题,添加了查看 Kubernetes 的 Nginx Ingress 控制器的

不同链接。请参见 Tanzu Kubernetes Ingress 示例。

n 更新了 Tanzu Kubernetes 集群的网络连接图。请参见 vSphere with Kubernetes 中的网络连

接。

n 更新了使用 vSphere Client 时配置内容库的导航路径。请参见为 Tanzu Kubernetes 集群创建

已订阅内容库。

2020 年 5 月 22 日 n 在什么是 Tanzu Kubernetes 集群?主题中添加了有关以 VMware Tanzu 品牌营销的其他

Kubernetes 服务详细信息的链接。

n 在主题 vSphere with Kubernetes 系统要求和拓扑中针对主管集群和 Tanzu Kubernetes 集群

添加了 VMware 高配置工具链接。

vSphere with Kubernetes 配置和管理

VMware, Inc. 9

Page 10: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

修订版本 描述

2020 年 5 月 19 日 n 添加了有关更新 vSphere with Kubernetes 集群(包括主管集群和 Tanzu Kubernetes 集群)

的新文档。请参见第 8 章 更新 vSphere with Kubernetes 集群。

n 移除了 Tanzu Kubernetes 集群的一些已知限制,反映了新功能的增加。请参见 Tanzu Kubernetes 集群的已知限制。

n 添加了有关对 vSphere with Kubernetes 进行故障排除的整合部分。请参见第 9 章 对

vSphere with Kubernetes 进行故障排除。

n 更新了有关使用 SSH 连接到集群节点的主题。请参见以系统用户身份使用 SSH 访问 Tanzu Kubernetes 集群节点。

n 添加了有关对工作负载管理启用错误进行故障排除的主题。请参见对工作负载管理启用问题进行

故障排除。

n 添加了有关下载 TLS 证书以与 适用于 vSphere 的 Kubernetes CLI 工具 配合使用的主题。请

参见下载并安装 TLS 证书。

n 添加了有关在更改 NSX-T 管理证书或 IP 地址时重新启动 WCP 服务的主题。请参见 NSX-T 管理证书或 IP 地址发生更改时重新启动 WCP 服务。

n 重构了 SEO 的 Tanzu Kubernetes Grid 服务 部分中的主题。请参见第 7 章 在 vSphere with Kubernetes 中运行 Tanzu Kubernetes 集群。

n 添加了 Tanzu Kubernetes Grid 集群支持列表的链接。请参见什么是 Tanzu Kubernetes 集群?

n 添加了 Tanzu Kubernetes 集群置备视频演示的链接。请参见 Tanzu Kubernetes Grid 服务架

构。

n 进行了其他更新,修复了次要错误。

2020 年 5 月 11 日 n 移除了为 vSAN 获取 主管集群 许可证的要求。

2020 年 4 月 24 日 n 更新了 YAML 文件片段,可更详细地通知用户需要在何处添加 pod 安全策略,并在 Tanzu Kubernetes Ingress 示例中更新了 YAML 文件的链接。

n 更新了显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类,添加了用于检查存储配额的

命令。

2020 年 4 月 17 日 n 更新了 Tanzu Kubernetes 服务负载平衡器示例主题,改进了符合 Kubernetes 1.16 的示例

YAML。

n 更新了 以系统用户身份使用 SSH 访问 Tanzu Kubernetes 集群节点主题,改进了用于创建跳

转盒容器的 YAML,并阐明了相关说明。

2020 年 4 月 10 日 n 添加了 vSphere with Kubernetes 中的存储权限主题。

n 在用于置备 Tanzu Kubernetes 集群的示例 YAML 文件主题中更新了 小示例 YAML,使用

大努力存储类。

n 在用于置备 Tanzu Kubernetes 集群的示例 YAML 文件主题中更新了示例 YAML 主题描述,

明确指明了用于集群的默认网络属性。

n 将 Tanzu Kubernetes 集群的配置参数主题移到了示例 YAML 主题之前,这样在使用 PDF 时,首先显示配置选项的完整列表。

n 添加了在气隙环境中置备 Tanzu Kubernetes 集群部分。

vSphere with Kubernetes 配置和管理

VMware, Inc. 10

Page 11: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere with Kubernetes 基础知识 2通过使用 vSphere with Kubernetes,可以将 vSphere 集群转换为在专用资源池中运行 Kubernetes 工作负载的平台。在 vSphere 集群上启用 vSphere with Kubernetes 后,会在 Hypervisor 层中直接创建

一个 Kubernetes 控制平面。之后,可以通过部署 vSphere Pod 运行 Kubernetes 容器,也可以通过

VMware Tanzu™ Kubernetes Grid™ 服务 创建上游 Kubernetes 集群,并在这些集群中运行应用程序。

本章讨论了以下主题:

n 什么是 vSphere with Kubernetes?

n 什么是 vSphere Pod?

n 什么是 Tanzu Kubernetes 集群?

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

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

n vSphere with Kubernetes 的许可

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

什么是 vSphere with Kubernetes?

可以使用 vSphere with Kubernetes 将 vSphere 转换为在 Hypervisor 层上以本机方式运行 Kubernetes 工作负载的平台。在 vSphere 集群上启用 vSphere with Kubernetes 后,可直接在 ESXi 主机上运行

Kubernetes 工作负载,并可在专用资源池中创建上游 Kubernetes 集群。

当今应用体系的挑战

如今的分布式系统由多个通常运行大量 Kubernetes Pod 和虚拟机的微服务构成。不以 vSphere with Kubernetes 为基础的典型堆栈包含一个底层虚拟环境,其中,Kubernetes 基础架构部署在虚拟机内,

Kubernetes pod 也分别运行在这些虚拟机中。有三个单独的角色分别控制该体系的每个部分,即应用程

序开发人员、Kubernetes 集群管理员和 vSphere 管理员。

VMware, Inc. 11

Page 12: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

...

...

...

工作节点 主节点 ETCD

Kubernetes 集群

卷 服务

Kubernetes 工作负载

网络 存储虚拟机

Pod

虚拟环境

开发人员

集群管理员

vSphere Admin

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

n 作为应用程序开发人员,您只能运行 Kubernetes pod。您看不到运行数百个应用程序的整个体系。

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

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

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

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

整个堆栈上的操作可能会非常困难,因为这些操作需要所有三个角色之间进行通信。堆栈的不同层之间缺

乏集成,这也可能带来难题。例如,Kubernetes 调度程序无法查看 vCenter Server 清单,并且无法智能

地放置容器。

vSphere with Kubernetes 如何提供帮助?

vSphere with Kubernetes 直接在 Hypervisor 层上创建 Kubernetes 控制平面。作为 vSphere 管理

员,您可以为 vSphere with Kubernetes 启用现有 vSphere 集群,从而在属于该集群的 ESXi 主机中创

建 Kubernetes 层。启用了 vSphere with Kubernetes 的集群称为主管集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 12

Page 13: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 2-2. vSphere with Kubernetes

存储

网络 存储ESXivSphere Admin

开发人员

虚拟环境

Kubernetes 层

内存 存储CPU

命名空间

vSphere with Kubernetes

vSpherePod 虚拟机

TanzuKubernetes

集群

Kubernetes 工作负载 Kubernetes 工作负载

vSpherePod 虚拟机

TanzuKubernetes

集群

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

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

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

n 作为 DevOps 工程师,您可以使用主管命名空间内的共享资源池在同一平台上运行包含 Kubernetes 容器的工作负载。在 vSphere with Kubernetes 中,容器在称为 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 Kubernetes 中,工作负载是通过以下方式之一部署的应用程序:

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

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 13

Page 14: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

序。

什么是 vSphere Pod?

vSphere with Kubernetes 引入了一个名为 vSphere Pod 的新构造,它等效于 Kubernetes Pod。

vSphere Pod 是一个占用空间较小的虚拟机,可运行一个或多个 Linux 容器。每个 vSphere Pod 根据其

容纳的工作负载精确地调整大小,并拥有与该工作负载对应的确切资源预留。它会分配待运行工作负载所

需的确切存储、内存和 CPU 资源量。

图 2-3. vSphere Pod

存储内存CPU

vSphere Pod

Linux 内核

容器

容器

存储内存CPU

vSphere Pod

Linux 内核

容器

ESXi 主机

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 兼容)。

vSphere with Kubernetes 配置和管理

VMware, Inc. 14

Page 15: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

持久卷

vSphere Pod

容器引擎

容器

容器容器映像

临时磁盘

vNIC

NSX vSwitch

Spherelet

hostd

Pod 引擎

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

为 vSphere 管理员,您可在主管集群级别为容器映像缓存、临时 VMDK 和 Kubernetes 控制平面虚拟机

的放置位置配置存储策略。在命名空间主管命名空间级别,您可以为持久卷以及 Tanzu Kubernetes 集群

中虚拟机的放置位置配置存储策略。有关 vSphere with Kubernetes 的存储要求和概念的详细信息,请参

见 vSphere with Kubernetes 中的存储。

3

对于网络连接,vSphere Pod 和通过 Tanzu Kubernetes Grid 服务 创建的 Tanzu Kubernetes 集群的虚

拟机使用 NSX-T Data Center 提供的拓扑。有关详细信息,请参见 vSphere with Kubernetes 中的网络

连接

什么是 Tanzu Kubernetes 集群?

Tanzu Kubernetes 集群是由 VMware 构建、签名和支持的开源 Kubernetes 容器编排平台的完整分发

版。可以通过使用 Tanzu Kubernetes Grid 服务 在主管集群上置备和运行 Tanzu Kubernetes 集群。主

管集群是启用了 vSphere with Kubernetes 的 vSphere 集群。

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

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

n Kubernetes 的固有安装

n 与 vSphere 基础架构集成

vSphere with Kubernetes 配置和管理

VMware, Inc. 15

Page 16: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

n 可用于生产

n VMware 提供全面支持

n 由 Kubernetes 管理

由 Tanzu Kubernetes Grid Service 置备的 Tanzu Kubernetes 集群...

完全受支持 由 Kubernetes进行了紧密集成

可用于生产是固有的管理

注 VMware 以 Tanzu 品牌营销一系列以 Kubernetes 为重点的产品。通过使用 Tanzu Kubernetes Grid 服务 创建的 Tanzu Kubernetes 集群是 vSphere 的 vSphere with Kubernetes 加载项的组件。有

关 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 Kubernetes 架构。

可用于生产

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

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

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

集群中运行不同版本的 Kubernetes。

vSphere with Kubernetes 配置和管理

VMware, Inc. 16

Page 17: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

有关详细信息,请参见第 7 章 在 vSphere with Kubernetes 中运行 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.类型的服务。

vSphere with Kubernetes 配置和管理

VMware, Inc. 17

Page 18: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

n 使用 HostPath 卷。

n 运行特权 pod。

vSphere with Kubernetes 用户角色和工作流

vSphere with Kubernetes 平台涉及两个角色:vSphere 管理员和 DevOps 工程师。这两个角色通过不

同的接口与平台进行交互,并且可以在 vCenter Single Sign-On 中为其定义具有关联权限的用户或用户

组。Vsphere 管理员和 DevOps 工程师角色的工作流是不同的,由这些角色所需的特定专业知识领域决

定。

用户角色和工作流

作为 vSphere 管理员,用于与 vSphere with Kubernetes 平台进行交互的主界面是 vSphere Client。概

括地说,您的职责包括配置主管集群和命名空间,DevOps 工程师可以在其中部署 Kubernetes 工作负

载。您应熟悉有关 vSphere 和 NSX-T 技术的知识,并了解有关 Kubernetes 的基本知识。

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

vSphere 管理员工作流

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

将 vSphere 集群配置为主管集群

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

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

者的功能组合在一起。作为 DevOps 工程师,您可以使用 kubectl 命令在 主管集群上的现有命名空间上

部署 vSphere Pod 和 Tanzu Kubernetes 集群。通常,作为 DevOps 工程师,您无需成为 vSphere 和

NSX-T 的专家,但应对这些技术和 vSphere with Kubernetes 平台有一个基本的了解,以便更有效地与

vSphere 管理员进行交互。

vSphere with Kubernetes 配置和管理

VMware, Inc. 18

Page 19: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

DevOps 工程师工作流

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

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

部署 vSphere Native Pod 或 Tazu Kubernetes 集群

主管集群配置工作流程

作为 vSphere 管理员,您可以使用必要的计算、存储和网络组件配置 vSphere with Kubernetes 平台。

有关详细信息,请参见第 4 章 配置 主管集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 19

Page 20: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 2-7. 主管集群配置工作流程

在集群上配置 vSphere DRS 和 HA

创建 vSphere 集群

计算配置

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

创建用于放置 Kubernetes 控制层面虚拟机、容器映像缓存和容器临时磁盘的存储策略

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

将 vSphere 集群配置为主管集群

存储配置

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

安装和配置 NSX Manager

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

创建 NSX Edge 集群

创建主机传输节点

NSX-T Data Center 配置

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

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

创建 NSX-T 第 0 层网关

vSphere with Kubernetes 配置和管理

VMware, Inc. 20

Page 21: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

命名空间创建和配置工作流

作为 vSphere 管理员,您可以在主管集群上创建和配置命名空间。您必须咨询 DevOps 工程师,以收集

有关他们要运行的应用程序的特定资源要求,并相应地配置命名空间。有关详细信息,请参见第 5 章 在 主管集群上使用命名空间。

图 2-8. 命名空间配置工作流

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

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

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

将 Kubernetes 控制层面的 URL 提供给将在该命名空间上部署 Kubernetes 工作负载的 DevOps 工程师

准备命名空间配置

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

创建命名空间

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

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

命名空间配置

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

vSphere Pod 工作流

作为 DevOps 工程师,您可以使用 vSphere Pod 服务运行您的应用程序。VSphere Pod 服务会在 主管

集群上创建 vSphere Pod。有关详细信息,请参见第 6 章 使用 vSphere Pod。

vSphere with Kubernetes 配置和管理

VMware, Inc. 21

Page 22: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 2-9. vSphere Pod 工作流

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

获取所需信息

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

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

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

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

部署 vSphere Native Pod

创建应用程序 YAML 文件

部署应用程序 YAML 文件

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

与您的 vSphere 管理员核实是否在主管集群上至少有一个满足应用程序系统要求的命名空间

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

Tanzu Kubernetes 集群工作流

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 22

Page 23: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 2-10. Tanzu Kubernetes 集群工作流

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

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

获取所需信息

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

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

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

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

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

创建 Tanzu Kubernetes 集群

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

创建 Kubernetes 集群配置 YAML 文件

置备 Tanzu Kubernetes 集群

监控集群节点的部署

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

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

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

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 23

Page 24: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere with Kubernetes 的许可

要使用 vSphere with Kubernetes,必须正确许可 vSphere。

您必须为以下组件分配相应的许可证:

n 为要在 主管集群中使用的所有 ESXi 主机分配 VMware vSphere 7 Enterprise Plus with Add-on for Kubernetes 许可证。

n 为 NSX Manager 分配 NSX-T Data Center Advanced 或更高版本的许可证。

vSphere with Kubernetes 如何更改 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 网络和存储资源。

vSphere with Kubernetes 配置和管理

VMware, Inc. 24

Page 25: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere with Kubernetes 组件和架构 3启用了 vSphere with Kubernetes 的集群称为主管集群。该集群是 vSphere with Kubernetes 的基础,

提供运行 vSphere Pod 和 Tanzu Kubernetes 集群所需的组件和资源。

本章讨论了以下主题:

n vSphere with Kubernetes 架构

n Tanzu Kubernetes Grid 服务架构

n Tanzu Kubernetes 集群租户模型

n vSphere with Kubernetes 中的网络连接

n vSphere with Kubernetes 中的存储

n vSphere with Kubernetes 的身份验证

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

vSphere with Kubernetes 架构

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

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

DevOps vSphere Admin网络 存储ESXi

vSphere Center

vSphere with Kubernetes

主管集群

Tanzu Kubernetes Grid service for vSphere

VMware, Inc. 25

Page 26: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

为 vSphere with Kubernetes 启用的集群称为主管集群。它在 SDDC 层上运行,包含用于计算的 ESXi、用于网络连接的 NSX-T Data Center 以及 vSAN 或其他共享存储解决方案。共享存储用于 vSphere Pod、主管集群中运行的虚拟机以及 Tanzu Kubernetes 集群中的 Pod 的持久卷。创建 主管集群后,作

为 vSphere 管理员,您可以在 主管集群中创建名为 主管命名空间的命名空间。作为 DevOps 工程师,您

可以运行由 vSphere Pod 中运行的容器组成的工作负载,并创建 Tanzu Kubernetes 集群。

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

主管集群

ESXi 主机

K8S 控制层面虚拟机

CRX

vSphere Pod

Spherelet hostd

ESXi 主机

K8S 控制层面虚拟机

CRX

vSphere Pod

Spherelet hostd

CRX

vSphere Pod

ESXi 主机

K8S 控制层面虚拟机

Spherelet hostd

vSphere Admin

DevOps

CRX

vSphere Pod

vCenter Server

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 集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 26

Page 27: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

主管命名空间

命名空间设置 vSphere Pod 和使用 Tanzu Kubernetes Grid 服务创建的 Tanzu Kubernetes 集群可以运

行的资源边界。 初创建命名空间时,它在主管集群内具有无限资源。作为 vSphere 管理员,您可以设置

CPU、内存、存储以及可在命名空间中运行的 Kubernetes 对象数量的限制。将为 vSphere 中的每个命名

空间创建一个资源池。存储限制在 Kubernetes 中表示为存储配额。

图 3-3. 主管命名空间

命名空间

存储内存CPU

vSphere Pod

虚拟机vSphere Pod

Tanzu Kubernetes 集群

虚拟机

主管集群

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

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

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

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

Tanzu Kubernetes 集群

Tanzu Kubernetes 集群是由 VMware 打包、签名和支持的开源 Kubernetes 软件的完整分发版。在

vSphere with Kubernetes 环境中,您可以使用 Tanzu Kubernetes Grid 服务在 主管集群上置备 Tanzu Kubernetes 集群。您可以使用 kubectl 和 YAML 定义以声明方式调用 Tanzu Kubernetes Grid 服务

API。

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

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

vSphere with Kubernetes 中运行 Tanzu Kubernetes 集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 27

Page 28: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

VM VM

VM VM

VMVM VM VM

VMVM

VM EspacevSphere

Espace vSphere

Conteneur Linux

Conteneur Linux

Espace vSphere

Conteneur Linux

Conteneur Linux

Espace vSphere

Conteneur Linux

Conteneur Linux

Espace

EspacevSphere

EspacevSphere

Espace de noms du superviseur

Cluster vSphere

vSphere avec NSX-T Data Center

Cluster vSphere

Cluster superviseur

Cluster Tanzu

Kubernetes

Conteneurs RUNC

EspaceConteneurs

RUNC

Cluster Tanzu

Kubernetes

Cluster Tanzu

Kubernetes

Espace de noms du superviseur

Espace de noms du superviseur

Espace de noms du superviseur

Espace de noms du superviseur

API du cluster

ServiceVMwareTanzu™

Kubernetes Grid™

Nœud worker

du cluster Tanzu

Kubernetes

Nœud worker

du cluster Tanzu

Kubernetes

Nœud du plan de contrôle du cluster

Tanzu Kubernetes

Nœud du plan de contrôle du cluster

Tanzu Kubernetes

Cluster superviseur

ServiceVMwareTanzu™

Kubernetes Grid™

Opérateur de machine API du

cluster

plan de contrôle SC

virtuelle

Nœud deplan de

contrôle SC

Nœud de

Opérateurde machine

virtuelle

Tanzu Kubernetes Grid 服务架构

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

Tanzu Kubernetes Grid 服务组件

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

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

包括一个云提供商插件,该插件将与在主管集群中运行的 NSX 容器插件 (NCP) 集成在一起。此外,

Tanzu Kubernetes 集群会将持久卷请求传递到与 VMware Cloud 本机存储 (CNS) 集成的主管集群。

请参见 vSphere with Kubernetes 中的存储。

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

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 28

Page 29: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

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

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

虚拟机 虚拟机 虚拟机

CPI CSI

Tanzu Kubernetes 集群

Supervisor 集群

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

vCenterServer

CNI 编写

Tanzu Kubernetes

Grid 资源

集群资源

计算机资源

虚拟机资源

Supervisor 资源

Tanzu Kubernetes Grid 服务

集群 API 控制器

集群 API 提供程序

虚拟机服务

ESXi ESXi ESXi ESXi

UI 集成

UI 集成

UI 集成

CNSCNS-CSINCP-CNI

Pod Pod Pod Pod

Tanzu Kubernetes 集群组件

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

载平衡。

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

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

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

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

Tanzu Kubernetes Grid 服务 API

可以使用 Tanzu Kubernetes Grid 服务 API 置备和管理 Tanzu Kubernetes 集群。它是一个使用

kubectl 和 YAML 进行调用的声明性 API。

vSphere with Kubernetes 配置和管理

VMware, Inc. 29

Page 30: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

通过声明性 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 集群所在的 主管命名空间强制执行租户模型。

主管集群

主管集群提供构建 Tanzu Kubernetes 集群所在的管理层。Tanzu Kubernetes Grid 服务是一个自定义控

制器管理器,其中包含一组属于主管集群的控制器。Tanzu Kubernetes Grid 服务的用途是置备 Tanzu Kubernetes 集群。

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

关系。您可以在单个 主管集群中置备多个 Tanzu Kubernetes 集群。通过 主管集群提供的工作负载管理

功能,让您能够控制集群配置和生命周期,同时有助于您保持与上游 Kubernetes 的并发性。

有关详细信息,请参见第 4 章 配置 主管集群。

主管命名空间

您可以将一个或多个 Tanzu Kubernetes 集群部署到一个主管命名空间。资源配额和存储策略适用于 主管

命名空间,并由部署在那儿的 Tanzu Kubernetes 集群继承。

置备 Tanzu Kubernetes 集群时,将在主管命名空间中创建一个资源池和虚拟机文件夹。Tanzu Kubernetes 集群控制平面和工作节点虚拟机放置在此资源池和虚拟机文件夹中。使用 vSphere Client,可以通过选择主机和集群视图查看此层次结构,也可以通过选择虚拟机和模板视图查看。

vSphere with Kubernetes 配置和管理

VMware, Inc. 30

Page 31: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

内容库

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

与 主管命名空间之间没有关系。

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

集群安全性

默认情况下,Tanzu Kubernetes 集群是安全的。受限 PodSecurityPolicy (PSP) 可用于 Tanzu Kubernetes Grid 服务置备的任何 Tanzu Kubernetes 集群。如果开发人员需要运行特权 Pod 或根容

器,集群管理员必须至少创建一个 RoleBinding,以便授予用户对默认特权 PSP 的访问权限。有关详细信

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

Tanzu Kubernetes 集群没有基础架构凭据。存储在 Tanzu Kubernetes 集群中的凭据仅够访问 Tanzu Kubernetes 集群有租户的主管命名空间。因此,不会为集群管理员或用户提供特权提升途径。

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

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

限捕获 vSphere 管理员的令牌。

vSphere with Kubernetes 中的网络连接

vSphere with Kubernetes 需要特定的网络连接配置,以便为通过 Tanzu Kubernetes Grid 服务置备的

命名空间、vSphere Pod、Kubernetes 服务和 Tanzu Kubernetes 集群启用连接。

主管集群的网络连接

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

的连接由标准 vSphere 网络处理。

vSphere with Kubernetes 配置和管理

VMware, Inc. 31

Page 32: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 3-6. 主管集群的网络连接

开发人员

网络

上行链路 VLAN

NSX Manager vCenter Server

管理网络

输入虚拟 IP

API 虚拟 IP

Edge 负载平衡器

第1层网关

主管集群

控制层面虚拟机分段

命名空间 A 分段

命名空间 B 分段

命名空间 A

vSpherePod

命名空间 B

vSpherePod

Spherelet

ESXi 主机

Spherelet

ESXi 主机

Spherelet

ESXi 主机

第0层网关

Ncp

K8S控制层面

n NSX Container Plug-in (NCP) 提供 VMware NSX-T™ Data Center 与 Kubernetes 之间的集成。

NCP 的主要组件在容器中运行,并与 NSX Manager 和 Kubernetes 控制平面进行通信。NCP 监控

对容器和其他资源的更改,并通过调用 NSX API 管理容器的网络资源,例如,逻辑端口、分段、路由

器和安全组。

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

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

供冗余。

vSphere with Kubernetes 配置和管理

VMware, Inc. 32

Page 33: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

BGP 或静态路由。

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

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

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

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

图 3-7. 命名空间的网络连接

K8S控制层面VM 2

K8S控制层面VM 1

NSX ManagervCenter Server

第1层网关

命名空间 A 分段

命名空间 B 分段

命名空间 C 分段

控制层面虚拟机分段

管理网络

ESXi 管理网络

NCP受管NSX-T覆盖网络

现有vSphere网络

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

vSphereDistributed Switch

Spherelet Spherelet Spherelet

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

vSpherePod 1

vSpherePod 2

vSpherePod 3

vSpherePod 4

vSpherePod 5

vSpherePod 6

K8S控制层面VM 3

每个命名空间的分段驻留在与 NSX Edge 集群关联且以标准模式运作的 vSphere Distributed Switch (VDS) 中。分段可为 主管集群提供覆盖网络。

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

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 33

Page 34: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

网络配置方法

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

置:

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

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

理。

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

群网络。有关详细信息,请参见将 vSphere with Kubernetes 配置为使用 NSX-T Data Center。

Tanzu Kubernetes 集群网络连接

Tanzu Kubernetes Grid 服务置备的 Tanzu Kubernetes 集群使用的网络连接是作为 vSphere with Kubernetes 基础架构底层的 NSX-T 架构和为集群 Pod、服务和输入提供网络连接的第三方软件的组合。

图 3-8. Tanzu Kubernetes 集群网络连接

主管集群

外部网络

DevOps 工程师

创建命名空间

创建 TKG 集群

vCenterNSXT

Manager

SC 控制层面虚拟机

vSphere Admin

VDS 上行链路

管理

主管 NS 分段

TKG 集群分段

Edge 上行链路

SC 控制平面分段

Ncp

SC 第 1 层GW

TKG 集群

第 1 层 GW第 0 层 GW

NSXT Edge 集群 主管命名空间

工作节点 VM

控制平面节点 VM

NSX-T Edge 节点 TKG 集群

作为 vSphere 管理员,创建主管命名空间时,将为每个命名空间定义一个 NSX-T 分段。此分段连接到 主管集群网络的 NSX-T 第 1 层网关。

DevOps 工程师在 主管命名空间中置备第一个 Tanzu Kubernetes 集群时,将创建新的第 1 层网关。对于

该命名空间中置备的每个 Tanzu Kubernetes 集群,将为该集群创建一个分段,并且它连接到其 主管命名

空间中的第 1 层网关。

在 Tanzu Kubernetes 集群内运行的 Kubernetes Pod 通过容器网络接口 (CNI) 连接到集群分段。Tanzu Kubernetes Grid 服务置备的 Tanzu Kubernetes 集群支持 CNI 的开源 Calico 插件。Tanzu Kubernetes Grid 服务提供了将来可支持其他 CNI 的可扩展框架。

vSphere with Kubernetes 配置和管理

VMware, Inc. 34

Page 35: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

当 Tanzu Kubernetes Grid 服务置备 Tanzu Kubernetes 集群时,会将 NSX-T 负载均衡器自动部署到

NSX Edge 节点。此负载均衡器以虚拟服务器的形式提供负载均衡服务。将创建一个虚拟服务器,为

Kubernetes API 提供第 4 层负载均衡。此虚拟服务器负责将 kubectl 流量路由到控制平面。此外,对于

集群上提供的每个 Kubernetes 服务负载均衡器,都会创建一个为该服务提供第 4 层负载均衡的虚拟服务

器。

下表汇总了 Tanzu Kubernetes 集群网络连接功能及其实施。

表 3-1. 用于 vSphere with Kubernetes 的 Tanzu Kubernetes 集群网络连接

端点 提供程序 描述

Kubernetes API NSX-T 负载均衡器 每个集群一个虚拟服务器。

节点连接 NSX-T 分段 通过 NSX-T 第 1 层路由器提供集群节点虚

拟机之间的连接。

Pod 连接 Calico 通过 Linux 网桥提供 Pod 的容器网络接

口。

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

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

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

服务类型:LoadBalancer NSX-T 负载均衡器 为每个服务类型定义提供一个虚拟服务

器。

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

第三方输入控制器。

网络策略 Calico 使用 Linux IP 表控制允许哪些流量进入选

定的 Pod 和网络端点。

vSphere with Kubernetes 中的存储

在 Tanzu Kubernetes 集群中运行的 vSphere Pod 和 pod 要求 Kubernetes 中可用的不同类型的存储对

象具有不同的存储特性。

vSphere with Kubernetes 支持三种存储:临时虚拟磁盘、容器映像虚拟磁盘和持久卷虚拟磁盘。在

Tanzu Kubernetes 集群中运行的 vSphere Pod 和 pod 可以挂载这三种类型的虚拟磁盘中的任何一种。

vSphere with Kubernetes 配置和管理

VMware, Inc. 35

Page 36: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

持久卷虚拟

磁盘[0]

临时虚拟磁盘

持久卷虚拟

磁盘[N]

容器映像虚拟

磁盘[0]

vSphere Pod

容器映像虚拟

磁盘[N]

临时虚拟磁盘

pod 在操作过程中,需要使用临时存储将 Kubernetes 对象存储为日志、emptyDir 卷和 ConfigMaps。

此临时存储或暂时存储在 pod 存在期间将始终存在。临时数据在容器重新启动后仍然存在,但一旦 pod 寿命终止,临时虚拟磁盘便会消失。

每个 pod 都有一个临时虚拟磁盘。在为主管集群配置存储时,vSphere 管理员使用存储策略定义所有临时

虚拟磁盘的数据存储位置。请参见在具有 NSX-T Data Center 的集群上启用 vSphere with Kubernetes。

容器映像虚拟磁盘

pod 中的容器使用包含待运行软件的映像。pod 会将其容器使用的映像挂载为映像虚拟磁盘。pod 的生命

周期结束后,映像虚拟磁盘将从 pod 中分离。

映像服务(ESXi 组件)负责从映像注册表中提取容器映像,并将其转换为虚拟磁盘以在 pod 内运行。

vSphere with Kubernetes 配置和管理

VMware, Inc. 36

Page 37: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

映像注册表

映像服务

容器映像vSphere Pod

ESXi 主机(K8s 节点)

主管集群

ESXi 可以缓存针对在 pod 中运行的容器下载的映像。使用此同一映像的后续 pod 将从本地缓存提取该映

像,而不是从外部容器注册表提取。

vSphere 管理员在为主管集群配置存储时指定映像缓存的数据存储位置。请参见在具有 NSX-T Data Center 的集群上启用 vSphere with Kubernetes。

有关使用容器映像的信息,请参见使用注册表服务提供专用映像注册表。

持久存储虚拟磁盘

要为 Kubernetes 工作负载置备持久存储,vSphere with Kubernetes 将与云原生存储 (CNS) 集成,云

原生存储是一个管理永久卷的 vCenter Server 组件。持久存储由 vSphere Pod 和 Tanzu Kubernetes 集群中的 POD 使用。

有关详细信息以及 Tanzu Kubernetes 集群如何使用持久存储的详细信息,请参见 vSphere with Kubernetes 如何与 vSphere 存储集成和第 7 章 在 vSphere with Kubernetes 中运行 Tanzu Kubernetes 集群。

K8s 控制层面虚拟机

CNS 卷服务容器卷

vSphere Pod

ESXi 主机(K8s 节点)

主管集群

要了解 vSphere with Kubernetes 如何与持久存储配合使用,请熟悉以下基本概念。

持久卷

vSphere with Kubernetes 配置和管理

VMware, Inc. 37

Page 38: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

某些 Kubernetes 工作负载需要持久存储来存储独立于 Pod 的数据。为了提供持久存储,

Kubernetes 使用可保留其状态和数据的持久卷。即使删除或重新配置了 pod,这些持久卷也会继续

存在。在 vSphere with Kubernetes 环境中,由数据存储上的第一类磁盘为持久卷对象提供支持。

vSphere with Kubernetes 支持在 ReadWriteOnce 模式下动态置备卷,即可由单个节点挂载的卷。

第一类磁盘

vSphere with Kubernetes 使用虚拟磁盘的第一类磁盘 (FCD) 类型支持持久卷。第一类磁盘(也称为

增强型虚拟磁盘)是未与虚拟机关联的已命名虚拟磁盘。

第一类磁盘由 UUID 标识。该 UUID 为全局唯一,是 FCD 的主标识符。该 UUID 始终有效,即使其

FCD 被重定位或创建快照也是如此。

持久卷声明

DevOps 工程师可以创建持久卷声明以请求持久存储资源。请求会动态地置备持久卷对象和匹配的虚

拟磁盘。在 vSphere Client 中,持久卷声明显示为可由 vSphere 管理员监控的 FCD 虚拟磁盘。

此声明将绑定到持久卷。工作负载可以使用该声明挂载持久卷和访问存储。

DevOps 工程师删除此声明时,也将删除相应的持久卷对象和已置备的虚拟磁盘。

存储类

Kubernetes 使用存储类描述为持久卷提供支持的存储的要求。DevOps 工程师可以在其持久卷声明规

范中包含特定的存储类,以请求该类描述的存储类型。

持久存储工作流

在 vSphere with Kubernetes 中置备持久存储的工作流包括以下连续操作。

操作 描述

vSphere 管理员可为 DevOps 团队提供持久存储资源。 vSphere 管理员可创建用于描述不同存储要求和服务类的虚拟机

存储策略。然后,他们可以将存储策略分配给 主管命名空间。

vSphere with Kubernetes 将创建与分配给 主管命名空间的存

储策略相匹配的存储类。

存储类将自动显示在 Kubernetes 环境中,并可供 DevOps 团队使用。如果 vSphere 管理员将多个存储策略分配给 主管命名

空间,则会为每个存储策略创建一个单独的存储类。

如果使用 Tanzu Kubernetes Grid 服务置备 Tanzu Kubernetes 集群,则每个 Tanzu Kubernetes 集群将从置备该

集群的 主管命名空间中继承存储类。

DevOps 工程师使用存储类为工作负载请求持久存储资源。 该请求采用引用特定存储类的持久卷声明形式。

vSphere with Kubernetes 会为 pod 创建持久卷对象和匹配的

持久虚拟磁盘。

vSphere with Kubernetes 会将虚拟磁盘放入满足原始存储策略

及其匹配的存储类中所指定要求的数据存储中。在 pod 启动后,

虚拟磁盘将挂载到该 pod。

vSphere 管理员在 vSphere with Kubernetes 环境中监控持久

卷。

vSphere 管理员使用 vSphere Client 监控持久卷及其支持虚拟

磁盘。他们还可以监控持久卷的存储合规性和运行状况。

vSphere with Kubernetes 配置和管理

VMware, Inc. 38

Page 39: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere Pod

持久卷声明

持久卷

FCD 虚拟磁盘

存储类

存储策略

主管集群

vSphere 存储

观看此视频,了解 vSphere with Kubernetes 中的持久存储。

使用 Kubernetes 的 vSphere 7.0 中的持久存储

(http://link.brightcove.com/services/player/bcpid2296383276001?bctid=ref:video_persistent_storage vs7_kubernetes)

vSphere 管理员的存储管理任务

通常,vSphere with Kubernetes 中的存储管理任务包括以下各项。作为 vSphere 管理员,您可以使用

vSphere Client 执行这些任务。

n 对虚拟机存储策略执行生命周期操作。

在启用主管集群并配置命名空间之前,请为您的 Kubernetes 环境需要的所有三种存储(即临时存

储、容器映像存储和持久存储)创建存储策略。存储策略将基于 DevOps 工程师向您传达的存储要

求。请参见为 vSphere with Kubernetes 创建存储策略。

注 在命名空间中运行具有相应存储类的持久卷声明时,请勿从 vCenter Server 或主管命名空间中删

除存储策略。此建议也适用于 Tanzu Kubernetes 集群。如果 Tanzu Kubernetes 集群 POD 正将存

储类用于其存储,请勿删除存储策略。

n 通过将存储策略分配给主管集群和命名空间以及设置存储限制,为 DevOps 工程师提供存储资源。有

关更改存储策略分配的信息,请参见更改 主管集群上的存储设置和更改命名空间上的存储设置。有关

设置限制的信息,请参见针对命名空间上的 Kubernetes 对象配置限制。

n 在 vSphere Client 中监控 Kubernetes 对象及其存储策略合规性。请参见监控持久卷。

vSphere with Kubernetes 配置和管理

VMware, Inc. 39

Page 40: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

DevOps 工程师的存储管理任务

在 vSphere with Kubernetes 环境中,DevOps 工程师可以是 Kubernetes 开发人员和应用程序所有

者、Kubernetes 管理员,或将两者的功能组合在一起。通常,DevOps 工程师使用 kubectl 执行任务。

n 管理存储类。请参见显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类。

n 部署和管理有状态应用程序。请参见部署有状态应用程序。

n 对持久卷执行生命周期操作。Tanzu Kubernetes 持久卷声明示例。

vSphere with Kubernetes 如何与 vSphere 存储集成

vSphere with Kubernetes 使用多个组件与 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 不需要基础架构凭据。它在 主管命名空间中配置了服务帐户。

vSphere with Kubernetes 配置和管理

VMware, Inc. 40

Page 41: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

用户命名空间

Tanzu Kubernetes 集群

持久卷

pvCSI

vSphere Pod

Kubernetes存储类

主管集群 CNS-CSI

CNS

vCenter Server SPBM 策略

FCD虚拟磁盘

ESXi ESXi ESXi

vSAN/VMFS/NFS 数据存储

下面说明了 DevOps 工程师在 Tanzu Kubernetes 集群中执行存储相关操作(例如,创建持久卷声明

(PVC))时不同组件的交互方式。

DevOps 工程师在 Tanzu Kubernetes 集群上使用命令行创建 PVC。此操作会在主管集群上生成匹配的

PVC,并触发 CNS-CSI。CNS-CSI 将调用 CNS 创建卷 API。

vSphere with Kubernetes 配置和管理

VMware, Inc. 41

Page 42: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

主管集群 vSphereTanzu Kubernetes集群

持久卷

声明

pvCSI

持久卷

声明

CNS-CSI

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 VMFS/NFS/vSAN

静态持久卷 否 是

加密 否 否

脱机卷增加 否 否

卷拓扑和区域 否 否

Kubernetes 多个控制平面实例 是 是

WaitForConsumerFirst 否 否

vSphere with Kubernetes 配置和管理

VMware, Inc. 42

Page 43: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

vSphere with Kubernetes 中的存储权限

vSphere with Kubernetes 提供了一个样本角色,即工作负载存储主管,该角色包含一组用于存储操作的

特权。您可以通过克隆此角色创建类似的角色。

特权名称 描述 要求

Cns.可搜索 允许存储管理员查看云本机存储 UI。 根 vCenter Server

数据存储.分配空间

数据存储.低级别文件操作

允许在数据存储上为虚拟机、快照、克隆

或虚拟磁盘分配空间。

允许在数据存储浏览器中执行读取、写

入、删除和重命名操作。

持久性卷所在的共享数据存储

ESX Agent Manager.修改 允许对代理虚拟机进行修改,如关闭电源

或删除虚拟机。

vSphere Pod

资源.将虚拟机分配给资源池 允许将虚拟机分配到资源池。 资源池

配置文件驱动的存储.配置文件驱动的存储

视图

允许查看定义的存储策略。 根 vCenter Server

虚拟机.更改配置.添加现有磁盘

虚拟机.更改配置.添加新磁盘

虚拟机.更改配置.添加或移除设备

虚拟机.更改配置.更改设置

虚拟机.更改配置.移除磁盘

虚拟机.编辑清单.新建

虚拟机.编辑清单.移除

允许创建和删除虚拟机。允许配置虚拟机

选项和设备。

vSphere Pod

vSphere with Kubernetes 的身份验证

作为 vSphere 管理员,您需要具备配置主管集群和管理命名空间的特权。您可以定义命名空间的权限,以

确定哪些 DevOps 工程师可以访问这些命名空间。作为 DevOps 工程师,您可以使用 vCenter Single Sign-On 凭据对 主管集群进行身份验证,且只能访问您有权访问的命名空间。

vSphere 管理员的权限

作为 vSphere 管理员,您需要具有 vSphere 集群的权限,以便将其配置为主管集群,以及创建和管理命

名空间。您必须至少具有与 vSphere 集群中的用户帐户关联的以下特权之一:

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

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

设置 DevOps 工程师的权限

作为 vSphere 管理员,您可以向命名空间级别的用户帐户授予只读或写入权限。用户帐户必须在连接到

vCenter Single Sign-On 的标识源中可用。一个用户帐户可以访问多个命名空间。属于管理员组的用户可

以访问 主管集群上的所有命名空间。

vSphere with Kubernetes 配置和管理

VMware, Inc. 43

Page 44: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

配置具有权限、资源配额和存储的命名空间后,您可以将 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 用户的身份连接到 主管集群。

在您登录到 主管集群后,身份验证代理会将请求重定向到 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 Kubernetes 提供支持每个

角色或目标的身份验证方法。

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 集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 44

Page 45: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

vCenter Single Sign-On 身份验证不可用,则此方法可能适用。请参见以 Kubernetes 管理员用

户身份连接到 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 要进行故障排除,系统管理员可以使用以下任一方法以 vmware-system-user 用户身份连接到 Tanzu Kubernetes 集群:

n 使用 SSH 和私钥。请参见以系统用户身份使用 SSH 访问 Tanzu Kubernetes 集群节点。

n 使用 SSH 和密码。请参见以系统用户身份使用密码连接到集群节点。

n 使用 vSphere Client 并访问虚拟机的控制台。请参见以系统用户身份使用密码连接到集群节点。

vSphere with Kubernetes 配置和管理

VMware, Inc. 45

Page 46: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

配置 主管集群 4作为 vSphere 管理员,您可以通过将 vSphere 集群配置为主管集群来为 Kubernetes 工作负载启用

vSphere 集群。您可以通过存储策略设置存储以容纳容器数据和 Kubernetes 控制层面虚拟机的磁盘。此

外,您还可以使用 NSX-T 配置网络连接,以提供与通过 VMware Tanzu™ Kubernetes Grid™ 服务创建的

vSphere Pod 和 Kubernetes 集群的连接。配置存储策略和网络连接后,便可以将 vSphere 集群配置为

主管集群

本章讨论了以下主题:

n vSphere with Kubernetes 系统要求和拓扑

n 为 vSphere with Kubernetes 创建存储策略

n 将 vSphere with Kubernetes 配置为使用 NSX-T Data Center

n vSphere with Kubernetes 配置 佳做法

n 更改 主管集群上的存储设置

n 更改 Kubernetes API 端点证书

vSphere with Kubernetes 系统要求和拓扑

要配置 vSphere 集群的 vSphere with Kubernetes,您的环境必须满足特定的基础架构、网络和存储要

求。

vSphere with Kubernetes 集群的配置限制

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

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

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

管理、Edge 和工作负载域集群的拓扑

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

VMware, Inc. 46

Page 47: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 4-1. 管理、Edge 和工作负载管理集群

外部网络

ESXi

vCenter Server

NSX Manager

ESXi

管理、Edge 和工作负载管理集群

(Supervisor 集群)

NSX Edge 集群

vSphereDistributed

Switch

NSX Edge 节点 VM1

输出 输入

NSX Edge 节点 VM2

ESXi

Kubernetes 控制

层面 VM 1

命名空间 1

命名空间 2 - Tanzu Kubernetes 集群

控制层面节点

Pod 1

工作节点 1

Pod 2

工作节点 2

vSphere Pod 1

vSphere Pod 2

Kubernetes 控制

层面 VM 2

Kubernetes 控制

层面 VM 2

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

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

vCenter Server7.0 小型 2 16 GB 290 GB

ESXi 主机 7.0 3 个 ESXi 主机,每个

主机 1 个静态 IP。

4 个 ESXi 主机用于

vSAN,至少 2 个物理

网卡。

必须将这些主机加入启

用 vSphere DRS 和

HA 的集群。vSphere DRS 必须处于全自动或

半自动模式。

8 每个主机 64 GB 不适用

NSX Manager 中等 6 24 GB 300 GB

vSphere with Kubernetes 配置和管理

VMware, Inc. 47

Page 48: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

表 4-1. 管理、Edge 和工作负载管理集群的最低计算要求 (续)

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

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 Kubernetes 部署在两个集群中,一个集群用于管理和 Edge 功能,另一个专用于

工作负载管理。

图 4-2. 管理和 Edge 及工作负载管理集群

外部网络

ESXi

vCenter Server

NSX Manager

ESXi

管理和 Edge 集群

NSX Edge 集群

vSphere Distributed Switch

NSX Edge 节点 VM1

输出 输入

NSX Edge 节点 VM2

ESXi ESXi

Kubernetes 控制

层面 VM 1

命名空间 1

ESXi

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

命名空间 2 - Tanzu Kubernetes 集群

控制层面节点

Pod 1

工作节点 1

Pod 2

工作节点 2

ESXi

vSphere Pod 1

vSphere Pod 2

Kubernetes 控制

层面 VM 2

Kubernetes 控制

层面 VM 2

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

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

vCenter Server7.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

vSphere with Kubernetes 配置和管理

VMware, Inc. 48

Page 49: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

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

vCenter Server7.0 小型 2 16 GB 290 GB

ESXi 主机 7.0 3 个 ESXi 主机,每个

主机 1 个静态 IP。

4 个 ESXi 主机用于

vSAN,至少 2 个物理

网卡

必须将这些主机加入启

用 vSphere DRS 和

HA 的集群。vSphere DRS 必须处于全自动模

式。

8 每个主机 64 GB 不适用

Kubernetes 控制平面虚

拟机

3 4 16 GB 16 GB

网络要求

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

求:

组件 小数量 所需的配置

用于 Kubernetes 控制平面虚拟机的静态

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

个连续静态 IP 地址的块。

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

管理网络。网络必须能够访问容器注册表并具有 Internet 连接(如果容器注册表位于外部网络上)。容器注册表必须

可通过 DNS 解析,并且下面描述的输出设置必须能够访问

该容器注册表。

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

注 在所有 ESXi 主机、vCenter Server 系统和 NSX Manager 实例上配置 NTP。

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

管理网络子网 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。

vSphere with Kubernetes 配置和管理

VMware, Inc. 49

Page 50: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

组件 小数量 所需的配置

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

TEP 和 Edge TEP 必须可路由。

以下对象需要 VLAN IP 地址:

n ESXi 主机 VTEP

n 使用静态 IP 的 Edge VTEP

n 传输节点的第 0 层网关和上行链路。

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 或更

高。

vSphere PodCIDR 范围 /24 个专用 IP 地址 提供 vSphere Pod 的 IP 地址的专用 CIDR 范围。这些地

址还用于 Tanzu Kubernetes 集群节点。

必须为每个集群指定唯一的 vSphere PodCIDR 范围。

注 Kubernetes 服务地址的 vSphere PodCIDR 范围和

CIDR 范围不能重叠。

Kubernetes 服务 CIDR 范围 /16 个专用 IP 地址 专用 CIDR 范围,用于将 IP 地址分配给 Kubernetes 服务。您必须为每个 主管集群指定唯一的 Kubernetes 服务

CIDR 范围。

vSphere with Kubernetes 配置和管理

VMware, Inc. 50

Page 51: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

组件 小数量 所需的配置

输出 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 with Kubernetes 创建存储策略

在启用 vSphere with Kubernetes 之前,需要创建要在主管集群和命名空间中使用的存储策略。这些策略

表示 vSphere 环境中可用的数据存储。它们可以控制诸如控制层面虚拟机、pod 临时磁盘、容器映像和持

久存储卷等对象的存储放置。如果使用 VMware Tanzu™ Kubernetes Grid™ 服务,则存储策略还会规定

Tanzu Kubernetes 集群节点的部署方式。

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

果您的 vSphere 存储环境包含三类数据存储(Bronze、Silver 和 Gold),则可以为所有数据存储创建存

储策略。然后,可以对临时和容器映像虚拟磁盘使用 Bronze 数据存储,对持久卷虚拟磁盘使用 Silver 和

Gold 数据存储。有关存储策略的详细信息,请参见《vSphere 存储》文档中的“基于存储策略的管理”

一章。

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

前提条件

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

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

步骤

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

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

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

属性 描述

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

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

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 51

Page 52: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

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

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

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

3 输入策略名称和描述。

选项 操作

vCenter Server 选择 vCenter Server 实例。

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

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

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

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

使用以下示例选择选项。

选项 描述

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

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

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

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

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

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

结果

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

后续步骤

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

n 将存储策略分配给主管集群。在主管集群上配置的存储策略可确保将控制层面虚拟机、pod 临时磁盘

和容器映像放置在策略表示的数据存储上。请参见在具有 NSX-T Data Center 的集群上启用 vSphere with Kubernetes。

n 将存储策略分配给主管命名空间。命名空间可见的存储策略确定了命名空间可以访问和用于持久卷的数

据存储。存储策略在命名空间中显示为匹配的 Kubernetes 存储类。它们还会传播到此命名空间上的

Tanzu Kubernetes 集群。DevOps 工程师可以在其持久卷声明规范中使用这些存储类。请参见创建

和配置 主管命名空间。

vSphere with Kubernetes 配置和管理

VMware, Inc. 52

Page 53: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

将 vSphere with Kubernetes 配置为使用 NSX-T Data Center

vSphere with Kubernetes 需要特定的网络连接配置,以便能够连接到 主管集群、主管命名空间以及在命

名空间中运行的所有对象,例如 vSphere Pod 和 Tanzu Kubernetes 集群。作为 vSphere 管理员,请为

vSphere with Kubernetes 安装并配置 NSX-T Data Center。

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

置:

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

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

管理。

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

群网络。

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

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

前提条件

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

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,并为每个

NSX Edge 节点上行链路创建分布式端口组。

2 部署和配置 NSX Manager

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

3 添加许可证

使用 NSX Manager 添加许可证。

4 添加计算管理器

计算管理器是管理主机和虚拟机等资源的应用程序。

vSphere with Kubernetes 配置和管理

VMware, Inc. 53

Page 54: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

5 创建传输区域

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

6 创建主机上行链路配置文件

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

7 创建 Edge 上行链路配置文件

上行链路配置文件用于定义上行链路的策略。上行链路配置文件定义的设置可以包括绑定策略、活动

和备用链路、传输 VLAN ID 以及 MTU 设置。

8 为主机隧道端点 IP 地址创建 IP 池

您可以对主机隧道端点 (TEP) 使用 IP 池。TEP 是在外部 IP 标头中使用的源和目标 IP 地址,用于标

识发起和结束覆盖网络帧 NSX-T 封装的 ESXi 主机。您可以对 TEP IP 地址使用 DHCP 或手动配置

IP 池。

9 创建传输节点配置文件

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

10 将传输节点配置文件应用于 vSphere 集群

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

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

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

12 创建 NSX Edge 集群

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

13 创建第 0 层上行链路分段

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

14 创建第 0 层网关

第 0 层网关是 NSX-T Data Center 逻辑路由器,为 NSX-T Data Center 逻辑网络提供到物理基础

架构的南北向连接。vSphere with Kubernetes 在同一个传输区域中的多个 NSX Edge 集群上支持

多个第 0 层网关。

15 在具有 NSX-T Data Center 的集群上启用 vSphere with Kubernetes

要在 vSphere 集群上运行 Kubernetes 工作负载,您必须通过 vSphere with Kubernetes 启用集

群。启用后,vSphere with Kubernetes 将在集群上创建 Kubernetes 控制平面节点,并在每个主机

上创建 Spherelet 进程,以允许在 ESXi 上本机运行容器。启用了 vSphere with Kubernetes 的集

群称为 主管集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 54

Page 55: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

创建 vSphere Distributed Switch

要处理 主管集群中所有主机的网络连接配置,请创建一个 vSphere Distributed Switch,并为每个 NSX Edge 节点上行链路创建分布式端口组。

步骤

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

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

3 输入新 Distributed Switch 的名称。

例如,VSK_VDS。

4 输入所需的配置信息,然后单击完成。

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

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

7 右键单击 Distributed Switch,然后选择分布式端口组 > 新建分布式端口组。

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

例如,VSK_EDGE_LEFT_UPLINK。

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

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

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

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

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

13 对每个 NSX Edge 上行链路重复步骤 7–11。

例如,使用名称 VSK_EDGE_RIGHT_UPLINK 创建第二个 NSX Edge 上行链路。将活动上行链路配置为

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

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

n 管理

n vSphere vMotion

n 共享存储

n 虚拟机流量

后续步骤

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 55

Page 56: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

部署和配置 NSX Manager

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

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

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

前提条件

n 确认您的环境满足网络连接要求。有关详细信息,请参见 vSphere with Kubernetes 系统要求和拓

扑。

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

步骤

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

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

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

3 输入下载 OVA URL 或导航到 OVA 文件。

4 为 NSX Manager 虚拟机 (VM) 输入名称。

5 选择要在其上部署 NSX Manager 的 vSphere 集群。

6 选择 NSX-T 部署大小。

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

7 选择用于部署的共享存储。

8 通过选中启用精简磁盘模式复选框,启用精简置备。

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

9 为 NSX Manager 选择端口组或目标网络。

10 输入 NSX Manager 的系统 root、CLI 管理员和审核密码。您的密码必须符合密码强度限制。

n 至少 12 个字符。

n 至少 1 个小写字母。

n 至少 1 个大写字母。

n 至少 1 个数字。

n 至少 1 个特殊字符。

n 至少 5 个不同的字符。

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

11 输入 NSX Manager 的主机名。

vSphere with Kubernetes 配置和管理

VMware, Inc. 56

Page 57: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

12 接受虚拟机的默认 NSX Manager 角色。

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

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

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

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

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

否按预期应用了 IP 地址。

17 输入 get services 命令以验证所有服务是否正在运行中。

添加许可证

使用 NSX Manager 添加许可证。

前提条件

获取 NSX-T Data CenterAdvanced 或更高版本的许可证。

步骤

1 登录到 NSX Manager。

2 选择系统 > 许可证 > 添加。

3 输入许可证密钥。

4 单击添加。

添加计算管理器

计算管理器是管理主机和虚拟机等资源的应用程序。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 计算管理器 > 添加

3 输入计算管理器的详细信息。

选项 描述

名称和描述 输入 vCenter Server 的名称和描述。

FQDN 或 IP 地址 输入 vCenter Server 的 FQDN 或 IP 地址。

用户名和密码 输入 vCenter Server 登录凭据。

4 选择启用信任以允许 vCenter Server 与 NSX-T Data Center 通信。

5 单击添加。

vSphere with Kubernetes 配置和管理

VMware, Inc. 57

Page 58: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

结果

一段时间后,计算管理器将注册到 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 输入传输区域的名称和可选描述。

4 选择流量类型。

您可以选择覆盖网络或 VLAN。

例如,创建以下传输区域:

n 名称为 VSK_TZ_VLAN 且流量类型为 VLAN 的 VLAN 传输区域。

n 名称为 VSK_TZ_Overlay 且流量类型为 Overlay 的覆盖网络传输区域。

5 (可选) 输入一个或多个上行链路绑定策略名称。

连接到传输区域的分段使用这些指定的绑定策略。如果分段未找到匹配的指定绑定策略,则使用默认上

行链路绑定策略。

结果

新的传输区域将显示在传输区域页面上。

创建主机上行链路配置文件

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

步骤

1 登录到 NSX Manager。

vSphere with Kubernetes 配置和管理

VMware, Inc. 58

Page 59: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

2 选择系统 > 架构 > 配置文件 > 上行链路配置文件 > 添加。

3 输入上行链路配置文件名称和(可选)上行链路配置文件描述。

例如,VSK_HOST_UPLINK_PROFILE。

4 在绑定部分中,单击添加以添加命名绑定策略,并配置负载平衡源策略。

将指定活动上行链路的列表,并将传输节点上的每个接口固定到一个活动上行链路。此配置允许同时使

用多个活动上行链路。

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

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

6 输入传输 VLAN 值。

上行链路配置文件中设置的传输 VLAN 将标记覆盖网络流量,并且 VLAN ID 由隧道端点 (TEP) 使用。

7 输入 MTU 值。

上行链路配置文件 MTU 的默认值为 1600。

注 该值必须至少为 1600,但不能高于物理交换机和 vSphere Distributed Switch 上的 MTU 值。

创建 Edge 上行链路配置文件

上行链路配置文件用于定义上行链路的策略。上行链路配置文件定义的设置可以包括绑定策略、活动和备

用链路、传输 VLAN ID 以及 MTU 设置。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 配置文件 > 上行链路配置文件 > 添加。

3 输入上行链路配置文件名称并(可选)添加上行链路配置文件描述。

例如,VSK_EDGE_UPLINK_PROFILE。

4 在绑定部分中,单击添加以添加命名绑定策略,并配置负载平衡源策略。

将列出活动上行链路列表,并将传输节点上的每个接口固定到一个活动上行链路。此配置允许同时使用

多个活动上行链路。

5 配置两个活动上行链路。

例如,将 Uplink1 和 Uplink2 配置为活动上行链路。

6 输入传输 VLAN 值。

7 输入 MTU 值。

上行链路配置文件 MTU 的默认值为 1600。

注 该值必须至少为 1600,但不能高于物理交换机和 vSphere Distributed Switch 上的 MTU 值。

vSphere with Kubernetes 配置和管理

VMware, Inc. 59

Page 60: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

8 在上行链路配置文件页面中查看上行链路。

为主机隧道端点 IP 地址创建 IP 池

您可以对主机隧道端点 (TEP) 使用 IP 池。TEP 是在外部 IP 标头中使用的源和目标 IP 地址,用于标识发起

和结束覆盖网络帧 NSX-T 封装的 ESXi 主机。您可以对 TEP IP 地址使用 DHCP 或手动配置 IP 池。

步骤

1 登录到 NSX Manager。

2 选择网络 > IP 地址池 > 添加 IP 地址池。

3 输入以下 IP 池详细信息。

选项 描述

名称和描述 输入 IP 池名称和可选描述。

例如,VSK_EDGE_TEP_POOL。

IP 范围 输入 IP 分配范围。

CIDR 以 CIDR 表示法输入网络地址。

4 单击添加和应用。

5 确认您创建的 TEP IP 池列在 IP 池页面中。

创建传输节点配置文件

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

式。

前提条件

确认您已创建覆盖网络传输区域。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 配置文件 > 传输节点配置文件 > 添加。

3 输入传输节点配置文件的名称和可选描述。

例如,VSK_TN_PROFILE。

4 选择可用的传输区域,然后单击 +添加交换机按钮,以在传输节点配置文件中包括传输区域。

5 选择“类型”作为“VDS”。

6 选择“模式”作为“标准”。

7 从列表中选择 vCenter Server 和 vSphere Distributed Switch 名称。

vSphere with Kubernetes 配置和管理

VMware, Inc. 60

Page 61: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

8 选择之前创建的覆盖网络传输区域。

例如,VSK_TZ_OVERLAY。

9 选择之前创建的主机上行链路配置文件。

例如,VSK_HOST_UPLINK_PROFILE。

10 从 IP 分配列表中选择使用 IP 池。

11 选择之前创建的主机 TEP 池。

例如,VSK_EDGE_TEP_POOL。

12 选择之前创建的上行链路。

例如,Uplink1 和 Uplink2。

13 单击添加。

将传输节点配置文件应用于 vSphere 集群

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

前提条件

确认您已创建传输节点配置文件。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 节点 > 主机传输节点。

3 从托管主体下拉菜单中,选择现有的 vCenter Server。

该页面列出了可用的 vSphere 集群。

4 选择集群。

5 单击配置 NSX。

6 选择之前创建的传输节点配置文件,然后单击应用。

例如,VSK_TN_PROFILE。

7 从主机传输节点页面中,验证 NSX-T Data Center 配置状态是否为“成功”,并且集群中主机的

NSX Manager 连接状态是否为启动。

结果

之前创建的传输节点配置文件将应用于 vSphere 集群,以安装 NSX-T Data Center 并准备覆盖网络

TEP。

vSphere with Kubernetes 配置和管理

VMware, Inc. 61

Page 62: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

配置和部署 NSX Edge 传输节点

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

节点虚拟机。

前提条件

确认您已创建传输区域、Edge 上行链路配置文件和 Edge TEP IP 池。

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 节点 > Edge 传输节点 > 添加 Edge 虚拟机。

3 输入 NSX Edge 的名称。

4 输入 vCenter Server 的主机名或 FQDN。

5 选择“大型”规格。

6 输入 NSX Edge 的 CLI 和 root 密码。您的密码必须符合密码强度限制。

n 至少 12 个字符。

n 至少 1 个小写字母。

n 至少 1 个大写字母。

n 至少 1 个数字。

n 至少 1 个特殊字符。

n 至少 5 个不同的字符。

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

7 输入 NSX Edge 详细信息。

选项 描述

计算管理器 从下拉菜单中选择计算管理器。

集群 从下拉菜单中选择集群。

数据存储 从列表中选择共享数据存储。

8 配置节点设置。

选项 描述

IP 分配 选择“静态”。

输入以下项的值:

n 管理 IP:输入与 vCenter Server 管理网络相同的 VLAN 上的 IP 地址。

n 默认网关:管理网络的默认网关。

管理界面 从下拉菜单中选择与管理网络相同的 VLAN 上的 vSphere Distributed Switch 端口组。

vSphere with Kubernetes 配置和管理

VMware, Inc. 62

Page 63: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

9 输入域名、DNS 服务器 IP 地址和 NTP 服务器 IP 地址。

10 对 Edge 交换机名称使用默认名称。

11 选择传输节点所属的传输区域。

选择之前创建的两个传输区域。

例如,VSK_TZ_OVERLAY 和 VSK_TZ_VLAN。

12 选择之前创建的 Edge 上行链路配置文件。

例如,VSK_EDGE_UPLINK_PROFILE。

13 在 IP 分配中选择使用 IP 池。

14 选择之前创建的 Edge TEP IP 池。

例如,VSK_EDGE_TEP_POOL。

15 在绑定策略交换机映射部分中,将所有上行链路映射到之前创建的 Edge 上行链路配置文件。

例如,为 Uplink1 选择 VSK_EDGE_LEFT_UPLINK,并为 Uplink2 选择 VSK_EDGE_RIGHT_UPLINK。

16 单击完成。

17 对另一个 NSX Edge 虚拟机重复步骤 10–16。

您可以同时部署这两个 NSX Edge 虚拟机。

18 在 Edge 传输节点页面上查看连接状态。

创建 NSX Edge 集群

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

步骤

1 登录到 NSX Manager。

2 选择系统 > 架构 > 节点 > Edge 集群 > 添加。

3 输入 NSX Edge 集群名称。

例如,VSK_EC。

4 从下拉菜单中选择 NSX Edge 集群配置文件。

选择 nsx-default-edge-high-availability-profile。

5 在成员类型下拉菜单中,选择 NSX Edge 节点。

6 从可用列中,选择之前创建的 NSX Edge 虚拟机,然后单击向右箭头以将其移至已选择列。

7 单击保存。

vSphere with Kubernetes 配置和管理

VMware, Inc. 63

Page 64: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

创建第 0 层上行链路分段

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

步骤

1 登录到 NSX Manager。

2 选择网络 > 分段 > 添加分段。

3 输入分段的名称。

例如,VSK_UL_SEG。

4 为连接选择“隔离”。

5 选择之前创建的传输区域。

例如,选择 VSK_TZ_VLAN。

6 切换管理状态以将其启用。

7 输入 VLAN ID。

8 单击保存。

创建第 0 层网关

第 0 层网关是 NSX-T Data Center 逻辑路由器,为 NSX-T Data Center 逻辑网络提供到物理基础架构的

南北向连接。vSphere with Kubernetes 在同一个传输区域中的多个 NSX Edge 集群上支持多个第 0 层网关。

前提条件

确认您已创建 NSX Edge 集群。

步骤

1 登录到 NSX Manager。

2 选择网络 > 第 0 层网关。

3 单击添加第 0 层网关。

4 输入第 0 层网关的名称。

例如,VSK_T0。

5 选择活动-备用 HA 模式。

在活动-备用模式下,选定的活动成员将处理所有流量。如果活动成员出现故障,则会选择一个新成员

并使其成为活动成员。

6 选择之前创建的 NSX Edge 集群。

例如,选择 VSK_EC。

7 单击保存。

vSphere with Kubernetes 配置和管理

VMware, Inc. 64

Page 65: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

8 要继续配置,请选择是。

9 配置接口。

a 单击接口并设置。

b 单击添加接口。

c 输入名称。

例如,输入名称 VSK_T0_UL1。

d 选择外部作为类型。

e 输入 Edge 逻辑路由器 - 上行链路 VLAN 的 IP 地址。此 IP 地址必须不同于为之前创建的 NSX Edge 虚拟机配置的管理 IP 地址。

f 从列表中选择 NSX Edge 节点。

g 单击保存。

h 对其他 NSX Edge 节点虚拟机重复步骤 a - f。

i 单击关闭。

10 要配置路由或 BGP,请单击路由。

a 单击“静态路由”中的设置。

b 输入名称。

c 输入网络 IP 地址。

d 要配置下一跃点,请单击设置下一跃点,然后单击添加下一跃点。

e 输入下一个跃点路由器的 IP 地址。通常,这是 NSX Edge 逻辑路由器上行链路 VLAN 中的管理

网络 VLAN 的默认网关。

f 单击应用和关闭。

11 单击关闭。

12 要验证连接性,请确保物理架构中的外部设备可以对您配置的接口执行 ping 操作。

在具有 NSX-T Data Center 的集群上启用 vSphere with Kubernetes

要在 vSphere 集群上运行 Kubernetes 工作负载,您必须通过 vSphere with Kubernetes 启用集群。启

用后,vSphere with Kubernetes 将在集群上创建 Kubernetes 控制平面节点,并在每个主机上创建

Spherelet 进程,以允许在 ESXi 上本机运行容器。启用了 vSphere with Kubernetes 的集群称为 主管集

群。

步骤

1 从 vSphere Client 主菜单中,选择工作负载管理。

2 选择要配置的 vCenter Server。

3 选择启用。

vSphere with Kubernetes 配置和管理

VMware, Inc. 65

Page 66: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 选择选择集群 > 数据中心。

5 从兼容集群列表中选择一个集群,然后单击下一步。

6 在集群设置上,选择控制平面虚拟机的大小。

控制平面虚拟机的大小决定了可以在集群上运行的 vSphere Pod 数量。

有关指导,请参考 VMware 高配置站点。

7 单击下一步。

vSphere with Kubernetes 配置和管理

VMware, Inc. 66

Page 67: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

8 在网络设置中,为控制平面和工作节点配置网络设置。

a 在管理网络窗格中,配置以下管理流量设置:

选项 描述

网络 选择为管理流量配置了 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。

NTP 服务器 输入环境中使用的 NTP 服务器的地址(如有)。

DNS 搜索域 输入 DNS 在 Kubernetes 控制平面节点中搜索的域名(如 corp.local),以

便 DNS 服务器解析这些域名。

b 在工作负载网络窗格中,为命名空间的网络配置设置。

命名空间网络设置提供与在 主管集群中运行的 vSphere Pod 和命名空间的连接。

选项 描述

vSphere Distributed Switch 选择为 主管集群处理覆盖网络的 vSphere Distributed Switch。

例如,VKS_VDS。

Edge 集群 选择具有要用于命名空间网络的第 0 层网关的 NSX Edge 集群。

例如,选择 VSK_EC。

API 服务器端点 FQDN (可选)输入 API 服务器端点的 FQDN。

DNS 服务器 输入环境中使用的 DNS 服务器的 IP 地址(如有)。

NTP 服务器 输入 NTP 服务器的 IP 地址。

Pod CIDR 输入 CIDR 注释以确定 vSphere Native Pod 的 IP 范围。可以使用默认值。

服务 CIDR 输入 CIDR 注释以确定 Kubernetes 服务的 IP 范围。可以使用默认值。

输入 CIDR 输入 CIDR 注释以确定 Kubernetes 服务的输入 IP 范围。此范围用于类型为负

载均衡器和输入的服务。

输出 CIDR 输入 CIDR 注释以确定 Kubernetes 服务的输出 IP。仅为主管集群中的每个命名

空间分配一个输出 IP 地址。输出 IP 是特定命名空间中 vSphere Pod 的 IP 地址,用于在 NSX-T Data Center 之外进行通信。

vSphere with Kubernetes 配置和管理

VMware, Inc. 67

Page 68: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

9 在存储设置中,为 主管集群配置存储。

为以下每个对象选择的存储策略可确保将对象放置在存储策略中引用的数据存储上。可以对这些对象使

用相同或不同的存储策略。

选项 描述

控制平面节点 选择用于放置控制平面虚拟机的存储策略。

Pod 临时磁盘 选择用于放置 vSphere Pod 的存储策略。

容器映像缓存 选择用于放置容器映像缓存的存储策略。

10 在即将完成部分中,检查设置,然后单击完成。

集群已启用 vSphere with Kubernetes,您可以创建主管命名空间以提供给 DevOps 工程师。

Kubernetes 控制平面节点是在属于集群的主机以及 Spherelet 进程上创建的。

后续步骤

在 主管集群上创建并配置主管命名空间。请参见创建和配置 主管命名空间

vSphere with Kubernetes 配置最佳做法

在 vSphere 集群上配置 vSphere with Kubernetes 时,请考虑以下 佳做法。

n 对 NSX Edge 使用 vSAN 数据存储。

n 如果使用 vSAN 数据存储,请确保为工作负载正确调整 vSAN 环境大小。vSAN 设置需要更多内存,

因为内核内存用于 vSAN。这会减少 NSX Edge 虚拟机可用的内存。使用 vSAN 计算器进行适当调

整。有关 vSAN 大小调整的详细信息,请参见以下资源::

n https://blogs.vmware.com/virtualblocks/2015/11/11/vsan-design-sizing-memory-overhead-considerations/

n https://www.vmbaggum.nl/2017/11/vsan-memory-consumption-calculator/

n https://communities.vmware.com/thread/572229

n 如果使用 NFS 数据存储,请确认该数据存储已在集群中的所有主机之间共享。为每个 NSX Edge 节点

创建唯一的 NFS 数据存储。

n 为每个 NSX Edge 集群配置专用资源池。请勿与其他虚拟机共享资源池。

n 配置 ESXi 主机覆盖网络时,请使用范围 1-4094 内的 VLAN。

n 配置 Edge 覆盖网络时,请使用范围 1-4094 内的 VLAN。

更改 主管集群上的存储设置

分配给 主管集群的存储策略可管理控制层面虚拟机、vSphere 和容器映像缓存等对象如何放置在 vSphere Pod 存储环境中的数据存储中。作为 vSphere 管理员,您通常可以在启用主管集群时配置存储策略。如果

在执行 主管集群初始配置后需要对存储策略分配进行任何更改,请执行此任务。

对存储设置所做的更改仅适用于新对象。

vSphere with Kubernetes 配置和管理

VMware, Inc. 68

Page 69: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

步骤

1 在 vSphere Client 中,导航到已启用 vSphere with Kubernetes 的主机集群。

2 依次单击配置选项卡和命名空间下方的存储。

3 更改以下项目的存储策略分配。

选项 描述

控制层面节点 选择用于放置控制层面虚拟机的存储策略。

Pod 临时磁盘 选择用于放置 vSphere Pod 的存储策略。

容器映像缓存 选择用于放置容器映像缓存的存储策略。

更改 Kubernetes API 端点证书

作为 vSphere 管理员,您可以更改 Kubernetes API 端点证书。该证书将在登录期间以及与 主管集群 进行后续交互期间为开发运维工程师进行 Kubernetes 控制平面身份验证。

前提条件

验证您是否有权访问可对 CSR 进行签名的 CA。对于开发运维工程师,必须将此 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。

vSphere with Kubernetes 配置和管理

VMware, Inc. 69

Page 70: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

在 主管集群上使用命名空间 5作为 vSphere 管理员,您可以在主管集群上创建命名空间,为其配置资源配额、存储并为 DevOps 工程

师用户设置权限。配置命名空间后,便可以将其提供给 DevOps 工程师,以便他们可运行通过 VMware Tanzu™ Kubernetes Grid™ 服务创建的 vSphere Pod 以及 Kubernetes 集群。

本章讨论了以下主题:

n 创建和配置 主管命名空间

n 针对命名空间上的 Kubernetes 对象配置限制

n 设置容器的默认内存和 CPU 预留与限制

n 使用注册表服务提供专用映像注册表

n 更改命名空间上的存储设置

创建和配置 主管命名空间

作为 vSphere 管理员,您可以在 主管集群上创建主管命名空间。您可以将资源限制设置为命名空间和权

限,以便 DevOps 工程师对其进行访问。您可以向 DevOps 工程师提供 Kubernetes 控制平面的 URL,以便他们可以在具有权限的命名空间上运行 Kubernetes 工作负载。

前提条件

n 使用 vSphere with Kubernetes 配置集群。

n 为将访问命名空间的所有 DevOps 工程师创建用户或组。

n 为 Tanzu Kubernetes 集群内的 vSphere Pod 和 pod 使用的持久存储创建存储策略。存储策略可能

定义不同的存储类型和存储类,例如金级、银级和铜级。

n 验证您在 主管集群上是否具有 privilege.Namespaces.Manage.label。

步骤

1 从 vSphere Client 主菜单中,选择工作负载平台。

2 单击命名空间,然后单击创建命名空间。

3 选择要放置命名空间的 主管集群。

VMware, Inc. 70

Page 71: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 输入名称和描述,然后单击创建。

此命名空间是在 主管集群上创建的。

5 设置权限,以便 DevOps 工程师访问此命名空间。

a 从权限窗格中,选择添加权限。

b 选择标识源、用户或组以及角色,然后单击确定。

6 将持久存储设置为命名空间。

分配给命名空间的存储策略可以控制如何在 vSphere 存储环境的数据存储中放置持久卷和 Tanzu Kubernetes 集群节点。与持久卷相对应的持久卷声明可以来自 vSphere Pod 或 Tanzu Kubernetes 集群。

a 从存储窗格中,选择添加存储。

b 选择存储策略以控制持久卷的数据存储放置,然后单击确定。

分配存储策略后,vSphere with Kubernetes 会在主管命名空间中创建匹配的 Kubernetes 存储类。

如果使用 VMware Tanzu™ Kubernetes Grid™ 服务,则该存储类将自动从命名空间复制到

Kubernetes 集群。在将多个存储策略分配给此命名空间时,会为每个存储策略创建一个单独的存储

类。

7 从“容量和使用情况”窗格中,选择编辑配额并为命名空间配置资源限制。

选项 描述

CPU 要为命名空间预留的 CPU 资源量。

内存 要为命名空间预留的内存量。

总存储限制 要为命名空间预留的总存储空间量。

存储策略限制 设置专用于与命名空间关联的每个存储策略的存储量。

将在 vCenter Server 上创建命名空间的资源池。存储限制决定可用于命名空间的总存储量,而存储策

略则决定 vSphere Pod 持久卷在关联存储类上的放置位置。

后续步骤

与 DevOps 工程师共享 Kubernetes 控制平面 URL 以及用于通过 kubectl 登录 vCenter Server 的用户

名。您可以向 DevOps 工程师授予对多个命名空间的访问权限。

针对命名空间上的 Kubernetes 对象配置限制

您可以针对在命名空间内运行的容器配置限制,以及针对各种 Kubernetes 对象配置限制。针对对象配置

的限制取决于应用程序的细节以及您希望用户使用命名空间中的资源的方式。

前提条件

n 验证您对 主管集群是否具有修改命名空间配置权限。

步骤

1 从 vSphere Client 主菜单中,选择工作负载平台。

vSphere with Kubernetes 配置和管理

VMware, Inc. 71

Page 72: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

2 选择一个命名空间,选择配置,然后选择对象限制。

3 针对命名空间配置对象限制。

您设置的 Pod 数量将影响可通过部署、作业、副本集、复制控制器等进行部署的 vSphere Pod 的数

量。

设置容器的默认内存和 CPU 预留与限制

您可以通过 vSphere Client 为命名空间中的容器设置默认内存和 CPU 预留与限制。DevOps 工程师以后

可以在其定义的 Pod 规范中覆盖这些值。容器请求转换为 vSphere Pod 上的资源预留。

前提条件

n 验证您对 主管集群是否具有修改命名空间配置权限。

步骤

1 从 vSphere Client 主菜单中,选择工作负载平台。

2 选择一个命名空间,选择配置,然后单击资源限制

3 为命名空间中的容器配置默认内存和 CPU 预留与限制。

选项 描述

CPU 请求 为命名空间中的容器设置默认 CPU 预留。

CPU 限制 为命名空间中的容器设置默认的 CPU 使用限制。

内存请求 为命名空间中的容器设置默认内存预留。

内存限制 为命名空间中的容器设置默认内存使用限制。

使用注册表服务提供专用映像注册表

您可以通过注册表服务在主管集群上启用专用映像注册表。一个集群可以包含一个专用映像注册表实例。

主管集群上的所有命名空间均表示为专用注册表中的项目。

作为 vSphere 管理员,您可以在主管集群上启用专用映像注册表。您为 DevOps 工程师提供了专用映像

注册表用户界面的 URL,而 DevOps 工程师可以使用 Docker vSphere Credential Helper 执行安全登

录,并对专用映像注册表中的项目执行 Docker 推送和提取映像操作。将映像推送到专用映像注册表中的

项目后,DevOps 工程师可以从中部署 vSphere Pod。

如果 DevOps 工程师报告为某个项目存储了过多的映像,作为 vSphere 管理员,您可以在专用映像注册

表中清除该项目的映像。从项目中清除映像将删除对这些映像的所有引用,但不会从 vSphere 数据存储中

删除这些映像。每星期六的凌晨 2 点,垃圾数据收集器服务将从整个专用映像注册表中删除应用程序未引

用的所有映像。

vSphere with Kubernetes 配置和管理

VMware, Inc. 72

Page 73: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

通过 注册表服务在 主管集群上启用专用映像注册表

作为 vSphere 管理员,您可以通过注册表服务在主管集群上启用专用映像注册表。DevOps 工程师可以从

注册表推送和提取映像,以及使用这些映像部署 vSphere Pod。

前提条件

n 创建用于放置容器映像的存储策略。

步骤

1 在 vSphere Client 中,浏览到要启用映像注册表的集群。

2 选择配置。

3 在命名空间下,选择映像注册表。

4 单击启用 Harbor。

5 选择用于放置容器映像的存储策略。

结果

在几分钟后,将启用专用映像注册表。将为该专用映像注册表实例创建一个特殊命名空间。无法对该命名

空间执行任何操作,它对 vSphere 用户是只读的。

主管集群上的每个命名空间都具有与专用映像注册表同名的匹配项目。在命名空间具有编辑或查看权限的

每个用户或组,会在专用映像注册表中具有相同名称的匹配项目中成为相应的角色成员。项目的生命周期

和专用映像注册表的成员将由系统自动管理,并将链接到命名空间的生命周期和命名空间中的用户或组权

限。

后续步骤

向 DevOps 工程师提供专用映像注册表实例的 URL。

清除专用映像注册表中的映像

作为 vSphere 管理员,您可以通过 DevOps 工程师的请求从专用映像注册表中清除项目的映像。从专用

映像注册表中清除映像会删除对 pod 所创建的映像的所有引用,但不会从映像注册表中移除映像。

步骤

1 在 vSphere Client 中,导航到命名空间。

2 选择配置,然后选择常规。

3 在嵌入式注册表旁边,单击清除。

更改命名空间上的存储设置

vSphere 管理员分配给 主管集群中的命名空间的存储策略可控制如何将在 vSphere 数据存储中放置持久

卷和 Tanzu Kubernetes 集群节点。与持久卷相对应的持久卷声明可以来自 vSphere Pod 或 Tanzu Kubernetes 集群。您可以更改原始存储策略分配。

vSphere with Kubernetes 配置和管理

VMware, Inc. 73

Page 74: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

前提条件

从 vCenter Server 或主管命名空间中删除存储策略或更改存储策略分配之前,请确保命名空间中没有运行

具有对应存储类的持久卷声明。此外,还要确保没有 Tanzu Kubernetes 集群使用存储类。

步骤

1 在 vSphere Client 中,导航到命名空间。

a 从 vSphere Client 主菜单中,选择工作负载平台。

b 选择命名空间。

2 单击存储选项卡,然后单击存储策略。

3 单击编辑图标,以更改存储策略分配。

vSphere with Kubernetes 配置和管理

VMware, Inc. 74

Page 75: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

使用 vSphere Pod 6作为 DevOps 工程师,您可以在 主管集群上运行的命名空间的资源边界内部署 vSphere Pod 并对其进行

生命周期管理。您必须对命名空间具有写权限,才能在该命名空间上部署 vSphere Pod。

本章讨论了以下主题:

n 对 主管集群进行身份验证并获取上下文

n 显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类

n 在命名空间中部署应用程序

n 扩展和缩小应用程序

n 将映像推送到注册表服务上的命名空间

n 使用 注册表服务中的映像部署应用程序

n 部署有状态应用程序

n 监控持久卷

对 主管集群进行身份验证并获取上下文

在 vSphere 管理员为您提供 主管集群上的 Kubernetes 控制平面的 IP 地址后,您可以登录到 主管集群并

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

前提条件

n 从 vSphere 管理员处获取 主管集群上的 Kubernetes 控制层面的 IP 地址。

n 在 vCenter Single Sign-On 中获取您的用户帐户。

n 请与您的 vSphere 管理员联系,确认您具有访问所需上下文的权限。

n 通过将签名 CA 作为可信 Root 进行安装或将证书直接添加为可信 Root,验证 Kubernetes 控制平面

提供的证书在您的系统上是否受信任。

步骤

1 在浏览器窗口中,打开 Kubernetes 控制平面的 URL。

2 确认 vsphere-plugin.zip 的 SHA256 校验和与 sha256sum.txt 文件中的校验和相匹配。

3 在您的计算机上下载 vsphere-plugin.zip 文件,并在操作系统的可执行搜索路径上进行设置。

VMware, Inc. 75

Page 76: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 在命令提示符窗口中,运行以下命令以登录到 vCenter Server:

kubectl vsphere login --server=https://<server_adress> --vsphere-username <your user account name>

5 要查看您可以访问的配置上下文的详细信息,请运行以下 kubectl 命令:

kubectl config get-contexts

CLI 将显示每个可用上下文的详细信息。

6 要在上下文之间切换,请使用以下命令:

kubectl config use-context <example-context-name>

结果

将调用 Kubernetes 控制平面上的登录 API。身份验证代理会将身份验证请求重定向到 vCenter Single Sign-On。vCenter Server 将返回一个 JSON Web 令牌,并将其添加到 kubeconfig 文件。该令牌将通

过每个新的 kubectl 命令发送到 Kubernetes 控制平面,以对用户进行身份验证。

显示 主管命名空间或 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

vSphere with Kubernetes 配置和管理

VMware, Inc. 76

Page 77: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

在输出中,存储类的名称显示为

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

在命名空间中部署应用程序

您可以在主管集群上的命名空间中部署应用程序。部署应用程序后,将在 主管集群的命名空间内创建相应

数量的 vSphere Pod。

您还可以从存储在 Harbor 映像注册表中的映像部署应用程序。请参见使用 注册表服务中的映像部署应用

程序。

前提条件

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>

vSphere with Kubernetes 配置和管理

VMware, Inc. 77

Page 78: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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>

将映像推送到注册表服务上的命名空间

您可以将映像从 Docker 推送到注册表服务上的项目。注册表服务中的项目与 vSphere with Kubernetes上 主管集群中的命名空间相对应。

前提条件

n 验证 主管集群上是否启用了 注册表服务。

n 从 vSphere 管理员处获取 注册表服务用户界面的 URL。

n 获取对以下命名空间具有写入权限的用户帐户:与要推送映像的 注册表服务上的项目对应的命名空

间。

n 从 vSphere 管理员处获取 主管集群上的 Kubernetes 控制层面的 IP 地址。

n 从 Kubernetes 控制层面的页面下载 vSphere Docker Credential Helper 插件,并在系统的可执行

文件路径上配置此插件。

步骤

1 在浏览器中,通过 注册表服务 URL 登录到 注册表服务 用户界面。

2 单击注册表证书以将证书保存在您的计算机上。

vSphere with Kubernetes 配置和管理

VMware, Inc. 78

Page 79: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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>

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>

示例

将以下映像推送到 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>

vSphere with Kubernetes 配置和管理

VMware, Inc. 79

Page 80: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

...

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 文件部署到指定的命名空间。

示例:

使用 注册表服务中 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

vSphere with Kubernetes 配置和管理

VMware, Inc. 80

Page 81: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

部署有状态应用程序

有状态应用程序(例如数据库)在会话之间保存数据,并需要持久存储来存储数据。保留的数据称为应用

程序的状态。之后,您可以检索数据,并在下一个会话中使用该数据。Kubernetes 以能够保留其状态和

数据的对象形式提供持久卷。

在 vSphere 环境中,持久卷对象由位于数据存储上的虚拟磁盘提供支持。数据存储由存储策略表示。

vSphere 管理员创建存储策略(例如 gold)并将其分配给 主管集群中的命名空间后,该存储策略将在 主管命名空间和任何可用的 Tanzu Kubernetes 集群中显示为匹配的 Kubernetes 存储类。

作为 DevOps 工程师,您可以在持久卷声明规范中使用存储类。然后,可以部署使用持久卷声明中存储的

应用程序。

前提条件

确保 vSphere 管理员已创建适当的存储策略并将该策略分配给命名空间。

步骤

1 在 vSphere Kubernetes 环境中访问您的命名空间。

请参见对 主管集群进行身份验证并获取上下文。

2 验证存储类是否可用。

请参见显示 主管命名空间或 Tanzu Kubernetes 集群中的存储类。

vSphere with Kubernetes 配置和管理

VMware, Inc. 81

Page 82: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 82

Page 83: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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 使用持久卷声明中描述的持久存储。

后续步骤

vSphere 管理员可以在 vSphere Client 中查看和监控持久卷。请参见监控持久卷。

监控持久卷

当 DevOps 工程师使用持久卷声明部署有状态应用程序时,vSphere with Kubernetes 会创建持久卷对象

和匹配的持久虚拟磁盘。作为 vSphere 管理员,您可以在 vSphere Client 中查看持久卷的详细信息。此

外,还可以监控持久卷的存储合规性和运行状况。

步骤

1 在 vSphere Client 中,导航到具有持久卷的命名空间。

a 从 vSphere Client 主菜单中,选择工作负载平台。

b 单击命名空间。

2 单击存储选项卡,然后单击持久卷声明。

vSphere Client 将列出命名空间中可用的所有持久卷声明对象和相应的卷。

3 要查看所选持久卷声明的详细信息,请在持久卷名称列中单击该卷的名称。

vSphere with Kubernetes 配置和管理

VMware, Inc. 83

Page 84: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 在容器卷页面上,检查卷的运行状况和存储策略合规性。

a 单击详细信息图标,然后在基础知识和 Kubernetes 对象选项卡之间切换,以查看 Kubernetes 持久卷的其他信息。

b 验证存储合规性状态。

可以在合规性状态列中看到以下项之一。

合规性状态 描述

合规 支持卷的虚拟磁盘所在的数据存储具有策略所需的存储功能。

已过期 该状态表示策略已进行编辑,但新的存储要求尚未传递到数据存储。要传递更改,请将策略重新应用于已过

期的卷。

不合规 数据存储支持指定的存储要求,但目前无法符合存储策略。例如,当数据存储的物理资源不可用时,状态可

能变为“不合规”。您可以通过更改主机集群的物理配置将数据存储变为合规,例如向集群添加主机或磁

盘。如果其他资源符合存储策略,状态将变为“合规”。

vSphere with Kubernetes 配置和管理

VMware, Inc. 84

Page 85: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

合规性状态 描述

不适用 存储策略引用不受数据存储支持的数据存储功能。

c 如果合规性状态为“已过期”,请选择卷,然后单击重新应用策略。

状态将更改为“合规”。

vSphere with Kubernetes 配置和管理

VMware, Inc. 85

Page 86: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

在 vSphere with Kubernetes 中运行 Tanzu Kubernetes 集群 7可以通过使用 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 集群环境

可以使用多种方法连接到 Tanzu Kubernetes 集群,并根据您的角色和目标进行身份验证。

下载并安装 适用于 vSphere 的 Kubernetes CLI 工具

可以使用 适用于 vSphere 的 Kubernetes CLI 工具查看并控制 vSphere with Kubernetes 命名空间和集

群。

Kubernetes CLI 工具下载软件包包含两个可执行文件:标准的开源 kubectl 和 kubectl 的 vSphere 插件。kubectlCLI 具有可插入架构。kubectl 的 vSphere 插件扩展了可供 kubectl 使用的命令,以便使用

vCenter Single Sign-On 凭据连接到 主管集群和 Tanzu Kubernetes 集群。

注 好下载并安装 新版本的 kubectl 的 vSphere 插件。

前提条件

n 从 vSphere 管理员获取 Kubernetes CLI 工具下载页面的链接。

n 或者,如果您有权访问 vCenter Server,请按如下所示获取链接:

n 使用 vSphere Client 登录 vCenter Server。

n 导航到 vSphere 集群 > 命名空间 > Supervisor 命名空间。

n 选择摘要选项卡,然后在此页面上找到状态区域。

VMware, Inc. 86

Page 87: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

n 选择链接到 CLI 工具标题下的打开以打开下载页面。或者,可以复制该链接。

步骤

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 要验证 kubectlCLI 的安装,请启动 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 Kubernetes 支持使用 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 集群时,该插件

会为您安装 Tanzu Kubernetes 集群 CA 证书。此证书存储在名为 TANZU-KUBERNETES-CLUSTER-NAME-ca 的 Kubernetes 密钥中。该插件使用此证书在相应集群的证书颁发机构数据存储中填充 CA 信息。

vSphere with Kubernetes 配置和管理

VMware, Inc. 87

Page 88: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

如果要更新 vSphere with Kubernetes,请确保更新到插件的 新版本。请参见更新 kubectl 的 vSphere 插件。

以 vCenter Single Sign-On 用户的身份连接到 主管集群

要使用 Tanzu Kubernetes Grid 服务置备 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 [email protected]

此操作将创建一个配置文件,其中包含用于向 Kubernetes API 进行身份验证的 JSON Web 令牌

(JWT)。

vSphere with Kubernetes 配置和管理

VMware, Inc. 88

Page 89: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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 工具.

vSphere with Kubernetes 配置和管理

VMware, Inc. 89

Page 90: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

步骤

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 [email protected]

此操作将创建一个配置文件,其中包含用于向 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。

vSphere with Kubernetes 配置和管理

VMware, Inc. 90

Page 91: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

以 Kubernetes 管理员用户身份连接到 Tanzu Kubernetes 集群控制平面

可以 kubernetes-admin 用户身份连接到 Tanzu Kubernetes 集群控制平面,以便执行管理任务和对集群

问题进行故障排除。

已置备 Tanzu Kubernetes 集群的有效 kubeconfig 文件在 主管集群上作为名为 CLUSTER-NAME-

kubeconfig 的机密对象提供。可以使用此密钥以 kubernetes-admin 用户身份连接到集群控制平面。如果

vCenter Single Sign-On 不可用,则可能必须执行此操作。有关此密钥的详细信息,请参见 Tanzu Kubernetes 集群密钥。

前提条件

连接到主管集群。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

步骤

1 将上下文切换到置备了 主管命名空间集群的 Tanzu Kubernetes。

kubectl config use-context SUPERVISOR-NAMESPACE

2 通过运行以下命令查看密钥。

kubectl get secrets

该命令返回命名空间中使用的多个密钥对象。为实现此目的而需要的密钥名为 CLUSTER-NAME-kubeconfig。有关此密钥对象的详细信息,请参见 Tanzu Kubernetes 集群密钥。

3 通过运行以下命令访问密钥。

注 用于对密码进行解密的凭据是使用 Base64 编码的。在 Linux 上,请使用-d 对其进行解码。在

Mac 上,请使用 -D。

kubectl get secret CLUSTER-NAME-kubeconfig -o jsonpath='{.data.value}' | base64 -d > tkg-cluster-

kubeconfig-admin

该命令会将解码后的密钥写入名为 tkg-cluster-kubeconfig-admin 的本地文件。可以使用 cat 命令读

取该文件并对其进行验证。

4 以 Kubernetes 管理员身份使用解码后的 tkg-cluster-kubeconfig-admin 文件连接到 Tanzu Kubernetes 集群。

有两种选项可以实现此操作。

选项 描述

--kubeconfig <path\to\kubeconfig> 使用 --kubeconfig 标记和本地 kubeconfig 文件的路径。例如,假设 kubeconfig 文件位于运行命令的同一目录中:kubectl --kubeconfig tkg-cluster-

kubeconfig-admin get nodes

KUBECONFIG 将 KUBECONFIG 环境变量设置为指向解码后的 kubeconfig 文件并运行

kubectl,例如 kubectl get nodes。

vSphere with Kubernetes 配置和管理

VMware, Inc. 91

Page 92: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

以系统用户身份使用 SSH 访问 Tanzu Kubernetes 集群节点

您可以以 vmware-system-user 身份使用 SSH 协议访问 Tanzu Kubernetes 集群节点并对其进行故障排

除。

要进行故障排除,可以以 vmware-system-user 用户身份通过 SSH 连接到任何 Tanzu Kubernetes 集群节

点。包含 SSH 私钥的机密被命名为 CLUSTER-NAME-ssh。有关此密钥的详细信息,请参见 Tanzu Kubernetes 集群密钥。

前提条件

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

步骤

1 创建名为 NAMESPACE 的环境变量,其值为 主管命名空间的名称。

export NAMESPACE=YOUR-SUPERVISOR-NAMESPACE

2 将上下文切换到置备了 主管命名空间集群的 Tanzu Kubernetes。

kubectl config use-context $NAMESPACE

3 运行以下 kubectl 命令以查看 YOUR-CLUSTER-NAME-ssh 密钥对象。

kubectl get secrets

有关 YOUR-CLUSTER-NAME-ssh 密钥对象的详细信息,请参见 Tanzu Kubernetes 集群密钥。

4 使用以下 jumpbox.yaml pod 规范创建一个跳转盒 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

vSphere with Kubernetes 配置和管理

VMware, Inc. 92

Page 93: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

volumes:

- name: ssh-key

secret:

secretName: YOUR-CLUSTER-NAME-ssh #REPLACE YOUR-CLUSTER-NAME

5 通过应用 jumpbox.yaml 规范置备该跳转盒 pod。

kubectl apply -f jumpbox.yaml

6 通过运行以下一组命令,创建具有目标集群节点的 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}')

7 运行以下命令,使用跳转盒通过 SSH 访问集群节点。

kubectl exec -it jumpbox /usr/bin/ssh vmware-system-user@$VMIP

后续步骤

进行身份验证后,您可能需要使用 sudo 或 sudo su 执行某些操作,例如重新启动 kubelet。

以系统用户身份使用密码连接到集群节点

可以 vmware-system-user 用户身份使用密码连接到任何集群节点,以便对 Tanzu Kubernetes 集群进行故

障排除。可以通过 SSH 或使用虚拟机控制台提供密码。

可以 vmware-system-user 用户身份使用密码连接到集群节点。该密码将作为名为 CLUSTER-NAME-ssh-

password 的密码进行存储。密码在.data.ssh-passwordkey 中以 base64 编码。可以通过 SSH 会话或通过

使用 vSphere Client 访问虚拟机控制台来提供此密码。有关此密钥的详细信息,请参见 Tanzu Kubernetes 集群密钥。

前提条件

连接到主管集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。

步骤

1 将上下文切换到置备了 主管命名空间集群的 Tanzu Kubernetes。

kubectl config use-context NAMESPACE

vSphere with Kubernetes 配置和管理

VMware, Inc. 93

Page 94: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

2 查看密钥。

kubectl get secrets

3 获取目标集群的密码,对其进行解码,然后将其写入本地文件。

kubectl get secret CLUSTER-NAME-ssh-password -o jsonpath='{.data.ssh-passwordkey}' | base64 -d >

tkg-cluster-password

注 用于对密码进行解密的凭据是使用 Base64 编码的。在 Linux 上,请使用-d 对其进行解码。在

Mac 上,请使用 -D。

该命令会将密码写入名为 tkg-cluster-password 的本地文件。

4 获取目标集群节点虚拟机的 IP 地址。

kubectl get virtualmachines

5 使用 SSH 或 Web 控制台远程登录到目标虚拟机节点。

选项 描述

使用 SSH 登录 a 运行 shell 或终端会话。

b 运行下列命令:

ssh vmware-system-user@NODE-IP-ADDRESS

c 在提示符下输入密码。

使用 Web 控制台登录 a 使用 vSphere Client 登录 vCenter Server。

b 选择菜单 > 虚拟机和模板。

c 在 vSphere 清单中找到虚拟机。

d 单击启动 Web 控制台,然后选择确定。

e 在提示符下输入用户名 vmware-system-user。

f 在提示符下输入密码。

向开发人员授予 Tanzu Kubernetes 集群访问权限

开发人员是 Kubernetes 的目标用户。置备 Tanzu Kubernetes 集群后,可以使用 vCenter Single Sign-On 身份验证向开发人员授予访问权限。

验证开发人员的身份

集群管理员可以向其他用户(如开发人员)授予集群访问权限。开发人员可以使用其用户帐户直接将 pod 到集群,也可以使用服务帐户间接部署。有关详细信息,请参见对 Tanzu Kubernetes 集群使用 POD 安全策略。

n 对于用户帐户身份验证,Tanzu Kubernetes 集群支持 vCenter Single Sign-On 用户和组。用户或组

可以是 vCenter Server 的本地用户或组,也可以从受支持的目录服务器进行同步。

n 对于服务帐户身份验证,可以使用服务令牌。有关详细信息,请参见 Kubernetes 文档。

vSphere with Kubernetes 配置和管理

VMware, Inc. 94

Page 95: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

将开发人员用户添加到集群

要向开发人员授予集群访问权限,请执行以下操作:

1 为用户或组定义 Role 或 ClusterRole,并将其应用于集群。有关详细信息,请参见 Kubernetes 文档。

2 为用户或组创建 RoleBinding 或 ClusterRoleBinding,并将其应用于集群。请参见下面的示例。

示例 RoleBinding

要向 vCenter Single Sign-On 用户或组授予访问权限,RoleBinding 中的主题必须包含 name 参数的以下

任一值。

表 7-1. 支持的用户和组字段

字段 描述

sso:USER-NAME@DOMAIN 例如,本地用户名,如 sso:[email protected]

sso:GROUP-NAME@DOMAIN 例如,与 vCenter Server 集成的目录服务器中的组名称,如

sso:[email protected]

以下示例 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

subjects:

- kind: User

name: sso:[email protected] #sso:<username>@<domain>

apiGroup: rbac.authorization.k8s.io

vSphere with Kubernetes 配置和管理

VMware, Inc. 95

Page 96: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

创建 Tanzu Kubernetes 集群

可以通过 kubectl CLI 和使用 YAML 定义的集群规范调用 Tanzu Kubernetes Grid 服务 声明性 API 来创

建 Tanzu Kubernetes 集群。

用于创建 Tanzu Kubernetes 集群的工作流

通过调用 Tanzu Kubernetes Grid 服务 声明性 API 来置备 Tanzu Kubernetes 集群。置备集群后,可以

使用自定义资源对其进行管理,并使用 kubectl 部署工作负载。

用于创建 Tanzu Kubernetes 集群的工作流

该工作流简要地概述了置备过程。每个步骤都包含链接,可用于了解有关特定任务的详细信息。

1 与您的 vSphere 管理员确认是否已完成以下必备条件。

a 已为您的数据中心启用 vSphere with Kubernetes(工作负载管理)。

b 已创建并配置 主管命名空间用于托管 Tanzu Kubernetes 集群。

n 已为一个或多个 DevOps 工程师添加编辑权限,使其能够使用自己的 vCenter Single Sign-On 凭据访问 主管命名空间。

n 已定义基于标记的存储策略并将其与 主管命名空间相关联。

n 根据需要验证和调整容量与使用配额。

2 要托管 OVA 文件以创建 Tanzu Kubernetes 集群节点,请在共享数据存储上创建已订阅内容库。有

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

3 要连接并操作 Tanzu Kubernetes 集群,请下载并安装适用于 vSphere 的 Kubernetes CLI 工具。有

关详细信息,请参见下载并安装 适用于 vSphere 的 Kubernetes CLI 工具。

4 要置备 Tanzu Kubernetes 集群,请向主管集群进行身份验证。有关详细信息,请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

5 要为 Tanzu Kubernetes 集群定义规范,请创建集群配置 YAML 文件,如下所示。

a 要查看用于置备 Tanzu Kubernetes 集群的配置参数列表,请参见 Tanzu Kubernetes 集群的配

置参数。

b 要列出可用虚拟机类并确定要使用的虚拟机类,请运行以下命令。有关详细信息,请参见 Tanzu Kubernetes 集群的虚拟机类类型。

kubectl describe virtualmachineclasses

c 要确定可用存储类并确定要使用的存储类,请运行以下命令。有关详细信息,请参见 vSphere with Kubernetes 中的存储。

kubectl describe namespace SUPERVISOR-NAMESPACE

vSphere with Kubernetes 配置和管理

VMware, Inc. 96

Page 97: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

d 要列出可用 Kubernetes 软件版本,请运行以下命令。

kubectl get virtualmachineimages

e 要构建用于置备 Tanzu Kubernetes 集群的 YAML 文件,请使用子步骤 a、b、c 和 d 中收集的

信息,并参阅示例:用于置备 Tanzu Kubernetes 集群的示例 YAML 文件。

6 要置备集群,请运行以下命令。有关详细信息,请参见置备 Tanzu Kubernetes 集群。

kubectl apply -f CLUSTER-NAME.yaml

7 要监控集群节点的部署,请使用 vSphere Client 和 kubectl。有关更多信息,请参见《使用 vSphere Client 监控 Tanzu Kubernetes 集群状态》和《使用 kubectl 监控 Tanzu Kubernetes 集群状态》。

8 要登录到集群,请使用 kubectl 的 vSphere 插件。有关详细信息,请参见以 vCenter Single Sign-On用户身份连接到 Tanzu Kubernetes 集群。

9 要验证 Tanzu Kubernetes 集群创建,请部署示例工作负载。有关详细信息,请参见以下主题:

n Tanzu Kubernetes 工作负载示例

n Tanzu Kubernetes 服务负载平衡器示例

n Tanzu Kubernetes Ingress 示例

n 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 集群迁移到新内容库。。

vSphere with Kubernetes 配置和管理

VMware, Inc. 97

Page 98: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

前提条件

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

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

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

步骤

1 在 vSphere Client 中,选择菜单 > 内容库。

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

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

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 要完成此过程,请单击确定。

vSphere with Kubernetes 配置和管理

VMware, Inc. 98

Page 99: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

置备 Tanzu Kubernetes 集群

使用调用 Tanzu Kubernetes Grid 服务 API 的描述性 YAML 文件置备 Tanzu Kubernetes 集群。

前提条件

n 获取 主管集群控制层面的 IP 地址。

n 获取计划部署 Tanzu Kubernetes 集群的 主管命名空间的名称。

n 创建并关联已订阅内容库。请参见为 Tanzu Kubernetes 集群创建已订阅内容库。

n 使用主管集群进行身份验证。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。

步骤

1 切换到要在其中部署 Tanzu Kubernetes 集群的命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

例如:

kubectl config use-context sns-1

2 选择映像版本。

a 获取可用内容映像的列表以及映像提供的 Kubernetes 版本。

kubectl get virtualmachineimages

示例结果:

NAME VERSION OSTYPE

photon-3-k8s-v1.16.4---vmware.1-tkg.1.baa5e61 v1.16.4+vmware.1-tkg.1.baa5e61

vmwarePhoton64Guest

b 要查看有关可用映像的详细信息,请运行以下命令。

kubectl describe virtualmachineimages

c 确定要使用的映像版本。例如,v1.16.6+vmware.1-tkg.1.886c781.

注 该示例显示了完全限定的语义版本。支持版本快捷方式,例如 version: v1.16.6 和 version:

v1.16。请参见 Tanzu Kubernetes 集群的配置参数。

3 创建具有所需配置参数的 YAML 文件以定义集群。

a 从示例 YAML 文件之一开始。请参见用于置备 Tanzu Kubernetes 集群的示例 YAML 文件。

b 参考支持的参数列表编制 YAML,以符合您的规范。请参见 Tanzu Kubernetes 集群的配置参

数。

vSphere with Kubernetes 配置和管理

VMware, Inc. 99

Page 100: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 使用以下 kubectl 命令置备 Tanzu Kubernetes 集群。

kubectl apply -f CLUSTER-NAME.yaml

5 要监控集群置备和节点创建,请使用 vSphere Client。请参见使用 vSphere Client 监控 Tanzu Kubernetes 集群状态。

6 要验证是否已成功置备集群,请运行以下 kubectl 命令。

a 要列出命名空间中置备的集群,请运行以下命令。

kubectl get tanzukubernetesclusters

示例结果:

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE

tkc-cluster 1 1 v1.16.4+vmware.1-tkg.1.886c781 6d5h running

b 要查看有关特定集群的详细信息,请运行以下命令。

kubectl describe tanzukubernetescluster CLUSTER-NAME

注 有关其他命令,请参见 Tanzu Kubernetes 集群操作命令。

7 要验证是否已成功置备集群,请登录。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。

8 要调试集群的置备,请运行以下命令。

kubectl get tanzukubernetescluster,cluster-

api,virtualmachinesetresourcepolicy,virtualmachineservice,virtualmachine

注 如需进一步故障排除,请参见 Tanzu Kubernetes 集群故障排除。

Tanzu Kubernetes 集群的配置参数

Tanzu Kubernetes Grid 服务 API 公开了几个用于置备和更新 Tanzu Kubernetes 集群的参数。

用于置备 Tanzu Kubernetes 集群的参数

下表列出并介绍了用于集群置备的所有 YAML 参数和可接受的值。

注 此表为所有集群置备参数提供参考。要查看示例 YAML 文件中参数的层次结构,请参见用于置备

Tanzu Kubernetes 集群的示例 YAML 文件。

vSphere with Kubernetes 配置和管理

VMware, Inc. 100

Page 101: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

表 7-2. 用于置备 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 系统定义的元素,采用枚举集合中字符串

的形式,例如:guaranteed-small 或

best-effort-large

指定 VirtualMachineClass 的名称,此参

数描述了池中每个节点使用的虚拟硬件设

置。此参数控制节点可用的硬件(CPU 和内存)以及有关这些资源的请求和限制。

请参见 Tanzu Kubernetes 集群的虚拟机

类类型。

vSphere with Kubernetes 配置和管理

VMware, Inc. 101

Page 102: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

表 7-2. 用于置备 Tanzu Kubernetes 集群的参数 (续)

名称 值 描述

storageClass node-storage(示例) 标识用于存储磁盘(存储控制平面节点的

根文件系统)的存储类。在命名空间上运

行 kubectl describe ns 可查看可用的存

储类。命名空间的可用存储类取决于

vSphere 管理员设置的存储。与主管命名

空间关联的存储类将在集群中进行复制。

换句话说,存储类必须在主管命名空间上

可用,才能成为此字段的有效值。

workers 不适用 指定集群工作节点的拓扑,包括节点数量

(count)、虚拟机类型 (class) 以及为每个

节点分配的存储资源 (storageClass)。

count 介于 0 和 150 之间的整数,例如:1、2

或 7指定集群中的工作节点数。可以创建具有

零个工作节点的集群,从而允许使用仅具

有控制平面节点的集群。工作节点数上限

无硬性限制,但合理的限制为 150 个。

class 系统定义的元素,采用枚举集合中字符串

的形式,例如:guaranteed-small 或

best-effort-large

指定 VirtualMachineClass 的名称,此参

数描述了池中每个节点使用的虚拟硬件设

置。此参数控制节点可用的硬件(CPU 和内存)以及有关这些资源的请求和限制。

请参见 Tanzu Kubernetes 集群的虚拟机

类类型。

storageClass node-storage(示例) 标识用于存储磁盘(存储工作节点的根文

件系统)的存储类。在命名空间上运行

kubectl describe ns 可列出可用的存储

类。命名空间的可用存储类取决于

vSphere 管理员设置的存储。与主管命名

空间关联的存储类将在集群中进行复制。

换句话说,存储类必须在主管命名空间上

可用,才能有效。

distribution 不适用 指示集群的分发:在控制平面节点和工作

节点上安装的 Tanzu Kubernetes 集群软

件,包括 Kubernetes 本身。

version 用字母数字字符串和短划线表示

Kubernetes 版本,例如:

v1.16.6+vmware.1-tkg.1、v1.16.6 或

v1.16

使用语义版本表示法指定要在集群节点上

安装的 Kubernetes 发行版的软件版本。

可以指定完全限定版本,也可以使用版本

快捷方式,如“version: v1.16.6”(解析

为与该修补程序版本匹配的 新映像)或

“version: v1.16”(解析为 新匹配的修

补程序版本)。在创建集群后,解析后的

版本将在集群描述中显示为

“fullVersion”。

settings 不适用 标识集群的可选运行时配置信息,包括

Pod 的节点 network 详细信息和持久

storage。

network 不适用 指定集群的网络相关设置。

vSphere with Kubernetes 配置和管理

VMware, Inc. 102

Page 103: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

表 7-2. 用于置备 Tanzu Kubernetes 集群的参数 (续)

名称 值 描述

cni 不适用 标识集群的容器网络接口 (CNI) 插件。默

认值为 Calico。

name calico 指定要使用的 CNI。目前仅支持 Calico。

其他任何值都无效。

services 不适用 标识 Kubernetes 服务的网络设置。默认

值为 10.96.0.0/12。

cidrBlocks ["198.51.100.0/12"](示例) 指定要用于 Kubernetes 服务的 IP 地址范

围。默认值为 10.96.0.0/12。不能与为主

管集群选择的设置重叠。虽然此字段是一

个数组,允许使用多个范围,但 Calico 仅支持一个范围,并且 Calico 是当前唯一支

持的 CNI。

pods 不适用 指定 Pod 的网络设置。默认值为

192.168.0.0/16。

cidrBlocks ["192.0.2.0/16"] (示例) 指定要用于 Kubernetes Pod 的 IP 地址范

围。默认值为 192.168.0.0/16。不能与为

主管集群选择的设置重叠。虽然此字段是

一个数组,允许使用多个范围,但 Calico 仅支持一个范围,并且 Calico 是当前唯一

支持的 CNI。

serviceDomain "cluster.local" 指定集群的服务域。默认值为

cluster.local。

storage 不适用 标识容器工作负载的持久卷 (PV) 存储条

目。

classes 由一个或多个用户定义的字符串组成的数

组,例如:["gold", "silver"]

指定容器工作负载的命名持久卷 (PV) 存储

类。与主管命名空间关联的存储类将在集

群中进行复制。换句话说,存储类必须在

主管命名空间上可用,才能成为有效值。

defaultClass silver(示例) 指定要注释为集群中默认值的命名存储

类。如果未指定,则没有默认值。无需指

定一个或多个 classes 即可指定

defaultClass。

Tanzu Kubernetes 集群的虚拟机类类型

置备 Tanzu Kubernetes 集群时指定虚拟机类类型。每个类类型都为虚拟机预留一组资源,包括处理、内

存和存储。此外,对于每种类型,都有保证版本和 大努力版本两个版本,具体取决于您的用例。

精选虚拟机类类型的默认值

下表列出了精选虚拟机类类型的默认值,将它们用作 Tanzu Kubernetes 集群节点的虚拟机部署大小。每

个类类型都是在虚拟机上预留资源以用于处理、内存和存储的一个请求。

vSphere with Kubernetes 配置和管理

VMware, Inc. 103

Page 104: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

每个类类型有两个版本:保证版本和 大努力版本。保证类版本将完整预留为其配置的资源,即对于集

群,spec.policies.resources.requests 与 spec.hardware 设置相匹配。 大努力类版本则不然,它允许

过量分配资源。通常,保证类用于生产工作负载。

注 该列表可能并不详尽,并且将来的虚拟机类型可能会可自定义。要查看您的环境中可用的虚拟机类型的

当前完整列表,请登录到 主管集群并运行 kubectl describe virtualmachineclasses 命令。

表 7-3. 精选虚拟机类类型的默认值

类 CPU 内存 (GB) 存储 (GB) 预留的 CPU 和内存

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.16)解析为与该次版本匹配的 新分发版,如 v1.16.8+vmware.1-tkg.3.60d2ffd。

n 虚拟机类 best-effort-<size>没有预留。有关详细信息,请参见 Tanzu Kubernetes 集群的虚拟机类

类型。

n 如果要将 Helm 或 Kubeapps 用作 defaultClass(由许多图表引用),请将

spec.settings.storage.defaultClass 添加到 小 YAML。

n 未指定 settings.storage 的运行时参数,因为使用默认值。

vSphere with Kubernetes 配置和管理

VMware, Inc. 104

Page 105: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

n 不需要 settings.network 的运行时参数,因为使用默认值。以下是默认网络设置,供您参考。有关详

细信息,请参见 Tanzu Kubernetes 集群的配置参数。

n 默认 Pod CIDR:192.168.0.0/16

n 默认服务 CIDR:10.96.0.0/12

n 默认服务域:cluster.local

n 由于已实施 对 Tanzu Kubernetes 集群使用 POD 安全策略,使用此示例 YAML 创建 Tanzu Kubernetes 集群后,您将能够运行 Pod,而不是运行部署。要创建部署,默认 Pod 安全策略的示例

绑定为默认 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.16 #resolved kubernetes version

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

用于置备集群的完整 YAML

创建 Tanzu Kubernetes 集群所需的完整 YAML 配置具有以下特性:

n 此 YAML 置备一个具有三个控制平面节点和五个工作节点的集群。

n 指定了完整分发名称和 Kubernetes 版本:v1.16.8+vmware.1-tkg.3.60d2ffd。

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:

vSphere with Kubernetes 配置和管理

VMware, Inc. 105

Page 106: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

distribution:

version: v1.16.8+vmware.1-tkg.3.60d2ffd #The full image name is specified

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 集群

可使用 kubectl 删除 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群。

请勿尝试使用 vSphere Client 或 vCenter Server CLI 删除 Tanzu Kubernetes 集群。

前提条件

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

步骤

1 运行以下 kubectl 命令以将配置上下文切换到目标集群。

kubectl config use-context CLUSTER-NAME

2 要删除集群,请运行以下命令。

kubectl delete tanzukubernetescluster --namespace CLUSTER-NAMESPACE CLUSTER-NAME

例如:

kubectl delete tanzukubernetescluster --namespace tkg-cluster-ns tkg-cluster-1

预期结果:使用 Kubernetes 资源垃圾数据收集时,将删除 Tanzu Kubernetes Grid 服务为置备

Tanzu Kubernetes 集群而创建的所有从属资源。

vSphere with Kubernetes 配置和管理

VMware, Inc. 106

Page 107: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

在气隙环境中置备 Tanzu Kubernetes 集群

要在气隙环境中置备 Tanzu Kubernetes 集群,请下载虚拟机映像文件并创建本地内容库。将映像导入到

本地库,并将其与创建 Tanzu Kubernetes 集群的 主管命名空间 相关联。

下载映像文件

要在气隙环境中置备 Tanzu Kubernetes 集群,请首先从公用内容交付网络 (CDN) 下载 OVA 和 OVF 文件。

前提条件

查看工作流。

n 在气隙环境中置备 Tanzu Kubernetes 集群.

步骤

1 使用浏览器,导航到以下 URL:https://wp-content.vmware.com/v2/latest/。

2 单击所需映像的目录。通常,此目录是 新的 Kubernetes 分发版本。

例如:

ob-15957779-photon-3-k8s-v1.16.8---vmware.1-tkg.3.60d2ffd

注 稍后在将文件导入到本地内容库时需要提供该分发名称,因此您可能需要将它复制到某个文件,或

保持浏览器的打开状态,直到完成该过程为止。

3 对于以下每个文件,右键单击并选择将链接另存为。

n photon-ova.ovf

n photon-ova-disk1.vmdk

4 验证是否已将每个文件成功下载到您的本地文件系统。

后续步骤

创建本地内容库.

创建本地内容库

要在气隙环境中置备 Tanzu Kubernetes 集群,请创建本地内容库。

前提条件

下载映像文件.

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 单击菜单。

3 单击内容库。

vSphere with Kubernetes 配置和管理

VMware, Inc. 107

Page 108: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 单击 +创建图标。

5 在新建内容库向导中,按如下所示对库进行配置:

a 输入库的名称,例如 Kubernetes-local,然后单击下一步。

b 选择本地内容库,然后单击下一步。

c 选择数据存储,然后单击下一步。

d 查看配置,然后单击完成。

后续步骤

将映像导入到本地内容库.

将映像导入到本地内容库

要在气隙环境中置备 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 监控任务获取库项目的内容并确认它已成功完成。

vSphere with Kubernetes 配置和管理

VMware, Inc. 108

Page 109: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

后续步骤

将本地内容库与 主管命名空间相关联.

将本地内容库与 主管命名空间相关联

要在气隙环境中置备 Tanzu Kubernetes 集群,请将本地内容库与 主管命名空间相关联。

前提条件

n 下载映像文件.

n 创建本地内容库.

n 将映像导入到本地内容库.

步骤

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 将本地内容库与 主管命名空间相关联.

vSphere with Kubernetes 配置和管理

VMware, Inc. 109

Page 110: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

步骤

1 登录到 主管集群。

例如:

kubectl vsphere login --server IP-ADDRESS-SUPERVISOR-CLUSTER --vsphere-username VCENTER-SSO-

USERNAME

2 将上下文切换到目标 主管命名空间。

kubectl config use-context SUPERVISOR-NAMESPACE

3 运行下列命令。

kubectl get virtualmachineimages

验证是否看到从本地内容库同步的映像。

NAME AGE

photon-3-k8s-v1.16.8---vmware.1-tkg.3.60d2ffd 14m

后续步骤

使用本地映像创建集群.

使用本地映像创建集群

要在气隙环境中置备 Tanzu Kubernetes 集群,请使用从本地内容库同步的虚拟机映像创建集群。

对于 distribution.version 值,可以输入完整映像名称,或者,如果您保留了映像目录中的名称格式,则

可以将其缩短为 Kubernetes 版本。如果要使用完全限定的版本号,请将 -----替换为+。例如,如果有一

个名为 photon-3-k8s-v1.16.8---vmware.1-tkg.3.60d2ffd 的 OVA 映像,则可以接受以下格式。

spec:

distribution:

version: v1.16.8

spec:

distribution:

version: v1.16.8+vmware.1-tkg.3

spec:

distribution:

version: v1.16.8+vmware.1-tkg.3.60d2ffd

```

vSphere with Kubernetes 配置和管理

VMware, Inc. 110

Page 111: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

前提条件

n 下载映像文件.

n 创建本地内容库.

n 将映像导入到本地内容库.

n 将本地内容库与 主管命名空间相关联.

n 验证虚拟机映像是否可用.

步骤

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.16.8

settings:

network:

cni:

name: calico

services:

cidrBlocks: ["198.51.100.0/12"]

pods:

cidrBlocks: ["192.0.2.0/16"]

2 要创建集群,请运行以下命令。

kubectl apply -f CLUSTER-NAME.yaml

vSphere with Kubernetes 配置和管理

VMware, Inc. 111

Page 112: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

将工作负载部署到 Tanzu Kubernetes 集群

可以使用 pod、服务、持久卷和高级别资源(如 Deployment 和 Replica Set)将应用程序工作负载部署

到 Tanzu Kubernetes 集群。

Tanzu Kubernetes 工作负载示例

置备 Tanzu Kubernetes 集群后, 好部署一个测试工作负载并验证集群功能。

您可以使用示例应用程序 Kubernetes Up and Running Demo 帮助您验证新置备的集群是否正常运行。

前提条件

n 置备 Tanzu Kubernetes 集群。请参见置备 Tanzu Kubernetes 集群。

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

步骤

1 通过运行以下命令,切换上下文以使用目标 Tanzu Kubernetes 集群配置上下文。

kubectl config use-context TANZU-CLUSTER-NAME

2 通过运行以下命令,将 kuard 应用程序部署到您的 Tanzu Kubernetes 集群。

kubectl run --restart=Never --image=gcr.io/kuar-demo/kuard-amd64:blue kuard

3 通过运行以下命令将容器端口 8080 转发到本地主机端口 8080。

kubectl port-forward kuard 8080:8080

4 运行浏览器并转到 http://localhost:8080。

将显示 kuard 网页,您可以浏览该网页。完成后,在 kubectl 会话中按 Ctrl+C 以停止端口转发。

5 要验证是否已创建 POD,请运行以下命令。

kubectl get pods

预期结果:

NAME READY STATUS RESTARTS AGE

kuard 1/1 Running 0 10d

6 要删除创建的 kuardPOD,请运行以下命令。

kubectl delete pod kuard

预期结果:

pod "kuard" deleted

vSphere with Kubernetes 配置和管理

VMware, Inc. 112

Page 113: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

7 要验证是否已删除创建的 POD,请运行以下命令。

kubectl get pods

后续步骤

验证集群节点网络连接。请参见 Tanzu Kubernetes 集群网络连接命令。

Tanzu Kubernetes 服务负载平衡器示例

要在 Tanzu Kubernetes 集群中置备外部负载平衡器,可以创建 LoadBalancer 类型的服务。负载平衡器

服务公开公用 IP 地址。来自外部负载平衡器的流量可以定向到集群 pod。

可以为作为服务提供的 Kubernetes pod 置备外部负载平衡器。例如,可以部署 Nginx 容器,并将其作为

LoadBalancer 类型的 Kubernetes 服务提供。

前提条件

n 查看 Kubernetes 文档中的服务类型 LoadBalancer。

n 置备 Tanzu Kubernetes 集群。请参见置备 Tanzu Kubernetes 集群。

n 创建相应的 PodSecurityPolicy。请参见对 Tanzu Kubernetes 集群使用 POD 安全策略。

n 连接到目标 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。

步骤

1 验证集群是否正在运行 VMware Cloud Provider pod。

kubectl get pods -n vmware-system-cloud-provider

Tanzu Cloud Provider 已准备就绪且正在运行。

NAME READY STATUS RESTARTS AGE

tanzu-cluster-cloud-provider-59dc84b95c-nbs4n 1/1 Running 0 24h

2 创建名为 nginx-lbsvc.yaml 的 YAML 文件,并向其中填充以下内容。

kind: Service

apiVersion: v1

metadata:

name: srvclb-ngnx

spec:

selector:

app: hello

tier: frontend

ports:

- protocol: "TCP"

port: 80

targetPort: 80

vSphere with Kubernetes 配置和管理

VMware, Inc. 113

Page 114: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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:

serviceAccountName: NETWORKING-TEST-SA

containers:

- name: nginx

image: "nginxdemos/hello"

此 YAML 文件定义了 LoadBalancer 类型的 Kubernetes 服务,并将 Nginx 容器部署为该服务的外

部负载平衡器。

3 应用服务类型 LoadBalancer 配置。

kubectl apply -f nginx-lbsvc.yaml

4 验证 Nginx pod 和服务的部署。

kubectl get all

在命令输出中,您会看到 pod/nginx-UUIDpod 为 Running,并且 LoadBalancer 类型的 service/nginx

已启动且具有外部和内部 IP 地址。该服务还会在 主管命名空间中出现。

5 获取 Nginx LoadBalancer 服务的外部 IP 地址和端口。

kubectl get services

示例结果:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

srvclb LoadBalancer 198.56.165.254 192.168.123.4 80:30964/TCP 14m

6 运行浏览器并输入 Nginx LoadBalancer 服务的外部 IP 地址。

您会看到消息:Welcome to nginx!

vSphere with Kubernetes 配置和管理

VMware, Inc. 114

Page 115: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

Tanzu Kubernetes Ingress 示例

Kubernetes Ingress 资源提供从集群外部到集群中的一个或多个服务的 HTTP 或 HTTPS 路由。Tanzu Kubernetes 集群通过第三方控制器(例如 Contour 和 Nginx)支持 Ingress。

此教程演示了如何部署用于将外部流量路由到 Tanzu Kubernetes 集群中服务的 Contour Ingress 控制

器。Contour 是 VMware 参与的一个开源项目。此外,还可以使用 Nginx Ingress 控制器支持 Ingress 服务。

前提条件

n 查看 Kubernetes 文档中的 Ingress 资源。

n 查看特定的 Ingress 控制器,例如 Contour 和 Nginx。

n 置备 Tanzu Kubernetes 集群。请参见置备 Tanzu Kubernetes 集群。

n 添加 pod 安全策略。请参见自定义 Pod 安全策略的示例角色。

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

步骤

1 创建名为 projectcontour 的命名空间,这是 Contour Ingress 控制器部署的默认命名空间。

2 下载 Contour 输入控制器 YAML:Contour 输入部署。

3 使用文本编辑器打开 contour.yaml 文件。

4 搜索行 externalTrafficPolicy: Local,然后将其从 contour.yaml 文件中删除。此行位于 YAML 的

Service.spec 部分(通常为第 1193 行)。

5 编辑 contour.yaml,在名为 contour-certgen 的角色中添加 pod 安全策略。

apiVersion: rbac.authorization.k8s.io/v1beta1

kind: Role

metadata:

name: contour-certgen

namespace: projectcontour

rules:

- apiGroups:

- ""

resources:

- secrets

verbs:

- list

- watch

- create

- get

- put

- post

- patch

- apiGroups:

- extensions

resourceNames:

vSphere with Kubernetes 配置和管理

VMware, Inc. 115

Page 116: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

- DEFAULT-OR-CUSTOM-PSP #Enter the name of a valid PSP

resources:

- podsecuritypolicies

verbs:

- use

6 编辑 contour.yaml,在名为 contour-leaderelection 的角色中添加 pod 安全策略。

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:

- DEFAULT-OR-CUSTOM-PSP #Enter the name of a valid PSP

resources:

- podsecuritypolicies

verbs:

- use

7 通过应用 contour.yaml 文件部署 Countour。

kubectl apply -f contour.yaml

8 确认 Contour 输入控制器部署为 LoadBalancer 类型的服务,并且可从其外部 IP 地址进行访问。

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

vSphere with Kubernetes 配置和管理

VMware, Inc. 116

Page 117: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

9 验证 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

10 使用外部 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

11 通过创建名为 ingress-test.yaml 的以下 YAML 文件部署两个测试服务并添加 Ingress 规则和路

径。

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:

vSphere with Kubernetes 配置和管理

VMware, Inc. 117

Page 118: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

serviceAccountName: test-sa

containers:

- name: hello

image: "gcr.io/google-samples/hello-go-gke:1.0"

ports:

- name: http

containerPort: 80

---

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

track: stable

spec:

containers:

- name: nihao

image: "gcr.io/google-samples/hello-go-gke:1.0"

ports:

- name: http

containerPort: 80

---

apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

name: hello-ingress

spec:

rules:

- http:

paths:

- path: /hello

vSphere with Kubernetes 配置和管理

VMware, Inc. 118

Page 119: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

backend:

serviceName: hello

servicePort: 80

- path: /nihao

backend:

serviceName: nihao

servicePort: 80

12 应用 ingress-test YAML 配置。

kubectl apply -f ingress-test.yaml

13 验证是否已创建 hello 和 nihao 服务。

kubectl get services

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

hello ClusterIP 198.63.19.152 <none> 80/TCP 21h

nihao ClusterIP 198.57.57.66 <none> 80/TCP 21h

14 验证是否可以使用每个服务的 Ingress 路由访问这两个服务。

curl http://192.168.123.5:80/hello

{"message":"Hello"}

curl http://192.168.123.5:80/nihao

{"message":"Hello"}

在集群内运行的服务将通过 Ingress 控制器从外部利用负载均衡器外部 IP 地址进行访问。

Tanzu Kubernetes 持久卷声明示例

要在 Tanzu Kubernetes 集群上运行有状态工作负载,可以创建持久卷声明 (PVC),以请求持久存储资

源,而无需了解底层存储基础架构的详细信息。用于 PVC 的存储从 主管命名空间的存储配额进行分配。

默认情况下,容器是临时和无状态容器。对于有状态工作负载,一种常用的方法是创建持久卷声明

(PVC)。可以使用 PVC 挂载持久卷和访问存储。请求会动态地置备持久卷对象和匹配的虚拟磁盘。此声明

将绑定到持久卷。删除此声明时,也将删除相应的持久卷对象和已置备的虚拟磁盘。

前提条件

n 查看文档 vSphere with Kubernetes 中的存储。

n 登录到目标 Tanzu Kubernetes 集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。

步骤

1 切换到正在运行集群的命名空间。

kubectl config use-context NAMESPACE

vSphere with Kubernetes 配置和管理

VMware, Inc. 119

Page 120: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

2 列出可用的存储类。

kubectl get storageclasses

3 创建包含 PVC 配置的 YAML 文件。

使用以下示例。将 name、storageClassName 和 storage 变量值替换为您的值。

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: my-pvc

spec:

accessModes:

- ReadWriteOnce

storageClassName: gold

resources:

requests:

storage: 3Gi

4 将 PVC 应用于集群。

kubectl apply -f PVC-NAME.yaml

5 验证持久卷声明的状态。

kubectl get pvc

该 PVC 将列出并可供使用。该 PVC 还会显示在 主管命名空间中,因为存储来自其配额。

后续步骤

查看 Kubernetes 文档中的有状态应用程序示例:使用持久卷部署 WordPress 和 MySQL。

对 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 不能在一个策略中包含部分规则,

同时又在另一个策略中包含部分规则。

vSphere with Kubernetes 配置和管理

VMware, Inc. 120

Page 121: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

可以通过多种方法在 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 和服务帐户。

Tanzu Kubernetes 集群的默认 PodSecurityPolicy

下表列出并介绍了 Tanzu Kubernetes 集群的特权和受限默认 Pod 安全策略,以及与每个策略关联的默认

ClusterRole。

表 7-4. 具有关联 ClusterRole 的默认 PodSecurityPolicy

默认 PSP 权限 描述 关联的默认 ClusterRole

vmware-system-privileged 以任何用户身份运行 可允许 PSP。相当于在未启用

PSP 准入控制器的情况下运行

集群。

psp:vmware-system-privileged

可以使用此 PSP

vmware-system-restricted 必须以非 root 用户身份运行 限制性 PSP。不允许对 Pod 容器进行特权访问,阻止可能

升级到 root,并且需要使用多

个安全机制。

psp:vmware-system-restricted

可以使用此 PSP

Tanzu Kubernetes 集群没有默认绑定

Tanzu Kubernetes Grid 服务不会为 Tanzu Kubernetes 集群提供默认的 RoleBinding 和

ClusterRoleBinding。

获得 主管命名空间上编辑权限的 vCenter Single Sign-On 用户将分配有在该命名空间中部署的任何

Tanzu Kubernetes 集群的 cluster-admin 角色。经过身份验证的集群管理员可以隐式使用 vmware-

system-privilegedPSP。尽管在技术上并不是 ClusterRoleBinding,但具有相同的效果。

集群管理员必须定义任何绑定,以允许或限制用户可以部署到集群的 Pod 类型。如果使用 RoleBinding,该绑定仅允许 Pod 在与绑定相同的命名空间中运行。这可以与系统组配对,以向命名空间中运行的所有

Pod 授予访问权限。向集群进行身份验证的非管理员用户将分配有 authenticated 角色,由此可以绑定到

默认的 PSP。请参见向开发人员授予 Tanzu Kubernetes 集群访问权限。

默认 PodSecurityPolicy 对 Tanzu Kubernetes 集群的影响

对于任何 Tanzu Kubernetes 集群,都将执行以下行为:

n 集群管理员可以使用其用户帐户直接在任何命名空间中创建特权 Pod。

vSphere with Kubernetes 配置和管理

VMware, Inc. 121

Page 122: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

n 集群管理员可以在 kube-system 命名空间中创建 Deployment、StatefulSet 和 DaemonSet(每个

都创建特权 Pod)。如果要使用不同的命名空间,请参见 Kubernetes Guestbook 教程:绑定到默认

特权 Pod 安全策略。

n 集群管理员可以创建自己的 PSP(除了两个默认 PSP 之外),并将这些 PSP 绑定到任何用户。如果

定义自己的 PSP,请参见 Kubernetes 文档中的 策略顺序。

n 在集群管理员将 PSP 绑定到经过身份验证的用户,任何经过身份验证的用户都无法创建特权或非特权

Pod。请参见 Kubernetes Guestbook 教程:绑定到默认特权 Pod 安全策略。

Kubernetes Guestbook 教程:绑定到默认特权 Pod 安全策略

要允许在 Tanzu Kubernetes 集群中部署特权 pod,可以创建默认特权 pod 安全策略的 RoleBinding。

部署 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。

注 相关说明介绍了如何使用 YAML 创建 RoleBinding。有关等效的 kubectl 命令,请参见示例 1:用于

运行特权工作负载集的 RoleBinding。

前提条件

查看以下主题:

n 对 Tanzu Kubernetes 集群使用 POD 安全策略

n 默认 Pod 安全策略的示例绑定

vSphere with Kubernetes 配置和管理

VMware, Inc. 122

Page 123: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

步骤

1 要定义 RoleBinding 资源,请创建以下 YAML 文件。

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

2 使用 kubectl 应用 YAML 文件并创建资源。

kubectl apply -f ROLEBINDING-YAML-FILE-NAME

后续步骤

创建 RoleBinding 后,可以按照 Guestbook 应用程序教程中的步骤将 Guestbook 应用程序部署到默认

命名空间。

默认 Pod 安全策略的示例绑定

Tanzu Kubernetes 集群包括可绑定到的默认 PodSecurityPolicy,以进行特权和受限工作负载部署。

示例 1:用于运行特权工作负载集的 RoleBinding

下面的 kubectl 命令创建了一个 RoleBinding,用于向默认命名空间内的所有服务帐户授予访问权限,使

其能够使用默认 PSPvmware-system-privileged 运行特权工作负载集。请参见对 Tanzu Kubernetes 集群

使用 POD 安全策略。

注 有关此绑定的 YAML 等效项,请参见 Kubernetes Guestbook 教程:绑定到默认特权 Pod 安全策

略。

kubectl create rolebinding rolebinding-default-privileged-sa-ns_default

--namespace=default --clusterrole=psp:vmware-system-privileged

--group=system:serviceaccounts

vSphere with Kubernetes 配置和管理

VMware, Inc. 123

Page 124: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

示例 2:用于运行特权工作负载集的 ClusterRoleBinding

下面的 kubectl 命令创建了一个 ClusterRoleBinding,用于向经过身份验证的用户授予访问权限,使其能

够使用默认 PSP vmware-system-privileged 运行特权工作负载集。

kubectl create clusterrolebinding default-tkg-admin-privileged-binding

--clusterrole=psp:vmware-system-privileged --group=system:authenticated

示例 3:用于运行受限工作负载集的 RoleBinding

下面的 YAML 创建了一个 RoleBinding,用于向特定命名空间内的所有服务帐户授予访问权限,使其能够

使用默认 PSPvmware-system-restricted 运行受限工作负载集。请参见对 Tanzu Kubernetes 集群使用

POD 安全策略。

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

示例 4:用于运行受限工作负载集的 ClusterRoleBinding

下面的 YAML 创建了一个 ClusterRoleBinding,用于向经过身份验证的用户授予集群范围的访问权限,使

其能够使用默认 PSPvmware-system-restricted 运行受限工作负载集。请参见对 Tanzu Kubernetes 集群

使用 POD 安全策略。

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: psp:authenticated

subjects:

- apiGroup: rbac.authorization.k8s.io

kind: Group

name: system:authenticated

roleRef:

vSphere with Kubernetes 配置和管理

VMware, Inc. 124

Page 125: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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

自定义 Pod 安全策略的示例角色

Tanzu Kubernetes 集群需要 Pod 安全策略 (PSP) 才能部署工作负载。如果您定义自己的 PSP,则必须

创建引用 PSP 的 Role 或 ClusterRole。

PodSecurityPolicy 的示例角色

为演示引用 PSP 的角色,我们以 Tanzu Kubernetes Ingress 示例为例。

要部署 Contour Ingress 控制器,请创建一个名为 contour-leaderelection 的角色。在角色定义中,将

contour-leaderelection 角色和 use 动词授予您定义的自定义 PSP 资源。或者,使用一个默认的 PSP。

然后,创建 Kubernetes Guestbook 教程:绑定到默认特权 Pod 安全策略。

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:

vSphere with Kubernetes 配置和管理

VMware, Inc. 125

Page 126: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

- podsecuritypolicies

verbs:

- use

操作 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

vSphere with Kubernetes 配置和管理

VMware, Inc. 126

Page 127: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

3 查看命名空间中运行的 Tanzu Kubernetes 集群列表。

kubectl get tanzukubernetesclusters

该命令将返回集群的状态。有关状态字段的描述,请参阅 kubectl 中的 Tanzu Kubernetes 集群生命

周期状态。

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 用户的身份连接到 主管集群。

vSphere with Kubernetes 配置和管理

VMware, Inc. 127

Page 128: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

步骤

1 切换上下文以使用目标集群上下文。

kubectl config use-context CLUSTER-NAME

2 运行以下命令以查看集群 API 集群资源。

kubectl describe clusters.cluster.x-k8s.io CLUSTER-NAME

此命令返回指定集群的资源层次结构,例如命名空间、API 版本和资源版本。

将 Tanzu Kubernetes 集群迁移到新内容库。

如果已订阅内容库达到容量限制,可以迁移 Tanzu Kubernetes 集群,以使用具有额外存储容量的新库。

当 vSphere 管理员创建已订阅内容库时,管理员将指定用于存储库内容的数据存储,在这种情况下为

OVA 文件。随着分发更多的 Kubernetes 版本,已订阅内容库的大小将会扩展,因为每次更新都会添加

OVA 文件。虽然已订阅内容库上没有明确的容量限制,但它受其数据存储容量的限制。

如果已订阅内容库达到容量限制,您可能会看到消息 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 中获取

更改。

vSphere with Kubernetes 配置和管理

VMware, Inc. 128

Page 129: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

选择 Tanzu Kubernetes 集群

您可以使用 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 edit。

kubectl edit tanzukubernetescluster/CLUSTER-NAME

例如:

kubectl edit tanzukubernetescluster/tkg-cluster-01

在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存文件后,

kubectl 将更新此清单。

vSphere with Kubernetes 配置和管理

VMware, Inc. 129

Page 130: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 根据您是要增加还是减少容量,编辑集群清单中的 spec.workers.count 参数,以增加或减少工作线程

计数。

要扩大集群,请增加工作线程节点数,例如从 3 增加到 4:

...

workers:

count: 3

...

...

workers:

count: 4

...

要缩小集群,请减少工作线程节点数,例如从 3 减少到 2:

...

workers:

count: 3

...

...

workers:

count: 2

...

5 要应用更改,请在文本编辑器中保存该文件。

保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群上的 虚拟机服务将置备新的工作

节点。

6 要验证是否已添加新节点,请运行以下命令。

kubectl get tanzukubernetescluster CLUSTER-NAME

如果扩大,则会添加新节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE

tkg-cluster-01 3 4 v1.17.4+vmware.1-tkg.1.886c781 1d running

如果缩小,则会移除新节点。

NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE

tkg-cluster-01 3 2 v1.17.4+vmware.1-tkg.1.886c781 1d running

vSphere with Kubernetes 配置和管理

VMware, Inc. 130

Page 131: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

Tanzu Kubernetes 集群生命周期状态

您可以在 vSphere 清单中使用 kubectl 查看 Tanzu Kubernetes 集群的生命周期状态。

vSphere 中的 Tanzu Kubernetes 集群生命周期状态

下表列出并介绍了 vSphere 清单中显示的 Tanzu Kubernetes 集群状态信息。要查看此信息,请参见使用

vSphere Client 监控 Tanzu Kubernetes 集群状态。

表 7-5. vSphere 清单中的 Tanzu Kubernetes 集群状态

字段 描述 示例

名称 用户定义的集群名称。 tkg-cluster-01

创建时间 创建集群的日期和时间。 Mar 17, 2020, 11:42:46 PM

阶段 集群的生命周期状态。请参见表 7-7. 集群生命周

期阶段状态。

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 集群状态。

表 7-6. 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 集群的生命周期状态。请参见表 7-7. 集群生命周期阶段状态。

running

集群生命周期阶段状态

下表列出并介绍了集群生命周期每个阶段的状态。请参见表 7-7. 集群生命周期阶段状态

表 7-7. 集群生命周期阶段状态

阶段 描述

creating 集群置备可以开始,正在创建控制层面,或者已创建控制层面但未初始化。

deleting 正在删除集群。

failed 创建集群控制层面失败,可能需要用户干预。

vSphere with Kubernetes 配置和管理

VMware, Inc. 131

Page 132: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

表 7-7. 集群生命周期阶段状态 (续)

阶段 描述

running 已创建并配置基础架构,并且控制层面已完全初始化。

updating 正在更新集群。

Tanzu Kubernetes 集群操作命令

可以使用自定义 kubectl 命令管理 Tanzu Kubernetes 集群。这些命令通过 Tanzu Kubernetes Grid 服务创建的自定义资源使用。

用于管理 Tanzu Kubernetes 集群的自定义命令

下表列出并介绍了用于管理 Tanzu Kubernetes 集群的 kubectl 命令。

表 7-8. 用于管理 Tanzu Kubernetes 集群的自定义命令

命令 描述

kubectl get tanzukubernetescluster列出当前命名空间中的集群。

kubectl get tkc上述命令的缩写版本。

kubectl describe tanzukubernetescluster CLUSTER-NAME

描述指定的集群,显示表述的状况、状态和事件。置备完成后,

此命令将显示为位于 Kubernetes API 端点之前的负载平衡器创

建的虚拟 IP。

kubectl get cluster-api列出支持当前命名空间中的集群的集群 API 资源,包括集群 API 项目中的资源以及 Tanzu Kubernetes Grid 服务所用集群 API 提供程序中的资源。

kubectl get virtualmachine列出支持当前命名空间中的集群节点的虚拟机资源。

kubectl get vm上述命令的缩写版本。

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

描述指定的虚拟机服务,显示表述的集群状况、当前状态和事

件。

vSphere with Kubernetes 配置和管理

VMware, Inc. 132

Page 133: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

表 7-8. 用于管理 Tanzu Kubernetes 集群的自定义命令 (续)

命令 描述

kubectl get loadbalancer列出当前命名空间中的负载平衡器资源,包括用于集群的负载平

衡器资源。将为虚拟机服务创建负载平衡器。请参见 Tanzu Kubernetes 集群网络连接。

kubectl get virtualnetwork列出当前命名空间中的虚拟网络资源,包括用于集群的资源。将

为每个置备了集群的命名空间和每个集群本身创建一个虚拟网

络。请参见 Tanzu Kubernetes 集群网络连接。

kubectl get persistentvolumeclaim列出当前命名空间中的持久卷声明资源,包括用于集群的资源。

请参见 vSphere with Kubernetes 中的存储。

kubectl get cnsnodevmattachment列出当前命名空间中的 CNS 节点虚拟机附加资源。这些资源表

示 CNS 管理的持久卷附加到用作集群节点的虚拟机的情况。请

参见 vSphere with Kubernetes 中的存储。

kubectl get configmap列出当前命名空间中的配置映射,包括用于创建集群节点的映

射。配置映射不能由用户修改,且任何更改都会被覆盖。

kubectl get secret列出当前命名空间中的密钥,包括用于创建和管理集群节点的密

钥。请参见 Tanzu Kubernetes 集群密钥。

Tanzu Kubernetes 集群网络连接命令

Tanzu Kubernetes Grid 服务置备 Tanzu Kubernetes 集群时为节点、pod 和服务设置了默认网络连接。

可以使用自定义 kubectl 命令验证集群网络连接。

用于验证 Tanzu Kubernetes 集群网络连接的自定义命令

表 7-9. 用于验证集群网络连接的自定义 kubectl 命令

命令 描述

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) 地址。

kubectl get services -n NAMESPACE

curl -k https://EXTERNAL-IP:PORT/healthz

返回为集群 API 访问创建的 Kubernetes 服务负载平衡器。用于

验证是否已分配外部 IP。使用 cURL 验证能否使用负载平衡器服

务的外部 IP 和端口来访问 API。

kubectl get endpoints -n NAMESPACE cluster-1-control-plane-service

返回集群的控制层面节点(端点)。用于验证是否每个端点均已

创建并包含在端点池中。

vSphere with Kubernetes 配置和管理

VMware, Inc. 133

Page 134: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

Tanzu Kubernetes 集群密钥

Tanzu Kubernetes 集群使用密钥来存储操作 Tanzu Kubernetes 集群所需的令牌、密钥和密码。

Tanzu Kubernetes 集群密钥列表

Kubernetes 机密是一个存储少量敏感数据的对象,如密码、令牌或 SSH 密钥。Tanzu Kubernetes 集群

管理员在操作集群时可能会使用多个密钥。下表列出并介绍了集群管理员可能会使用的关键密钥。

注 该列表并不完整。它仅仅包含那些可能需要手动轮换或用于访问集群节点进行故障排除的密钥。

密钥 描述

TANZU-KUBERNETES-CLUSTER-NAME-ccm-token-RANDOM 准虚拟云提供商的云控制器管理器用于连接到主管命名空间的服

务帐户令牌。要触发此凭据的轮换,请删除该密钥。

TANZU-KUBERNETES-CLUSTER-NAME-pvcsi-token-RANDOM 准虚拟 CSI 插件用于连接到主管命名空间的服务帐户令牌。要触

发此凭据的轮换,请删除该密钥。请参见 vSphere with Kubernetes 如何与 vSphere 存储集成。

TANZU-KUBERNETES-CLUSTER-NAME-kubeconfig 可用于以 kubernetes-admin 用户身份连接到集群控制平面的

kubeconfig 文件。在 vCenter Single Sign-On 身份验证不可用

时,可以使用此机密访问集群并对其进行故障排除。请参见以

Kubernetes 管理员用户身份连接到 Tanzu Kubernetes 集群控

制平面。

TANZU-KUBERNETES-CLUSTER-NAME-ssh 可用于以 vmware-system-user 身份连接到任何集群节点的 SSH 私钥。此机密可用于通过 SSH 访问任何集群节点并对其进行故障

排除。请参见以系统用户身份使用 SSH 访问 Tanzu Kubernetes集群节点。

TANZU-KUBERNETES-CLUSTER-NAME-ssh-password 可用于以 vmware-system-user 身份连接到任何集群节点的密码。

可以通过 SSH 或在访问虚拟机控制台时提供此密码。请参见以系

统用户身份使用密码连接到集群节点。

TANZU-KUBERNETES-CLUSTER-NAME-ca kubectl 用于安全连接到 Kubernetes API 服务器的 Tanzu Kubernetes 集群控制平面的根 CA 证书。

vSphere with Kubernetes 配置和管理

VMware, Inc. 134

Page 135: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

更新 vSphere with Kubernetes 集群 8可以更新到 新版本的 vSphere with Kubernetes,包括支持 vSphere with Kubernetes 集群的

vSphere 基础架构、Kubernetes 版本和 适用于 vSphere 的 Kubernetes CLI 工具。

本章讨论了以下主题:

n 关于 vSphere with Kubernetes 集群更新

n 更新 vSphere 命名空间

n 更新 kubectl 的 vSphere 插件

n 更新 Tanzu Kubernetes 集群

关于 vSphere with Kubernetes 集群更新

vSphere with Kubernetes 支持对 主管集群 和 Tanzu Kubernetes 集群以及支持这些集群的基础架构执

行滚动更新。

如何更新 vSphere with Kubernetes 集群

vSphere with Kubernetes 对 主管集群 和 Tanzu Kubernetes 集群使用滚动更新模型。滚动更新模型可

确保在更新过程中将集群工作负载的停机时间降至 低。滚动更新包括升级 Kubernetes 软件版本以及支

持 Kubernetes 集群的基础架构和服务,如虚拟机配置和资源、vSphere 服务和命名空间以及自定义资

源。

为确保成功更新,您的配置必须满足多个兼容性要求,因此系统会实施复查条件以确保集群已准备好进行

更新,并在集群升级失败时支持回滚。

注 vSphere with Kubernetes 更新不仅仅是升级 Kubernetes 软件版本。我们使用“更新”(而非“升

级”)一词描述此过程,因为升级是增加软件版本的有限更新形式。

主管集群更新和 Tanzu Kubernetes 集群更新之间的依赖关系

在大多数情况下,可以独立于 Tanzu Kubernetes 集群更新来更新 主管集群。您可以选择仅更新 主管集

群或仅更新 Tanzu Kubernetes 集群。

但是,目前这两种类型的集群更新之间存在依赖关系。这意味着,在更新 主管集群管理的 Tanzu Kubernetes 集群之前,必须先更新 主管集群。

VMware, Inc. 135

Page 136: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

关于 主管集群 更新

启动主管集群更新时,系统将创建一个新的控制平面节点,并将其加入到现有控制平面。在此更新阶段,

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 Kubernetes 组件。更新主要版本时需要采用这种类

型的更新,例如从 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 Kubernetes 会在滚动更新期间执行预检

查并实施合规性。

要对 Tanzu Kubernetes 集群执行滚动更新,通常需要更新集群清单。请参见更新 Tanzu Kubernetes 集群。但是,请注意,执行 vSphere 命名空间更新时,系统会立即将更新的配置传播到所有 Tanzu Kubernetes 集群。这些更新可自动触发 Tanzu Kubernetes 控制平面和工作节点的滚动更新。

用于替换集群节点的滚动更新过程类似于 Kubernetes 部署中的 pod 滚动更新。有两个不同的控制器负责

执行 Tanzu Kubernetes 集群的滚动更新:加载项控制器和 TanzuKubernetesCluster 控制器。在这两个

控制器中,滚动更新有三个关键阶段:更新加载项、更新控制平面以及更新工作节点。这些阶段按顺序进

行,并执行预检查以防止某一步骤在前一步骤充分完成之前开始。如果确定不需要执行这些步骤,则可以

跳过这些步骤。例如,更新可能仅影响工作节点,因此不需要任何加载项或控制平面更新。

vSphere with Kubernetes 配置和管理

VMware, Inc. 136

Page 137: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

在更新过程中,系统会添加一个新的集群节点,并等待该节点与目标 Kubernetes 版本一起上线。然后,

系统将旧节点标记为删除,移至下一个节点,并重复此过程。移除所有 pod 后,才会删除旧节点。例如,

如果 pod 定义为 PodDisruptionBudgets 以阻止某节点完全引流,则该节点将隔离,直到可以逐出这些

pod 后才会移除。系统首先升级所有控制平面节点,然后再升级工作节点。在更新过程中,Tanzu Kubernetes 集群状态将更改为“正在更新”。滚动更新过程完成后,Tanzu Kubernetes 集群状态将更

改为“正在运行”。

在 Kubernetes 版本升级过程中,在不受复制控制器监管的 Tanzu Kubernetes 集群上运行的 Pod 将在

Tanzu Kubernetes 集群更新期间作为工作节点引流过程的一部分删除。如果手动触发集群更新或由

vSphere 命名空间更新自动触发,则会出现此情况。不受复制控制器监管的 Pod 包括不作为

Deployment 或 ReplicaSet 规范的一部分创建的 Pod。有关详细信息,请参考 Kubernetes 文档中的

Pod 生命周期:Pod 生命周期主题。

更新 vSphere 命名空间

要更新一个或多个 主管集群(包括 主管集群运行的 Kubernetes 版本以及支持 Tanzu Kubernetes 集群

的基础架构),请执行 vSphere 命名空间更新。

vSphere with Kubernetes 有一个新版本实体。该版本实体是语义版本字符串,格式为 v1.16.7-vsc0.0.1-16128153,其中前 是 Kubernetes 版本 (v1.16.7),后 是 vSphere with Kubernetes 版本

(vsc0.0.1-16128153)。

前提条件

在执行 vSphere 命名空间更新之前,请阅读发行说明。

要安装必要的二进制文件,请升级 vCenter Server Appliance。请参见 vCenter Server 文档中的升级

vCenter Server Appliance。

注 执行 vSphere 命名空间更新时,所有已置备的 Tanzu Kubernetes 集群都必须处于正在运行状态。如

果 Tanzu Kubernetes 处于正在创建或正在删除状态,请等待该过程完成,然后再更新 主管集群,否则可

能不会成功。

步骤

1 以 vSphere 管理员身份登录到 vCenter Server。

2 选择菜单 > 工作负载管理。

3 选择命名空间 > 更新选项卡。

4 选择要更新到的可用版本。

例如,选择版本 v1.17.4-vsc0.0.1-16128153。

5 选择一个或多个要将更新应用到的 主管集群。

6 要启动更新,请单击应用更新。

7 使用近期任务窗格监控更新的状态。

vSphere with Kubernetes 配置和管理

VMware, Inc. 137

Page 138: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

更新 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.16.7,则“1”是

主要版本,“16”是次要版本,“7”是修补程序版本。

升级现有 Tanzu Kubernetes 集群的 Kubernetes 版本时,请遵循以下要求:

n 您不能降低版本。例如,无法从 Kubernetes v1.17 降级到 v1.16。

n 可以升级次要版本,但只能逐步升级。不支持跳过次要版本。例如,可以从 Kubernetes v1.16 升级到

v1.17,但无法从 Kubernetes v1.16 升级到 v1.18。

n 无法更改主要版本,例如从 v1.16 升级到 v2.0。

可以指定完全限定版本,也可以使用版本快捷方式,如 version: v1.16.7(解析为与该修补程序版本匹配

的 新映像)或 version: v1.16(解析为 新匹配的修补程序版本)。解析后的版本在集群清单中显示为

fullVersion,例如 v1.16.8+vmware.1-tkg.3.60d2ffd。

注 要执行 Kubernetes 版本升级,必须在清单中取消设置 fullVersion。请参见通过更改分发版本进行更

新。

执行 Tanzu Kubernetes 集群更新

可以通过对 TanzuKubernetesCluster 规范进行以下一项或多项修改来启动滚动更新:

n 方法 1:通过更改分发版本进行更新

n 方法 2:通过更改节点的 VirtualMachineClass 进行更新

vSphere with Kubernetes 配置和管理

VMware, Inc. 138

Page 139: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

n 方法 3:通过更改节点的 StorageClass 进行更新

注 虽然这些是启动滚动更新的 常用方法,但它们并不是唯一的方法。对任何配置元素进行更改也可以启

动滚动更新。例如,当系统尝试在新映像上运行所有节点时,重命名或替换与分发版本对应的

VirtualMachineImage 会启动滚动更新。此外,更新 主管集群也会触发在其中部署的 Tanzu Kubernetes 集群的滚动更新。例如,如果更新 vmware-system-tkg-controller-manager,则系统将向清单生成器中引

入新值,并且控制器将启动滚动更新以部署这些值。

通过更改分发版本进行更新

触发滚动更新的 常用方法是使用 .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.17.7

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

注 此处显示的方法使用 UNIX shell 命令 read 从键盘获取输入并将其分配给名为 $PATCH 的变量。

kubectl patch 命令将调用 Kubernetes API 以更新集群清单。--type=merge 标记表示数据只包含不同于

现有清单的属性。有关使用 kubectl patch 命令的替代方法,请参阅 Kubernetes 文档,具体参阅使用

kubectl patch 就地更新 API 对象。也可以使用具有等效效果的其他 kubectl 命令。例如,可以使用命令

kubectl edit tanzukubernetescluster/CLUSTER-NAME。此命令将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。保存更改时,将更新清单。有关详细信息,请参阅

Kubernetes 文档中的 edit 命令。

vSphere with Kubernetes 配置和管理

VMware, Inc. 139

Page 140: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

通过更改节点的 VirtualMachineClass 进行更新

触发 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

通过更改节点的 StorageClass 进行更新

触发 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

vSphere with Kubernetes 配置和管理

VMware, Inc. 140

Page 141: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

对 vSphere with Kubernetes 进行故障排除 9在 vSphere with Kubernetes 中,为您的基础架构使用以下 佳做法和故障排除技术。

本章讨论了以下主题:

n 在 vSphere with Kubernetes 中执行存储故障排除

n 网络故障排除

n Tanzu Kubernetes 集群故障排除

n 对工作负载管理启用问题进行故障排除

在 vSphere with Kubernetes 中执行存储故障排除

在 vSphere with Kubernetes 中,为您的存储环境使用故障排除技术。

对非 vSAN 数据存储上的控制层面虚拟机使用反关联性规则

在包含 vSphere with Kubernetes 的集群中使用除 vSAN 以外的其他数据存储时,请将三个控制层面虚

拟机放置在不同的数据存储上,以确保可用性。

由于控制层面虚拟机由系统管理,因此无法手动迁移它们。使用数据存储集群和 Storage DRS 的组合来重

新平衡控制层面虚拟机,并将其放置在单独的数据存储中。

步骤

1 在 vSphere Client 中,创建数据存储集群。

a 导航到数据中心。

b 右键单击数据中心对象并选择新建数据存储集群。

c 对数据存储集群进行命名,并确保启用打开 Storage DRS。

d 将集群自动化级别设置为非自动 (手动模式)。

e 将 Storage DRS 运行时设置保留为默认值。

f 选择启用了 vSphere with Kubernetes 的 ESXi 集群。

g 选择要添加到数据存储集群的所有共享数据存储。

h 单击完成。

VMware, Inc. 141

Page 142: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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 命令。

如果移除存储类匹配的存储策略,则该命令的输出不会列出该存储类。

vSphere with Kubernetes 配置和管理

VMware, Inc. 142

Page 143: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

2 如果存储类已被部署使用,请还原该存储类。

a 通过 vSphere Client,使用与您移除的策略相同的名称创建新的存储策略。

例如,如果您删除了 Gold 策略,请将新策略命名为 Gold。请参见为 vSphere with Kubernetes创建存储策略。

b 将策略分配给命名空间。

请参见更改命名空间上的存储设置。

将策略分配给命名空间后,vSphere with Kubernetes 将删除旧存储类,并使用相同名称创建匹

配的存储类。

网络故障排除

您可以对使用 NSX 配置 vSphere with Kubernetes 时可能遇到的网络问题进行故障排除。

将 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>"

}'

vSphere with Kubernetes 配置和管理

VMware, Inc. 143

Page 144: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

无法更改 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 Kubernetes 配置。

有关移除 NSX-T Data Center 的元素的信息,请参见《NSX-T Data Center 安装指南》。

收集支持包以进行故障排除

您可以在已注册的集群和结构层节点上收集支持包以便进行故障排除,并可将包下载到您的计算机中或将

其上载到文件服务器。

如果选择将包下载到计算机,则会获得一个存档文件,其中包含一个清单文件和每个节点对应的支持包。

如果选择将包上载到文件服务器,则会将清单文件和各个包单独上载到文件服务器。

步骤

1 从浏览器中,使用管理员特权登录到 NSX Manager。

2 选择系统 > 支持包。

vSphere with Kubernetes 配置和管理

VMware, Inc. 144

Page 145: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

3 选择目标节点。

可用的节点类型有管理节点、Edge、主机和公有云网关。

4 (可选) 指定以天为单位的日志保留期限,以排除早于指定天数的日志。

5 (可选) 切换用于指示是包括还是排除核心文件和审核日志的开关。

注 核心文件和审核日志可能包含敏感信息,如密码或加密密钥。

6 (可选) 选中该复选框可将包上载到文件服务器。

7 单击启动包收集开始收集支持包。

每个节点的日志文件数决定了收集支持包所用的时间。

8 监控收集进程的状态。

状态选项卡显示支持包收集的进度。

9 如果未设置将包发送到文件服务器的选项,请单击下载以下载包。

收集日志文件

可以收集 vSphere with Kubernetes 和 NSX-T Data Center 组件中的日志,用于检测错误并进行故障排

除。VMware 技术支持可能会要求提供日志文件。

步骤

1 使用 vSphere Client 登录到 vCenter Server。

2 收集以下日志文件。

日志文件 描述

/var/log/vmware/wcp/wcpsvc.log 包含与 vSphere with Kubernetes 启用相关的信息。

/var/log/vmware/wcp/nsxd.log 包含与 NSX-T Data Center 组件配置相关的信息。

3 登录到 NSX Manager。

4 收集 /var/log/proton/nsxapi.log,了解当特定 vSphere with Kubernetes 操作失败时 NSX Manager 所返回错误的相关信息。

NSX-T 管理证书或 IP 地址发生更改时重新启动 WCP 服务

如果在安装 vSphere with Kubernetes 之后 NSX-T 管理证书或 NSX-T 管理 IP 地址发生更改,则必须重

新启动 WCP 服务。

NSX-T 证书发生更改时重新启动 vSphere with Kubernetes 服务

当前,vSphere with Kubernetes 具有如下要求:如果 NSX-T 证书发生更改或者 NSX-T IP 地址发生更

改,则必须重新启动 WCP 服务才能使更改生效。如果其中的任何一项发生更改时未重新启动该服务,则

vSphere with Kubernetes 和 NSX-T 之间的通信将失败,并且可能会出现某些症状,如 NCP 进入

CrashLoopBackoff 阶段或主管集群资源变得无法部署。

vSphere with Kubernetes 配置和管理

VMware, Inc. 145

Page 146: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

要重新启动 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 Kubernetes 要求将 vSphere 7 虚拟分布式交换机 (VDS) 用于主机传输节点流量。在

vSphere with Kubernetes 中,无法将 NSX-T VDS (N-VDS) 用于主机传输节点流量。

要求使用 VDS

vSphere with Kubernetes 要求使用在同一 VDS 上支持 vSphere 7 流量和 NSX-T 3 流量的融合 VDS。

在以前版本的 vSphere 和 NSX-T 中,有一个 VDS(或 VSS)用于 vSphere 流量,一个 N-VDS 用于

NSX-T 流量。vSphere with Kubernetes 不支持此配置。如果尝试使用 N-VDS 启用工作负载管理,系统

将报告 vCenter 集群不兼容。有关详细信息,请参见对启用工作负载管理的集群兼容性错误进行故障排

除。

要使用融合 VDS,请在准备将 ESXi 主机作为传输节点时使用 vCenter 创建 vSphere 7 VDS,并在

NSX-T 中指定此 VDS。仅在 vCenter 端具有 VDS-DSwitch 还不足够。必须按照主题创建传输节点配置

文件中所述和下面所示内容为 VDS-DSwitch 7.0 配置 NSX-T 传输节点配置文件。

vSphere with Kubernetes 配置和管理

VMware, Inc. 146

Page 147: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

图 9-1. NSX-T 中的 VDS 配置

如果从以前版本升级到 vSphere 7 和 NSX-T 3,则必须从每个 ESXi 传输节点卸载 N-VDS,然后为每个

主机重新配置 VDS。请联系 VMware 全球支持服务部门以获得指导。

Tanzu Kubernetes 集群故障排除

您可以通过连接到任何集群节点、查看集群资源层次结构和收集日志文件对 Tanzu Kubernetes 集群进行

故障排除。

Tanzu Kubernetes 集群的已知限制

需要了解 Tanzu Kubernetes Grid 服务置备的 Tanzu Kubernetes 集群存在一些已知限制。

作为 vSphere with Kubernetes 版本一部分的 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群存在以下已知限制。虽然无法在当前版本中执行以下操作,但这些操作正在规划中。

注 有关已知问题和其他特定于版本的信息,请参考发行说明。

n 直接调用集群 API 来管理集群生命周期。

n 对虚拟机执行管理操作。

n 使可用区跨多个主管集群。

n 自定义集群 API 服务器标记。

n 自定义各种扩展点,如容器网络接口 (CNI) 插件或容器存储接口 (CSI) 插件。

vSphere with Kubernetes 配置和管理

VMware, Inc. 147

Page 148: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

收集 Tanzu Kubernetes 集群的支持包

可以收集支持包以帮助对 Tanzu Kubernetes 集群问题进行故障排除。VMware 技术支持可能会请求进行

此收集。

为了帮助对 Tanzu Kubernetes 集群问题进行故障排除,可以收集日志文件。从 主管集群收集 Tanzu Kubernetes 集群日志文件。如有必要,请与您的 vSphere 管理员协作。

注 为了有助于对 Tanzu Kubernetes 集群网络连接进行故障排除,请收集 NSX-T 的支持包。请参见

NSX-T Data Center 文档中的“收集支持包”。

步骤

1 使用 vSphere Client 登录 vCenter Server。

2 选择菜单 > 工作负载平台。

3 单击集群。

4 要选择 主管集群,请单击集群名称旁边的圆圈图标。

5 要下载集群日志文件,请单击导出日志。

对 vCenter Single Sign-On 连接错误进行故障排除

如果您对 主管命名空间没有足够的权限,则无法以 vCenter Single Sign-On 用户身份连接到 主管集群或

Tanzu Kubernetes 集群。

问题

当您尝试以 vCenter Single Sign-On 用户身份连接到 主管集群或 Tanzu Kubernetes 集群时,kubectl 的 vSphere 插件 返回错误消息 Error from server (Forbidden)。

原因

您对 主管命名空间没有足够的权限,或者没有集群访问权限。

解决方案

如果您是操作集群的 DevOps 工程师,请与您的 vSphere 管理员核实是否已向您授予对 主管命名空间的

编辑权限。请参见创建和配置 主管命名空间。

如果您是使用集群部署工作负载的开发人员,请与您的集群管理员核实是否已向您授予集群访问权限。请

参见向开发人员授予 Tanzu Kubernetes 集群访问权限。

vSphere with Kubernetes 配置和管理

VMware, Inc. 148

Page 149: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

已订阅内容库错误故障排除

如果已订阅内容库达到存储容量限制,将无法置备 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 集群的虚拟机类类型。

工作负载部署错误故障排除

如果未为经过身份验证的用户配置 PodSecurityPolicy 和绑定,则可能出现工作负载部署错误。

问题

您将容器工作负载部署到 Tanzu Kubernetes 集群,但该工作负载未启动。您会看到类似以下内容的错

误:

Error: container has runAsNonRoot and image will run as root.

原因

已在启用 PodSecurityPolicy 准入控制器的情况下置备 Tanzu Kubernetes 集群。在集群管理员将

PodSecurityPolicy 绑定到经过身份验证的用户之前,经过身份验证的用户不能创建特权或非特权 POD。

vSphere with Kubernetes 配置和管理

VMware, Inc. 149

Page 150: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

解决方案

创建到默认 PodSecurityPolicy 的适当绑定,或定义自定义 PodSecurityPolicy。请参见对 Tanzu Kubernetes 集群使用 POD 安全策略和 Kubernetes Guestbook 教程:绑定到默认特权 Pod 安全策略。

重新启动失败的 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。

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 with Kubernetes 配置和管理

VMware, Inc. 150

Page 151: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

对工作负载管理启用问题进行故障排除

如果无法启用工作负载管理,请尝试以下故障排除提示。

对启用工作负载管理的集群兼容性错误进行故障排除

如果系统指示您的 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

例如:

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 |

|-----------|---------|------------|----------|

vSphere with Kubernetes 配置和管理

VMware, Inc. 151

Page 152: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

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 连接。

2 以 root 用户身份登录。

3 运行命令 shell。

将显示以下输出:

Shell access is granted to root

root@localhost [ ~ ]#

vSphere with Kubernetes 配置和管理

VMware, Inc. 152

Page 153: vSphere with Kubernetes 配置和管理 - VMware …...目录 vSphere with Kubernetes配置和管理 7 1 更新信息 8 2 vSphere with Kubernetes基础知识 10 什么是 vSphere with

4 运行以下命令以跟踪日志。

tail -f /var/log/vmware/wcp/wcpsvc.log

vSphere with Kubernetes 配置和管理

VMware, Inc. 153