可以通过更改节点数横向扩展 Tanzu Kubernetes 集群,也可以通过更改托管节点的虚拟机类纵向扩展集群。

支持的扩展操作

下表列出了支持的 Tanzu Kubernetes 集群扩展操作。
表 1. 支持的 Tanzu Kubernetes 集群扩展操作
节点 横向扩展 横向缩减 纵向扩展 卷扩展
控制平面
工作节点
请记住以下注意事项:
  • 纵向扩展集群节点时,由于缺少可用资源,工作负载可能无法继续在节点上运行。因此,横向扩展可能是首选方法。
  • 虚拟机类不可改变。如果在编辑该集群使用的虚拟机类后扩大 Tanzu Kubernetes 集群,新集群节点将使用更新的类定义,但现有集群节点继续使用初始类定义,从而导致不匹配。请参见用于 Tanzu Kubernetes 集群的虚拟机类
  • 工作节点卷在置备后可以更改,但控制平面节点卷不能。

扩展必备条件:配置 Kubectl 编辑

要扩展 Tanzu Kubernetes 集群,请使用命令 kubectl edit tanzukubernetescluster/CLUSTER-NAME 更新集群清单。kubectl edit 命令将在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。有关设置环境变量的说明,请参阅为 Kubectl 指定默认的文本编辑器

保存清单更改时, kubectl 会报告编辑已成功记录,并且集群已使用更改进行更新。
kubectl edit tanzukubernetescluster/tkgs-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited
要取消,只需关闭编辑器即可,无需进行保存。
kubectl edit tanzukubernetescluster/tkgs-cluster-1
Edit cancelled, no changes made.

横向扩展控制平面

可以通过将控制平面节点数从 1 增加到 3,横向扩展 Tanzu Kubernetes 集群。控制平面节点数必须为奇数。无法横向缩减控制平面。
  1. 主管集群 进行身份验证。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间
    kubectl config use-context tkgs-cluster-ns
  3. 列出正在命名空间中运行的 Kubernetes 集群。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 获取在目标集群中运行的节点数。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    例如,以下集群有 1 个控制平面节点和 3 个工作节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     1               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. 使用 kubectl edit 命令加载集群清单进行编辑。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

    在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。

  6. 找到 spec.topology.controlPlane.count 参数,然后将节点数从 1 增加到 3。
    ...
    controlPlane:
        replicas: 1
    ...
    
    ...
    ControlPlane:
        replicas: 3
    ...
    
  7. 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。

    保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作节点。

  8. 验证新节点是否已添加。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    横向扩展后的控制平面现在具有 3 个节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

横向扩展工作节点

可以通过使用 kubectl 增加工作节点数来横向扩展 Tanzu Kubernetes 集群。

  1. 使用 主管集群 进行身份验证。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间
    kubectl config use-context tkgs-cluster-ns
  3. 列出正在命名空间中运行的 Kubernetes 集群。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 获取在目标集群中运行的节点数。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    例如,以下集群有 3 个控制平面节点和 3 个工作节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. 使用 kubectl edit 命令加载集群清单进行编辑。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

    在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。

  6. 找到 spec.topology.workers.count 参数,然后增加节点数。
    ...
    workers:
        replicas: 3
    ...
    
    ...
    workers:
        replicas: 4
    ...
    
  7. 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。

    保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作节点。

  8. 验证新工作节点是否已添加。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    横向扩展后,集群有 4 个工作节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

横向缩减工作节点

可以通过减少工作节点数来横向缩减 Tanzu Kubernetes 集群。不支持横向缩减控制平面。

  1. 使用 主管集群 进行身份验证。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间
    kubectl config use-context tkgs-cluster-ns
  3. 列出正在命名空间中运行的 Kubernetes 集群。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 获取在目标集群中运行的节点数。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    例如,以下集群有 3 个控制平面节点和 4 个工作节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. 使用 kubectl edit 命令加载集群清单进行编辑。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

    在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。

  6. 找到 spec.topology.workers.count 参数,然后减少节点数。
    ...
    workers:
        replicas: 4
    ...
    
    ...
    workers:
        replicas: 2
    ...
    
  7. 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。

    保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作节点。

  8. 验证工作节点是否已移除。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    横向缩减后,集群有 2 个工作节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               2        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

