可以通过更改节点数来横向扩展 主管 上的 TKG 集群,也可以通过更改托管节点的虚拟机类来纵向扩展该集群。您还可以扩展持久卷。可能存在一些限制。

支持的扩展操作

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

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

要扩展 TKG 集群,请使用命令 kubectl edit CLUSTER-KIND/CLUSTER-NAME 更新集群清单。保存清单更改时,将使用所做更改更新集群。请参见为 Kubectl 配置文本编辑器

例如:
kubectl edit tanzukubernetescluster/tkg-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 edited
要取消更改,请在不保存的情况下关闭编辑器。
kubectl edit tanzukubernetescluster/tkg-cluster-1
Edit cancelled, no changes made.

横向扩展控制平面

可以通过将控制平面节点数从 1 增加到 3,来横向扩展 TKG 2.0 集群。
注: 生产集群需要 3 个控制平面节点。
  1. 登录到 主管
    kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
  2. 将上下文切换到运行 TKG 集群的 vSphere 命名空间
    kubectl config use-context tkg-cluster-ns
  3. 列出在 vSphere 命名空间 中运行的 Kubernetes 集群。
    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    例如:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
  4. 获取在目标集群中运行的节点数。
    kubectl get tanzukubernetescluster tkg-cluster-1
    例如,TKG 集群有 1 个控制平面节点和 3 个工作节点。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    1               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    
  5. 使用 kubectl edit 命令加载集群清单进行编辑。
    kubectl edit tanzukubernetescluster/tkg-cluster-1

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

  6. 在清单的 spec.topology.controlPlane.replicas 部分将控制平面节点数从 1 增加到 3。
    例如:
    ...
    spec:
      topology:
        controlPlane:
          replicas: 1
    ...
    
    ...
    spec:
      topology:
        controlPlane:
          replicas: 3
    ...
    
  7. 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。

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

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

横向扩展工作节点

可以通过增加工作节点数来横向扩展 TKG 2.0 集群。

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

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

  6. 可以通过编辑目标工作节点池的 spec.topology.nodePools.NAME.replicas 值来增加工作节点数。
    例如:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
  7. 要应用更改,请在文本编辑器中保存该文件。要取消更改,请在不保存的情况下关闭编辑器。

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

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

横向缩减工作节点

可以通过减少工作节点数来横向缩减 TKG 2.0 集群。

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

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

  6. 可以通过编辑目标工作节点池的 spec.topology.nodePools.NAME.replicas 值来减少工作节点数。
    例如:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
  7. 要应用更改,请在文本编辑器中保存该文件。要取消更改,请在不保存的情况下关闭编辑器。

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

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

垂直扩展集群

主管 上的 TKG 2.0 支持集群控制平面和工作节点的纵向扩展。可以通过更改用于集群节点的虚拟机类纵向扩展 TKG 集群。您使用的虚拟机类必须绑定到置备了 TKG 集群的 vSphere 命名空间

主管 上的 TKG 2.0 支持通过系统内置的滚动更新机制进行纵向扩展。更改 VirtualMachineClass 定义时,系统将推出具有该新类的新节点,并停止旧节点。请参见维护 主管 上的 TKG 集群

  1. 登录到 主管
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 切换到正在运行 TKG 集群的 vSphere 命名空间 环境。
    kubectl config use-context tkg-cluster-ns
  3. 列出在 vSphere 命名空间 中运行的 Kubernetes 集群。
    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    例如:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
  4. 描述目标 TKG 集群并检查虚拟机类。
    kubectl describe tanzukubernetescluster tkg-cluster-1

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

    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-medium
          ...
    
  5. 列出并描述可用的虚拟机类。
    kubectl get virtualmachineclassbinding
    kubectl describe virtualmachineclassbinding
    注: 虚拟机类必须绑定到 vSphere 命名空间。请参见 对 主管 上的 TKG 集群使用虚拟机类
  6. 打开以编辑目标集群清单。
    kubectl edit tanzukubernetescluster/tkg-cluster-1

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

  7. 编辑清单,更改虚拟机类。
    例如,该集群对控制平面和工作节点使用 best-effort-xsmall 虚拟机类。
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: best-effort-xsmall
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: best-effort-xsmall
          ...
    
    将控制平面的虚拟机类更改为 guaranteed-large,并将工作节点的虚拟机类更改为 guaranteed-2xlarge
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-large
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-2xlarge
          ...
    
  8. 要应用更改,请在文本编辑器中保存该文件。要取消更改,请在不保存的情况下关闭编辑器。

    保存文件时,kubectl 会将所做更改应用到集群。在后台,主管 上的 TKG 将对 TKG 集群执行滚动更新。

  9. 确认 TKG 集群已使用新的虚拟机类进行了更新。
    kubectl describe tanzukubernetescluster tkg-cluster-1

扩展 TKG 集群节点卷

在节点的 TKG 集群规范中,可以选择为节点声明一个或多个持久卷。声明节点卷对于频繁更改的组件非常有用,例如控制平面上的 ectd 数据库、工作节点上的容器运行时和 kubelet。

如果要在创建集群后添加或更改一个或多个节点卷,请记住以下注意事项:
卷节点 描述

允许更改工作节点卷

置备 TKG 集群后,您可以添加或更新工作节点卷。启动滚动更新时,集群将使用新卷或更改的卷进行更新。

警告: 如果使用新卷或更改的卷扩展工作节点,则在滚动更新期间将删除当前卷中的数据。请参阅下面的说明。

为 TKG 集群节点声明的卷视为临时卷。TKG 集群会在 vSphere 命名空间中使用持久卷声明 (PVC),以便根据 TKG 集群的存储配额计算卷容量。如果增加 TKC 卷的容量,Kubernetes 集群 API (CAPI) 将推出具有新 PVC 的新工作节点。在这种情况下,TKG 不会执行任何数据迁移,但 Kubernetes 将相应地(重新)调度工作负载 Pod。

不允许更改控制平面节点卷

置备 TKG 集群后,无法添加或更新控制平面节点卷。Kubernetes 集群 API (CAPI) 禁止对 spec.toplogy.controlPlane.volumes 进行创建后更改。

如果在创建集群后尝试添加或更改控制平面卷,请求将被拒绝,并显示错误消息“不允许更新不可变字段 (updates to immutable fields are not allowed)”。

此时将为上下文提供包含所声明节点卷的集群规范摘录。请根据需要参考包含此摘录的完整 TKG 集群示例: v1alpha3 示例:具有默认存储和节点卷的 TKC
apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TanzuKubernetesCluster
...
spec:
   topology:
     controlPlane:
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-medium
       tkr:
         reference:
           name: v1.24.9---vmware.1-tkg.4
     nodePools:
     - name: worker-nodepool-a1
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-large
       tkr:
         reference:
           name: v1.24.9---vmware.1-tkg.4
       volumes:
       - name: containerd
         mountPath: /var/lib/containerd
         capacity:
           storage: 50Gi
       - name: kubelet
         mountPath: /var/lib/kubelet
         capacity:
           storage: 50Gi
     - name: worker-nodepool-a2
       ...
   settings:
     ...