扩展集群

本主题介绍如何使用以下方法扩展 Tanzu Kubernetes Grid (TKG) 工作负载集群和独立管理集群:

  • Autoscaler:对于由独立管理集群部署的工作负载集群,可以启用 Cluster Autoscaler 来根据需求自动扩展工作节点数。请参见使用 Cluster Autoscaler 扩展工作节点

    无法使用 Autoscaler 扩展主管集群部署的工作负载集群。

  • 横向扩展:对于工作负载或独立管理集群,您可以手动扩展控制平面和工作节点的数量。请参见横向扩展集群

  • 纵向扩展:对于工作负载集群,可以手动更改控制平面和工作节点的大小。请参见垂直扩展集群

注意

要扩展节点池中的节点,请参见管理不同虚拟机类型的节点池中的更新节点池

使用 Cluster Autoscaler 扩展工作节点(独立 MC)

Cluster Autoscaler 是一个 Kubernetes 程序,可根据工作负载集群的需求自动扩展 Kubernetes 集群。仅对独立管理集群部署的工作负载集群使用 Cluster Autoscaler。

有关 Cluster Autoscaler 的详细信息,请参见 GitHub 中的以下文档:

默认情况下,Cluster Autoscaler 在 Tanzu Kubernetes Grid 中处于停用状态。要在工作负载集群中启用 Cluster Autoscaler,请在运行 tanzu cluster create --file 之前,将 ENABLE_AUTOSCALER 设置为 true 并在集群配置文件中设置 AUTOSCALER_ 选项或设置选项为环境变量。

重要

