可以通过使用 kubectl 和在 YAML 中定义的集群规范调用 Tanzu Kubernetes Grid 服务 声明性 API 来置备 Tanzu Kubernetes 集群。置备集群后,可以使用 kubectl 运行集群并在其中部署工作负载。
此工作流支持 Tanzu Kubernetes Grid 服务 v1alpha2 API。如果使用的是 v1alpha1 API,请参阅此工作流。
前提条件
在开始工作流过程之前,请确认满足以下必备条件:
- 安装或更新环境以支持 Tanzu Kubernetes Grid 服务 v1alpha2 API。有关详细信息,请参阅要求。支持 v1alpha2 API 的最低 Tanzu Kubernetes 版本为
v1.21.2
。有关详细信息,请参阅 VMware Tanzu Kubernetes 版本发行说明。 - 配置用于托管 Tanzu Kubernetes 集群的 vSphere 命名空间。该命名空间需要 DevOps 工程师具有编辑权限以及共享存储。请参见创建和配置 vSphere 命名空间。
- 为 Tanzu Kubernetes 版本 创建内容库,并同步要使用的版本。请参见为 Tanzu Kubernetes 版本 创建和管理内容库。
- 确定要使用的默认虚拟机类以及是否需要自定义虚拟机类。请参见用于 Tanzu Kubernetes 集群的虚拟机类。
- 将内容库和虚拟机类与 vSphere 命名空间 关联。请参见为 Tanzu Kubernetes 版本配置 vSphere 命名空间。
过程
- 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具。
有关指导,请参见 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具。
- 使用 kubectl 的 vSphere 插件 对 主管集群 进行身份验证。
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME
有关指导,请参见 以 vCenter Single Sign-On 用户的身份连接到 主管集群。 - 验证是否成功登录到 主管集群。
您应该会看到类似以下内容的消息:
Logged in successfully. You have access to the following contexts: 192.197.2.65 tkgs-ns
其中,192.197.2.65
是 主管集群 环境,tkgs-ns
是计划置备 Tanzu Kubernetes 集群的 vSphere 命名空间 的环境。 - 验证目标 vSphere 命名空间 是否为当前环境。
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE 192.197.2.65 192.197.2.65 wcp:192.197.2.65:[email protected] * tkgs-ns 192.197.2.65 wcp:192.197.2.65:[email protected] tkgs-ns
如果目标 vSphere 命名空间 不是当前环境,请切换到该目标命名空间。kubectl config use-context tkgs-ns
- 列出目标 vSphere 命名空间 中可用的虚拟机类绑定。
kubectl get virtualmachineclassbindings
您只能使用那些绑定到目标命名空间的虚拟机类。如果看不到任何虚拟机类,请检查 vSphere 命名空间 中是否添加了默认虚拟机类。 - 获取可用的持久卷存储类。
kubectl describe storageclasses
- 列出可用的 Tanzu Kubernetes 版本。
您可以使用以下任一命令执行此操作:
kubectl get tkr
kubectl get tanzukubernetesreleases
只能使用此命令返回的版本。如果看不到任何版本或所需的版本,请确认已将所需的 OVA 文件与内容库同步。 - 创建用于置备 Tanzu Kubernetes 集群的 YAML 文件。
- 查看 v1alpha2 API 规范。
- 从用于置备集群的示例 YAML 文件之一开始,默认或自定义均可,具体取决于您的要求。
- 将 YAML 文件保存为
tkgs-cluster-1.yaml
或类似格式。 - 根据您的要求并使用从上述命令输出收集的信息填充 YAML 文件,包括:
- 集群的名称,例如
tkgs-cluster-1
- 目标 vSphere 命名空间,例如
tkgs-ns
- 绑定的虚拟机类,例如
guaranteed-medium
和guaranteed-small
- 集群节点和工作负载的存储类,例如
vwt-storage-policy
- 控制平面和工作节点(副本)数
- TKR NAME 字符串指定的 Tanzu Kubernetes 版本,例如
v1.21.6---vmware.1-tkg.1.b3d708a
- 集群的名称,例如
- 根据需要自定义 YAML 文件。例如:
- 为频繁更改的组件(例如
etcd
和containerd
)添加单独的卷 - 为集群节点指定默认持久存储类
- 自定义集群网络,包括 CNI、pod 和服务 CIDR
- 为频繁更改的组件(例如
完成此步骤后,将生成用于置备 TKGS 集群的有效 YAML。例如:apiVersion: run.tanzu.vmware.com/v1alpha2 kind: TanzuKubernetesCluster metadata: name: tkgs-cluster-1 namespace: tkgs-ns spec: topology: controlPlane: replicas: 3 vmClass: guaranteed-medium storageClass: vwt-storage-policy volumes: - name: etcd mountPath: /var/lib/etcd capacity: storage: 4Gi tkr: reference: name: v1.21.6---vmware.1-tkg.1.b3d708a nodePools: - name: worker-nodepool-a1 replicas: 3 vmClass: guaranteed-medium storageClass: vwt-storage-policy volumes: - name: containerd mountPath: /var/lib/containerd capacity: storage: 16Gi tkr: reference: name: v1.21.6---vmware.1-tkg.1.b3d708a - name: worker-nodepool-a2 replicas: 2 vmClass: guaranteed-small storageClass: vwt-storage-policy tkr: reference: name: v1.21.6---vmware.1-tkg.1.b3d708a settings: storage: defaultClass: vwt-storage-policy
注: 上述示例使用默认集群网络连接,即对集群 Pod 和服务使用 Antrea CNI 和默认 CIDR 范围。 - 通过运行以下 kubectl 命令置备集群。
kubectl apply -f tkgs-cluster-1.yaml
预期结果:tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 created
- 使用 kubectl 监控集群节点的部署。
kubectl get tanzukubernetesclusters
最初,集群未就绪,因为它正在置备中。NAME CONTROL PLANE WORKER TKR NAME AGE READY TKR COMPATIBLE UPDATES AVAILABLE tkgs-cluster-1 3 5 v1.21.6---vmware.1-tkg.1.b3d708a 2m4s False True
几分钟后,READY 状态应为 True。NAME CONTROL PLANE WORKER TKR NAME AGE READY TKR COMPATIBLE UPDATES AVAILABLE tkgs-cluster-1 3 5 v1.21.6---vmware.1-tkg.1.b3d708a 13m True True
有关其他指导,请参见 使用 kubectl 监控 Tanzu Kubernetes 集群状态。 - 使用 vSphere Client 监控集群节点的部署。
在 vSphere 主机和集群清单中,您应该会看到正在目标 vSphere 命名空间 中部署的虚拟机节点。有关其他指导,请参见 使用 vSphere Client 监控 Tanzu Kubernetes 集群状态。
- 运行其他
kubectl
命令以验证集群置备。kubectl get tanzukubernetescluster,cluster-api,virtualmachinesetresourcepolicy,virtualmachineservice,virtualmachine
有关其他指导,请参见 使用 Tanzu Kubernetes 集群操作命令。有关故障排除,请参见 对 Tanzu Kubernetes 集群进行故障排除。 - 使用 kubectl 的 vSphere 插件,登录到集群。
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME \ --tanzu-kubernetes-cluster-name CLUSTER-NAME \ --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
例如:kubectl vsphere login --server=192.197.2.65 --vsphere-username [email protected] \ --tanzu-kubernetes-cluster-name tkgs-cluster-1 --tanzu-kubernetes-cluster-namespace tkgs-ns
- 验证是否成功登录到 Tanzu Kubernetes 集群。
您应该会看到类似以下内容的消息。
Logged in successfully. You have access to the following contexts: 192.197.2.65 tkgs-cluster-1 tkgs-ns
其中,192.197.2.65
是 主管集群 环境,tkgs-ns
是 vSphere 命名空间 环境,tkgs-cluster-1
是 Tanzu Kubernetes 集群环境。 - 使用
kubectl
列出可用的集群环境。kubectl config get-contexts
例如:CURRENT NAME CLUSTER AUTHINFO NAMESPACE 192.197.2.65 192.197.2.65 wcp:192.197.2.65:[email protected] * tkgs-cluster-1 192.197.2.67 wcp:192.197.2.67:[email protected] tkgs-ns 192.197.2.65 wcp:192.197.2.65:[email protected] tkgs-ns
如有必要,请使用kubect config use-context tkgs-cluster-1
切换到 Tanzu Kubernetes 集群,使其成为当前环境。 - 使用以下 kubectl 命令验证集群置备。
kubectl get nodes
例如:NAME STATUS ROLES AGE VERSION tkgs-cluster-1-control-plane-6ln2h Ready control-plane,master 30m v1.21.6+vmware.1 tkgs-cluster-1-control-plane-6q67n Ready control-plane,master 33m v1.21.6+vmware.1 tkgs-cluster-1-control-plane-jw964 Ready control-plane,master 37m v1.21.6+vmware.1 tkgs-cluster-1-worker-nodepool-a1-4vvkb-65494d66d8-h5fp8 Ready <none> 32m v1.21.6+vmware.1 tkgs-cluster-1-worker-nodepool-a1-4vvkb-65494d66d8-q4g24 Ready <none> 33m v1.21.6+vmware.1 tkgs-cluster-1-worker-nodepool-a1-4vvkb-65494d66d8-vdcn4 Ready <none> 33m v1.21.6+vmware.1 tkgs-cluster-1-worker-nodepool-a2-2n22f-bd59d7b96-nh4dg Ready <none> 34m v1.21.6+vmware.1 tkgs-cluster-1-worker-nodepool-a2-2n22f-bd59d7b96-vvfmf Ready <none> 33m v1.21.6+vmware.1
- 使用其他 kubectl 命令验证集群置备。
kubectl get namespaces
kubectl get pods -A
kubectl cluster-info
kubectl api-resources
- 定义适当的 Pod 安全策略。
默认情况下, Tanzu Kubernetes 集群启用了 PodSecurityPolicy 准入控制器。有关指导,请参见 对 Tanzu Kubernetes 集群使用 POD 安全策略。根据工作负载和用户,您需要为系统提供的 PodSecurityPolicy 创建绑定,或者创建自定义 PodSecurityPolicy。请参见 Pod 安全策略的角色绑定示例。
- 部署示例工作负载并验证集群创建。
有关指导,请参见 在 Tanzu Kubernetes 集群上部署工作负载。
- 部署 TKG 扩展,使集群正常运行。
有关指导,请参见 在 Tanzu Kubernetes 集群上部署 TKG 软件包。