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

什么是 vSphere with Tanzu?

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

什么是 vSphere Pod?

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

什么是 Tanzu Kubernetes 集群?

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

何时使用 vSphere Pod 和 Tanzu Kubernetes 集群

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

Tanzu Kubernetes 集群操作命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 连接到 vSphere with Tanzu 集群
kubectl vsphere login --server=10.200.0.2 --vsphere-username administrator@vsphere.local --insecure-skip-tls-verify

# 验证目标是否为预期环境
kubectl config get-contexts

# 如果目标不是预期环境,切换到目标命名空间
kubectl config use-context tkgs-ns

# 列出可用的虚拟机类绑定
kubectl get virtualmachineclassbindings

# 列出可用的虚拟机镜像
kubectl get virtualmachineimage
kubectl get vmimage
kubectl describe virtualmachineimage

# 查询存储类
kubectl get storageclasses
kubectl describe storageclasses

# 列出当前命名空间中的集群
kubectl get tanzukubernetescluster
kubectl get tkc

# 列出可用的 Tanzu Kubernetes 版本
kubectl get tanzukubernetesreleases
kubectl get tkr

# 描述指定的集群,显示表述的状况、状态和事件
kubectl describe tanzukubernetescluster CLUSTER-NAME

# 列出支持当前命名空间中的集群的集群 API 资源,包括集群 API 项目中的资源以及 Tanzu Kubernetes Grid 服务所用集群 API 提供程序中的资源
kubectl get cluster-api

# 查看集群 API 集群资源
kubectl describe clusters.cluster.x-k8s.io CLUSTER-NAME

# 列出支持当前命名空间中的集群节点的虚拟机服务资源
kubectl get virtualmachineservice
kubectl get vmservice

# 列出当前命名空间中的负载均衡器资源,包括用于集群的负载均衡器资源
kubectl get loadbalancer

# 列出当前命名空间中的持久卷声明资源,包括用于集群的资源
kubectl get persistentvolumeclaim

# 列出当前命名空间中的 CNS 节点虚拟机附加资源
kubectl get cnsnodevmattachment

# 列出当前命名空间中的配置映射,包括用于创建集群节点的映射
kubectl get configmap

# 列出当前命名空间中的密钥,包括用于创建和管理集群节点的密钥
kubectl get secret

Tanzu Kubernetes 集群网络连接命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看默认 CNI,即 antrea(除非已更改)除非在集群 YAML 中明确替代,否则使用默认 CNI 创建集群。
kubectl get tkgserviceconfigurations
NAME DEFAULT CNI
tkg-service-configuration antrea

# 查看集群节点的虚拟网络。用于验证是否已分配源网络地址转换 (SNAT) IP 地址。
kubectl get virtualnetwork
NAME SNAT READY AGE
tkgs-cluster-12-vnet 10.191.152.133 True 4h3m

# 查看集群节点的虚拟网络接口。用于验证每个集群节点的虚拟机是否已分配 IP 地址。
kubectl get virtualmachines -o wide
NAME POWERSTATE CLASS IMAGE PRIMARY-IP AGE
tkgs-cluster-12-control-plane-... poweredOn guaranteed-medium ob-...-v1.21.6---vmware.1-tkg.1.b3d708a 10.244.0.66 4h6m
tkgs-cluster-12-worker-... poweredOn guaranteed-medium ob-...-v1.21.6---vmware.1-tkg.1.b3d708a 10.244.0.68 4h3m
tkgs-cluster-12-worker-... poweredOn guaranteed-medium ob-...-v1.21.6---vmware.1-tkg.1.b3d708a 10.244.0.67 4h3m

# 查看每个集群节点的虚拟机服务。用于验证状态是否已更新,是否包括负载均衡器虚拟 IP (VIP) 地址。
kubectl get virtualmachineservices
NAME TYPE AGE
tkgs-cluster-12-control-plane-service LoadBalancer 3h53m

# 查看为集群 API 访问创建的 Kubernetes 服务负载均衡器。用于验证是否已分配外部 IP。使用 curl 验证能否使用负载均衡器服务的外部 IP 地址和端口来访问 API。
kubectl get services -n NAMESPACE
curl -k https://EXTERNAL-IP:PORT/healthz

# 集群的控制平面节点(端点)。用于验证是否每个端点均已创建并包含在端点池中。
kubectl get endpoints
NAME ENDPOINTS AGE
tkgs-cluster-12-control-plane-service 10.244.0.66:6443 3h44m

使用 TKGS v1alpha2 API 置备 TKGS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
name: tkg-cluster-1
namespace: tanzu-kubernetes-grid
spec:
topology:
controlPlane:
replicas: 3
vmClass: best-effort-large
storageClass: goldsp
tkr:
reference:
name: v1.22.9---vmware.1-tkg.1.cc71bc8
nodePools:
- name: worker-nodepool-a1
replicas: 3
vmClass: best-effort-large
storageClass: goldsp
tkr:
reference:
name: v1.22.9---vmware.1-tkg.1.cc71bc8
settings:
storage:
defaultClass: goldsp
network:
cni:
name: antrea
services:
cidrBlocks: ["10.95.0.0/23"]
pods:
cidrBlocks: ["10.243.0.0/20"]
serviceDomain: tkg.io