对于基于类的集群,由于集群 API 中存在标签传播问题,在创建基于类的工作负载集群后,必须手动将 min-sizemax-size 注释添加到其 MachineDeployment 对象以启用 Cluster Autoscaler,如下面的(手动添加最小和最大大小注释)[#cc-workaround] 中所述。

集群配置文件中的每个 Cluster Autoscaler 配置变量都与 Cluster Autoscaler 工具中的参数相对应。有关这些变量及其默认值的列表,请参见《配置文件变量参考》中的 Cluster Autoscaler

AUTOSCALER_*_SIZE 设置会限制集群中的工作节点数,而 AUTOSCALER_MAX_NODES_TOTAL 会限制所有节点(工作节点和控制平面)的计数。

根据集群中的工作节点数设置 AUTOSCALER_*_SIZE 值:

  • 对于具有单个工作节点的集群(如 dev 集群),请设置 AUTOSCALER_MIN_SIZE_0AUTOSCALER_MAX_SIZE_0
  • 对于具有多个工作节点的集群,如 prod 集群,请设置:
    • AUTOSCALER_MIN_SIZE_0AUTOSCALER_MAX_SIZE_0
    • AUTOSCALER_MIN_SIZE_1AUTOSCALER_MAX_SIZE_1
    • AUTOSCALER_MIN_SIZE_2AUTOSCALER_MAX_SIZE_2

下面提供了集群配置文件中的 Cluster Autoscaler 设置示例。部署集群后,无法更改以下值。

#! ---------------------------------------------------------------------
#! Autoscaler related configuration
#! ---------------------------------------------------------------------
ENABLE_AUTOSCALER: false
AUTOSCALER_MAX_NODES_TOTAL: "0"
AUTOSCALER_SCALE_DOWN_DELAY_AFTER_ADD: "10m"
AUTOSCALER_SCALE_DOWN_DELAY_AFTER_DELETE: "10s"
AUTOSCALER_SCALE_DOWN_DELAY_AFTER_FAILURE: "3m"
AUTOSCALER_SCALE_DOWN_UNNEEDED_TIME: "10m"
AUTOSCALER_MAX_NODE_PROVISION_TIME: "15m"
AUTOSCALER_MIN_SIZE_0:
AUTOSCALER_MAX_SIZE_0:
AUTOSCALER_MIN_SIZE_1:
AUTOSCALER_MAX_SIZE_1:
AUTOSCALER_MIN_SIZE_2:
AUTOSCALER_MAX_SIZE_2:

对于在启用 Cluster Autoscaler 的情况下创建的每个工作负载集群,Tanzu Kubernetes Grid 会在管理集群中创建 Cluster Autoscaler 部署。要停用 Cluster Autoscaler,请删除与工作负载集群关联的 Cluster Autoscaler 部署。

手动添加最小和最大大小注释

创建启用了 Cluster Autoscaler 的基于类的工作负载集群后,由于min-size集群 API 中存在标签传播问题,必须将注释添加到其 MachineDeployment 对象,如下所示:

  1. kubectl 的上下文设置为管理集群:

    kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
    

    其中,MY-MGMT-CLUSTER 是管理集群的名称。

  2. 列出 MachineDeployment 对象,并记下其 AGE 值:

    kubectl get md
    

    对象名称以 -md 结尾,后面跟每个可用区 (AZ) 的编号。

  3. 对于集群中每个新创建的 MachineDeployment

    1. 添加 min-size 注释:

      kubectl annotate machinedeployment MD-NAME cluster.k8s.io/cluster-api-autoscaler-node-group-min-size="MIN-SIZE"
      

      其中:

      • MD-NAMEMachineDeployment 对象的名称,例如 my-wc-md-0
      • MIN-SIZE 是 AZ 的 AUTOSCALER_MIN_SIZE_* 值,例如,部署到第一个 AZ 的 *-md0AUTOSCALER_MIN_SIZE_0 值。
    2. 添加 max-size 注释:

      kubectl annotate machinedeployment MD-NAME cluster.k8s.io/cluster-api-autoscaler-node-group-max-size="MAX-SIZE"
      

      其中,MAX-SIZE 是 AZ 的最大 MachineDeployment 节点计数,如上所述。

横向扩展集群

根据集群类型,可以通过两种方式横向扩展 TKG 集群:

  • 所有集群 使用 Tanzu CLI,如下所述
  • 基于类的工作负载集群 更改集群定义中的 replicas 设置,如下面的扩展基于类的集群部分中所述。

要使用 Tanzu CLI 横向扩展工作负载或独立管理集群,请运行 tanzu cluster scale 命令。

重要

在 Tanzu Kubernetes Grid 操作运行时,请勿更改上下文或编辑 .kube-tkg/config 文件。

  • 控制平面和工作节点:--controlplane-machine-count--worker-machine-count 选项分别设置新的控制平面和工作节点数。
  • 示例:

    • 要将集群扩展到 5 个控制平面节点和 10 个工作节点:

      tanzu cluster scale MY-CLUSTER --controlplane-machine-count 5 --worker-machine-count 10
      

      如果使用 --controlplane-machine-count 1 部署了集群,然后将其扩展到 3 个控制平面节点,Tanzu Kubernetes Grid 将在控制平面上自动启用堆叠的 HA。

    • 如果集群在除 default 以外的命名空间中运行,则必须包括 --namespace 选项:

      tanzu cluster scale MY-CLUSTER --controlplane-machine-count 5 --worker-machine-count 10 --namespace=MY-NAMESPACE
      
  • 具有独立管理集群的 vSphere:在部署了独立管理集群的 vSphere 上更改集群的节点计数后,必须预留或释放任何添加或移除的节点的 IP 地址的 DHCP 预留。要手动更改这些预留,请参见配置节点 DHCP 预留和端点 DNS 记录(仅限 vSphere)。有关如何配置 DHCP 预留的说明,请参见 DHCP 服务器文档。

  • vSphere with Supervisor 集群vSphere with Tanzu 中运行的集群上,只能运行 1 个控制平面节点或 3 个控制平面节点。您可以将控制平面节点数从 1 纵向扩展到 3,但无法将该数值从 3 缩减为 1。

纵向扩展集群

纵向扩展工作负载集群的过程取决于集群类型。

TKC 和基于计划的集群

按照《集群 API 手册》中的更新基础架构计算机模板过程进行操作,此过程将更改集群的计算机模板。

该过程将使用 kubectl get 命令下载集群的现有计算机模板,您可以按以下方式构建该命令:

kubectl get MACHINE-TEMPLATE-TYPE MACHINE-TEMPLATE-NAME -o yaml

其中:

  • MACHINE-TEMPLATE-TYPE 为:
    • vSphere 上的 VsphereMachineTemplate
    • Amazon Web Services (AWS) 上的 AWSMachineTemplate
    • Azure上的 AzureMachineTemplate
  • MACHINE-TEMPLATE-NAME 是要扩展的集群节点的计算机模板的名称,其格式如下所示:
    • 控制平面节点的 CLUSTER-NAME-control-plane
    • 工作节点的 CLUSTER-NAME-worker

例如:

kubectl get VsphereMachineTemplate monitoring-cluster-worker -o yaml

基于类的集群

要纵向扩展基于类的集群,请更改集群定义中的 machine 设置,如下面的扩展基于类的集群中所述。

扩展基于类的集群

要使用基于类的集群的 topology 配置横向或纵向扩展基于类的集群:

  1. kubectl 设置为管理集群的上下文,例如:

    kubectl config use-context management-cluster@admin
    
  2. 运行 kubectl edit cluster CLUSTER-NAME 并编辑其 topology 块中 controlPlaneworker 下的设置。

    要横向扩展,请更改 replicas 设置。- 要纵向扩展,请更改 machine 下的设置。

    例如:

    - name: controlPlane
      value:
        replicas: 3
        machine:
          diskGiB: 20
          memoryMiB: 8192
          numCPUs: 4
    - name: worker
      value:
        replicas: 5
        machine:
          diskGiB: 20
          memoryMiB: 8192
          numCPUs: 4
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon