可以通过更改节点数横向扩展 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.
横向扩展控制平面
- 向 主管集群 进行身份验证。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间。
kubectl config use-context tkgs-cluster-ns
- 列出正在命名空间中运行的 Kubernetes 集群。
kubectl get tanzukubernetescluster -n tkgs-cluster-ns
- 获取在目标集群中运行的节点数。
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
- 使用
kubectl edit
命令加载集群清单进行编辑。kubectl edit tanzukubernetescluster/tkgs-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 找到
spec.topology.controlPlane.count
参数,然后将节点数从 1 增加到 3。... controlPlane: replicas: 1 ...
... ControlPlane: replicas: 3 ...
- 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作节点。
- 验证新节点是否已添加。
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 集群。
- 使用 主管集群 进行身份验证。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间。
kubectl config use-context tkgs-cluster-ns
- 列出正在命名空间中运行的 Kubernetes 集群。
kubectl get tanzukubernetescluster -n tkgs-cluster-ns
- 获取在目标集群中运行的节点数。
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
- 使用
kubectl edit
命令加载集群清单进行编辑。kubectl edit tanzukubernetescluster/tkgs-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 找到
spec.topology.workers.count
参数,然后增加节点数。... workers: replicas: 3 ...
... workers: replicas: 4 ...
- 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作节点。
- 验证新工作节点是否已添加。
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 集群。不支持横向缩减控制平面。
- 使用 主管集群 进行身份验证。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间。
kubectl config use-context tkgs-cluster-ns
- 列出正在命名空间中运行的 Kubernetes 集群。
kubectl get tanzukubernetescluster -n tkgs-cluster-ns
- 获取在目标集群中运行的节点数。
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
- 使用
kubectl edit
命令加载集群清单进行编辑。kubectl edit tanzukubernetescluster/tkgs-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 找到
spec.topology.workers.count
参数,然后减少节点数。... workers: replicas: 4 ...
... workers: replicas: 2 ...
- 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,主管集群 上的 虚拟机服务 将置备新的工作节点。
- 验证工作节点是否已移除。
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 集群。
- 使用 主管集群 进行身份验证。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 将上下文切换到运行 Tanzu Kubernetes 集群的 vSphere 命名空间。
kubectl config use-context tkgs-cluster-ns
- 列出正在命名空间中运行的 Kubernetes 集群。
kubectl get tanzukubernetescluster -n tkgs-cluster-ns
- 描述目标 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 ...
- 列出并描述可用的虚拟机类。
kubectl get virtualmachineclassbinding
kubectl describe virtualmachineclassbinding
- 打开以编辑目标集群清单。
kubectl edit tanzukubernetescluster/tkgs-cluster-2
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 编辑清单,更改虚拟机类。
例如,编辑集群清单,对控制平面和工作节点使用
guaranteed-large
虚拟机类。spec: topology: controlPlane: class: guaranteed-large ... nodePool-a1: class: guaranteed-large ...
- 要应用更改,请在文本编辑器中保存该文件。要取消,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,Tanzu Kubernetes Grid 服务 将置备新节点并删除旧节点。有关滚动更新过程的描述,请参见关于 Tanzu Kubernetes Grid 服务 集群更新。
- 验证集群是否已更新。
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