可以通过更改节点数横向扩展 TKG Service 集群,也可以通过更改托管节点的虚拟机类纵向扩展该集群。还可以扩展附加到集群节点的卷。
支持的手动扩展操作
节点 | 横向扩展 | 横向缩减 | 纵向扩展 | 卷扩展 |
---|---|---|---|---|
控制平面 | 是 | 否 | 是 | 是* |
工作节点 | 是 | 是 | 是 | 是 |
扩展必备条件:配置 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.
横向扩展控制平面
- 登录到 主管。
kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
- 将上下文切换到运行 TKG 集群的 vSphere 命名空间。
kubectl config use-context tkg-cluster-ns
- 列出在 vSphere 命名空间 中运行的 Kubernetes 集群。
使用以下语法:
kubectl get CLUSTER-KIND -n tkg-cluster-ns
例如,对于 v1alpha3 API 集群:kubectl get tanzukubernetescluster -n tkg-cluster-ns
例如,对于 v1beta1 API 集群:kubectl get cluster -n tkg-cluster-ns
- 获取在目标集群中运行的节点数。
对于 v1alpha3 API 集群:
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
对于 v1beta1 API 集群:
kubectl get cluster tkg-cluster-1
- 使用
kubectl edit
命令加载集群清单进行编辑。对于 v1alpha3 API 集群:kubectl edit tanzukubernetescluster/tkg-cluster-1
对于 v1beta1 API 集群:kubectl edit cluster/tkg-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 在清单的
spec.topology.controlPlane.replicas
部分将控制平面节点数从 1 增加到 3。对于 v1alpha3 API 集群:... spec: topology: controlPlane: replicas: 1 ...
... spec: topology: controlPlane: replicas: 3 ...
对于 v1beta1 API 集群:... spec: ... topology: class: tanzukubernetescluster controlPlane: metadata: {} replicas: 1 variables: ...
... spec: ... topology: class: tanzukubernetescluster controlPlane: metadata: {} replicas: 3 variables: ...
- 在文本编辑器中保存文件以应用更改。(要取消更改,请在不保存的情况下关闭编辑器。)
保存清单更改时,kubectl 会将所做更改应用到集群。在后台,主管 上的 虚拟机服务 将置备新的控制平面节点。
- 验证新节点是否已添加。
对于 v1alpha3 API 集群:
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
对于 v1beta1 API 集群:
kubectl get cluster tkg-cluster-1
横向扩展工作节点
可以通过增加工作节点数来横向扩展 TKG 集群。
- 登录到 主管。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 切换到正在运行 TKG 集群的 vSphere 命名空间 环境。
kubectl config use-context tkg-cluster-ns
- 列出在 vSphere 命名空间 中运行的 Kubernetes 集群。
使用以下语法:
kubectl get CLUSTER-KIND -n tkg-cluster-ns
例如,对于 v1alph3 API 集群:kubectl get tanzukubernetescluster -n tkg-cluster-ns
例如,对于 v1beta1 API 集群:kubectl get cluster -n tkg-cluster-ns
- 获取在目标集群中运行的节点数。
对于 v1alpha3 API 集群:
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
对于 v1beta1 API 集群:kubectl get cluster tkg-cluster-1
- 使用
kubectl edit
命令加载集群清单进行编辑。对于 v1alpha3 API 集群:
kubectl edit tanzukubernetescluster/tkg-cluster-1
对于 v1beta1 API 集群:kubectl edit cluster/tkg-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 可以通过编辑目标工作节点池的
spec.topology.nodePools.NAME.replicas
值来增加工作节点数。对于 v1alpha3 API 集群:... spec: topology: ... nodePools: - name: worker-1 replicas: 3 ...
... spec: topology: ... nodePools: - name: worker-1 replicas: 4 ...
对于 v1beta1 API 集群:... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 3 ...
... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 4 ...
- 要应用更改,请在文本编辑器中保存该文件。要取消更改,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,主管 上的 虚拟机服务 将置备新的工作节点。
- 验证新节点是否已添加。
对于 v1alpha3 API 集群:
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
对于 v1beta1 API 集群:
kubectl get cluster tkg-cluster-1
横向缩减工作节点
可以通过减少工作节点数来横向缩减 TKG 集群。
- 登录到 主管。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 切换到正在运行 TKG 集群的 vSphere 命名空间 环境。
kubectl config use-context tkg-cluster-ns
- 列出在 vSphere 命名空间 中运行的 Kubernetes 集群。
使用以下语法:
kubectl get CLUSTER-KIND -n tkg-cluster-ns
例如,对于 v1alph3 API 集群:kubectl get tanzukubernetescluster -n tkg-cluster-ns
例如,对于 v1beta1 API 集群:kubectl get cluster -n tkg-cluster-ns
- 获取在目标集群中运行的节点数。
kubectl get tanzukubernetescluster tkg-cluster-1
- 获取在目标集群中运行的节点数。
对于 v1alpha3 API 集群:
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
对于 v1beta1 API 集群:kubectl get cluster tkg-cluster-1
- 使用
kubectl edit
命令加载集群清单进行编辑。对于 v1alpha3 API 集群:
kubectl edit tanzukubernetescluster/tkg-cluster-1
对于 v1beta1 API 集群:kubectl edit cluster/tkg-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 可以通过编辑目标工作节点池的
spec.topology.nodePools.NAME.replicas
值来减少工作节点数。对于 v1alpha3 API 集群:... spec: topology: ... nodePools: - name: worker-1 replicas: 4 ...
... spec: topology: ... nodePools: - name: worker-1 replicas: 3 ...
对于 v1beta1 API 集群:... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 4 ...
... apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: ... spec: ... topology: ... class: tanzukubernetescluster controlPlane: ... workers: machineDeployments: - class: node-pool metadata: {} name: node-pool-1 replicas: 3 ...
- 要应用更改,请在文本编辑器中保存该文件。要取消更改,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,主管 上的 虚拟机服务 将置备新的工作节点。
- 验证工作节点是否已移除。
对于 v1alpha3 API 集群:
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
对于 v1beta1 API 集群:
kubectl get cluster tkg-cluster-1
垂直扩展集群
主管 上的 TKG 支持集群控制平面和工作节点的纵向扩展。可以通过更改用于集群节点的虚拟机类纵向扩展 TKG 集群。您使用的虚拟机类必须绑定到置备了 TKG 集群的 vSphere 命名空间。
主管 上的 TKG 支持通过系统内置的滚动更新机制进行纵向扩展。更改 VirtualMachineClass
定义时,系统将推出具有该新类的新节点,并停止旧节点。请参见更新 TKG Service 集群。
- 登录到 主管。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 切换到正在运行 TKG 集群的 vSphere 命名空间 环境。
kubectl config use-context tkg-cluster-ns
- 列出在 vSphere 命名空间 中运行的 Kubernetes 集群。
使用以下语法:
kubectl get CLUSTER-KIND -n tkg-cluster-ns
例如,对于 v1alph3 API 集群:kubectl get tanzukubernetescluster -n tkg-cluster-ns
例如,对于 v1beta1 API 集群:kubectl get cluster -n tkg-cluster-ns
- 描述目标 TKG 集群并检查虚拟机类。
对于 v1alpha3 API 集群:
kubectl describe tanzukubernetescluster tkg-cluster-1
例如,以下集群使用的是 best-effort-medium 虚拟机类。
spec: topology: controlPlane: replicas: 3 vmClass: best-effort-medium ... nodePools: - name: worker-nodepool-a1 replicas: 3 vmClass: best-effort-medium ...
对于 v1beta1 API 集群:
kubectl describe cluster tkg-cluster-1
例如,以下集群使用的是 best-effort-medium 虚拟机类。
... Topology: ... Variables: ... Name: vmClass Value: best-effort-medium ...
注: 对于 v1beta1 API 集群,默认情况下将 vmClass 全局设置为单个变量。您可以替代此设置,为控制平面和工作节点使用不同的虚拟机类。请参见 API 参考中的 vmClass。 - 列出并描述可用的虚拟机类。
kubectl get virtualmachineclass
kubectl describe virtualmachineclass
- 打开以编辑目标集群清单。
对于 v1alpha3 API 集群:
kubectl edit tanzukubernetescluster/tkg-cluster-1
对于 v1beta1 API 集群:kubectl edit cluster/tkg-cluster-1
在您的 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开集群清单。
- 编辑清单,更改虚拟机类。
对于 v1alpha3 API 集群,将控制平面的虚拟机类更改为
guaranteed-medium
,并将工作节点的虚拟机类更改为guaranteed-large
。spec: topology: controlPlane: replicas: 3 vmClass: guaranteed-medium ... nodePools: - name: worker-nodepool-a1 replicas: 3 vmClass: guaranteed-large ...
对于 v1beta API 集群,将虚拟机类更改为guaranteed-large
。... Topology: ... Variables: ... Name: vmClass Value: guaranteed-large ...
- 要应用更改,请在文本编辑器中保存该文件。要取消更改,请在不保存的情况下关闭编辑器。
保存文件时,kubectl 会将所做更改应用到集群。在后台,主管 上的 TKG 将对 TKG 集群执行滚动更新。
- 确认 TKG 集群已使用新的虚拟机类进行了更新。
对于 v1alpha3 API 集群:
kubectl describe tanzukubernetescluster tkg-cluster-1
对于 v1beta1 API 集群:
kubectl describe cluster tkg-cluster-1
扩展集群节点卷
在节点的 TKG 集群规范中,可以选择为节点声明一个或多个持久卷。声明节点卷对于频繁更改的组件非常有用,例如工作节点上的容器运行时和 kubelet。
卷节点 | 描述 |
---|---|
允许更改工作节点卷 |
置备 TKG 集群后,您可以添加或更新工作节点卷。启动滚动更新时,集群将使用新卷或更改的卷进行更新。
警告: 如果使用新卷或更改的卷扩展工作节点,则在滚动更新期间将删除当前卷中的数据。请参阅下面的说明。
为 TKG 集群节点声明的卷视为临时卷。TKG 集群会在 vSphere 命名空间中使用持久卷声明 (PVC),以便根据 TKG 集群的存储配额计算卷容量。如果增加 TKC 卷的容量,Kubernetes 集群 API (CAPI) 将推出具有新 PVC 的新工作节点。在这种情况下,TKG 不会执行任何数据迁移,但 Kubernetes 将相应地(重新)调度工作负载 Pod。 |
如果使用的是 vSphere 8 U3 或更高版本,则允许更改控制平面节点卷 |
如果使用的是 vSphere 8 U3 或更高版本以及兼容的 Tanzu Kubernetes 版本,则可以在置备 TKG Service 集群后添加或更新控制平面节点卷。 如果使用的不是 vSphere 8 U3 或更高版本,则 Kubernetes 集群 API (CAPI) 禁止在创建后更改为 如果在创建集群后尝试添加或更改控制平面卷,请求将被拒绝,并显示错误消息“不允许更新不可变字段 (updates to immutable fields are not allowed)”。 |
以下是基于包含所声明节点卷的 v1alpha3 API 的集群规范摘录。请根据需要参考包含此摘录的完整 TKG 集群示例:v1alpha3 示例:具有默认存储和节点卷的 TKC。有关 v1beta1 API 集群示例,请参见 v1beta1 示例:基于默认 ClusterClass 的自定义集群。
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: ...