垂直扩展集群

可以通过更改用于托管集群节点的虚拟机类来纵向扩展 Tanzu Kubernetes 集群。对于控制平面节点和工作节点,都支持纵向扩展。

Tanzu Kubernetes Grid 服务 支持通过服务中内置的滚动更新机制纵向扩展集群节点。如果更改 VirtualMachineClass 定义,该服务将推出具有该新类的新节点,并停止旧节点。请参见更新 Tanzu Kubernetes 集群

  1. 使用 主管集群 进行身份验证。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间
    kubectl config use-context tkgs-cluster-ns
  3. 列出正在命名空间中运行的 Kubernetes 集群。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 描述目标 Tanzu Kubernetes 集群并检查虚拟机类。
    kubectl describe tanzukubernetescluster tkgs-cluster-2

    例如,以下集群使用的是 best-effort-medium 虚拟机类。

    Spec:
      ...
      Topology:
        Control Plane:
          Class:          best-effort-medium
          ...
        nodePool-a1:
          Class:          best-effort-medium
          ...
    
  5. 列出并描述可用的虚拟机类。
    kubectl get virtualmachineclassbinding
    kubectl describe virtualmachineclassbinding
    注: 要使用的虚拟机类必须绑定 vSphere 命名空间。请参见 用于 Tanzu Kubernetes 集群的虚拟机类
  6. 打开以编辑目标集群清单。
    kubectl edit tanzukubernetescluster/tkgs-cluster-2

    在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。

  7. 编辑清单,更改虚拟机类。
    例如,编辑集群清单,对控制平面和工作节点使用 guaranteed-large 虚拟机类。
    spec:
      topology:
        controlPlane:
          class: guaranteed-large
          ...
        nodePool-a1:
          class: guaranteed-large
          ...
    
  8. 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。

    保存文件时,kubectl 会将所做更改应用到集群。在后台,Tanzu Kubernetes Grid 服务 将置备新节点并删除旧节点。有关滚动更新过程的描述,请参见关于 Tanzu Kubernetes Grid 服务 集群更新

  9. 验证集群是否已更新。
    kubectl get tanzukubernetescluster
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

扩展节点卷

在节点的 Tanzu Kubernetes 集群规范中,您可以选择声明一个或多个持久卷。声明节点卷对于频繁更改的组件非常有用,例如控制平面上的 ectd 数据库和工作节点上的容器运行时。下面提供了声明这两个节点卷的集群规范摘录,以供参考。(完整的示例集群规范可从此处获取。)

如果要在创建集群后添加或更改一个或多个节点卷,请记住以下注意事项:
卷节点 描述
允许更改工作节点卷。
置备 Tanzu Kubernetes 集群后,可以添加或更新工作节点卷。启动滚动更新时,集群将使用新卷或更改的卷进行更新。
警告: 如果使用新卷或更改的卷扩展工作节点,则在滚动更新期间将删除当前卷中的数据。
不允许更改控制平面节点卷。 置备 Tanzu Kubernetes 集群后,无法添加或更新控制平面节点卷。Kubernetes 集群 API (CAPI) 禁止对 spec.toplogy.controlPlane.volumes 进行创建后更改。如果在创建集群后尝试添加或更改控制平面卷,请求将被拒绝,并显示错误消息“不允许更新不可变字段 (updates to immutable fields are not allowed)”。
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.2---vmware.1-tkg.1.ee25d55
    nodePools:
    - name: worker-nodepool-a1
      replicas: 3
      vmClass: guaranteed-large
      storageClass: vwt-storage-policy
      volumes:
        - name: containerd
          mountPath: /var/lib/containerd
          capacity:
            storage: 16Gi