可以通过使用 kubectl 和在 YAML 中定义的集群规范调用 Tanzu Kubernetes Grid 服务 声明性 API 来置备 Tanzu Kubernetes 集群。置备集群后,可以使用 kubectl 运行集群并在其中部署工作负载。

此工作流支持 Tanzu Kubernetes Grid 服务 v1alpha2 API。如果使用的是 v1alpha1 API,请参阅此工作流

前提条件

在开始工作流过程之前,请确认满足以下必备条件:

过程

  1. 下载并安装 适用于 vSphere 的 Kubernetes CLI 工具
  2. 使用 kubectl 的 vSphere 插件主管集群 进行身份验证。
    kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME
  3. 验证是否成功登录到 主管集群
    您应该会看到类似以下内容的消息:
    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 命名空间 的环境。
  4. 验证目标 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
  5. 列出目标 vSphere 命名空间 中可用的虚拟机类绑定。
    kubectl get virtualmachineclassbindings
    您只能使用那些绑定到目标命名空间的虚拟机类。如果看不到任何虚拟机类,请检查 vSphere 命名空间 中是否添加了默认虚拟机类。
  6. 获取可用的持久卷存储类。
    kubectl describe storageclasses
  7. 列出可用的 Tanzu Kubernetes 版本
    您可以使用以下任一命令执行此操作:
    kubectl get tkr
    kubectl get tanzukubernetesreleases
    只能使用此命令返回的版本。如果看不到任何版本或所需的版本,请确认已将所需的 OVA 文件与内容库同步。
  8. 创建用于置备 Tanzu Kubernetes 集群的 YAML 文件。
    1. 查看 v1alpha2 API 规范。
    2. 从用于置备集群的示例 YAML 文件之一开始,默认自定义均可,具体取决于您的要求。
    3. 将 YAML 文件保存为 tkgs-cluster-1.yaml 或类似格式。
    4. 根据您的要求并使用从上述命令输出收集的信息填充 YAML 文件,包括:
      • 集群的名称,例如 tkgs-cluster-1
      • 目标 vSphere 命名空间,例如 tkgs-ns
      • 绑定的虚拟机类,例如 guaranteed-mediumguaranteed-small
      • 集群节点和工作负载的存储类,例如 vwt-storage-policy
      • 控制平面和工作节点(副本)数
      • TKR NAME 字符串指定的 Tanzu Kubernetes 版本,例如 v1.21.6---vmware.1-tkg.1.b3d708a
    5. 根据需要自定义 YAML 文件。例如:
      • 为频繁更改的组件(例如 etcdcontainerd)添加单独的卷
      • 为集群节点指定默认持久存储类
      • 自定义集群网络,包括 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 范围。
  9. 通过运行以下 kubectl 命令置备集群。
    kubectl apply -f tkgs-cluster-1.yaml
    预期结果:
    tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 created
  10. 使用 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 集群状态
  11. 使用 vSphere Client 监控集群节点的部署。
    在 vSphere 主机和集群清单中,您应该会看到正在目标 vSphere 命名空间 中部署的虚拟机节点。
  12. 运行其他 kubectl 命令以验证集群置备。
    kubectl get tanzukubernetescluster,cluster-api,virtualmachinesetresourcepolicy,virtualmachineservice,virtualmachine
    有关其他指导,请参见 使用 Tanzu Kubernetes 集群操作命令
    有关故障排除,请参见 对 Tanzu Kubernetes 集群进行故障排除
  13. 使用 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
  14. 验证是否成功登录到 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-nsvSphere 命名空间 环境, tkgs-cluster-1Tanzu Kubernetes 集群环境。
  15. 使用 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 集群,使其成为当前环境。
  16. 使用以下 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
  17. 使用其他 kubectl 命令验证集群置备。
    kubectl get namespaces
    kubectl get pods -A
    kubectl cluster-info
    kubectl api-resources
  18. 定义适当的 Pod 安全策略。
    默认情况下, Tanzu Kubernetes 集群启用了 PodSecurityPolicy 准入控制器。有关指导,请参见 对 Tanzu Kubernetes 集群使用 POD 安全策略
    根据工作负载和用户,您需要为系统提供的 PodSecurityPolicy 创建绑定,或者创建自定义 PodSecurityPolicy。请参见 Pod 安全策略的角色绑定示例
  19. 部署示例工作负载并验证集群创建。
  20. 部署 TKG 扩展,使集群正常运行。