参阅以下说明,以使用 kubectl 安装并配置 Cluster Autoscaler 软件包。

要求

请遵循以下要求。
  • 最低 vSphere 版本为 vSphere 8 U3
  • vSphere 8 的最低 TKr 版本为 TKr 1.27.x
  • TKr 的次要版本和 Cluster Autoscaler 软件包的次要版本必须匹配
注意: Autoscaler 软件包次要版本与 TKr 次要版本之间存在一对一关系。例如,如果使用的是 TKr 1.27.11,则应安装 v1.27.2 的 Autoscaler。如果版本不匹配,软件包协调将失败。

配置 vSphere 命名空间

完成置备 TKG 集群的以下必备条件任务。

  1. 将您的环境安装或更新到 vSphere 8 U3 和适用于 vSphere 8 的 TKr 1.27.x。
  2. 使用最新的 Tanzu Kubernetes 版本 创建或更新内容库。请参见管理用于 TKG 服务 集群的 Kubernetes 版本
  3. 创建并配置用于托管 TKG 集群的 vSphere 命名空间。请参见配置 vSphere 命名空间 以便托管 TKG 服务 集群
  4. 安装 适用于 vSphere 的 Kubernetes CLI 工具

    以下示例可用于从命令行安装工具。有关其他指导,请参见安装 适用于 vSphere 的 Kubernetes CLI 工具

    curl -LOk https://${SUPERVISOR_IP-or-FQDN}/wcp/plugin/linux-amd64/vsphere-plugin.zip
    unzip vsphere-plugin.zip
    mv -v bin/* /usr/local/bin/
  5. 运行 kubectlkubectl vsphere 以验证安装。

使用 Autoscaler 注释创建 TKG 集群

按照说明创建 TKG 集群。有关其他指导,请参见使用 Kubectl 置备 TKG 集群的工作流

要使用 Autoscaler,您必须按此处提供的集群规范示例中的说明为集群配置 Autoscaler 标签注释。与常规集群置备不同,您不会对工作节点副本的数量进行硬编码。Kubernetes 具有基于 Autoscaler 最小和最大大小注释的副本的内置默认逻辑。由于这是新的集群,因此使用最小大小创建集群。有关详细信息,请参见https://cluster-api.sigs.k8s.io/tasks/automated-machine-management/autoscaling

  1. 使用 kubectl 对 主管 进行身份验证。
    kubectl vsphere login --server=SUPERVISOR-CONTROL-PLANE-IP-ADDRESS-or-FQDN --vsphere-username USERNAME
  2. 将上下文切换到将托管集群的目标 vSphere 命名空间
    kubectl config use-context tkgs-cluster-namespace
  3. 列出 vSphere 命名空间 中可用的虚拟机类。

    只能使用绑定到目标 vSphere 命名空间 的虚拟机类。请参见对 TKG 服务 集群使用虚拟机类

  4. 列出可用的持久卷存储类。
    kubectl describe namespace VSPHERE-NAMESPACE-NAME

    命令将返回有关 vSphere 命名空间 的详细信息,包括存储类。命令 kubectl describe storageclasses 还会返回可用的存储类,但需要 vSphere 管理员权限。

  5. 列出可用的 Tanzu Kubernetes 版本
    kubectl get tkr

    此命令将返回此 vSphere 命名空间 中可用的 TKr 及其兼容性。请参见管理用于 TKG 服务 集群的 Kubernetes 版本

  6. 使用您收集的信息来编写 TKG 集群规范 YAML 文件,其中包含所需的 Cluster Autoscaler 配置。
    • 对工作节点池使用 *-min-size 个和 *-max-size 个注释,在此示例中,3 表示最小数量,5 表示可以扩展的最大工作节点数。默认情况下,将创建具有 3 个工作节点的集群。
    • 为 TKr 和 Autoscaler 软件包使用匹配的次要版本。
    • 使用的集群 metadata.namemetadata.namespace 值与 Autoscaler 软件包默认值一致。如果在集群规范中更改这些值,则需要在 autoscaler-data-values 中修改这些值(见下文)。
    #cc-autoscaler.yaml
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
     name: gc1
     namespace: cluster
    spec:
     clusterNetwork:
       pods:
         cidrBlocks:
         - 192.0.2.0/16
       serviceDomain: cluster.local
       services:
         cidrBlocks:
         - 198.51.100.0/12
     topology:
       class: tanzukubernetescluster
       controlPlane:
         metadata: {}
         replicas: 3
       variables:
       - name: storageClasses
         value:
         - wcpglobal-storage-profile
       - name: vmClass
         value: guaranteed-medium
       - name: storageClass
         value: wcpglobal-storage-profile
       #minor versions must match
       version: v1.27.11---vmware.1-fips.1-tkg.2
       workers:
         machineDeployments:
         - class: node-pool
           metadata:
             annotations:
               cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size: "3"
               cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size: "5"
           name: np-1
  7. 应用集群规范。
    kubectl apply -f cc-autoscaler.yaml
  8. 验证集群创建。
    kubectl get cluster,vm
  9. 验证集群节点版本。
    kubectl get node

在 TKG 集群上安装软件包管理器

置备 TKG 集群后,在集群上安装软件包管理器并设置软件包存储库。
  1. 登录到置备的 TKG 集群。
    kubectl vsphere login --server=SUPERVISOR-CONTROL-PLANE-IP-ADDRESS-or-FQDN \
    --vsphere-username USERNAME \
    --tanzu-kubernetes-cluster-name CLUSTER-NAME \
    --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
  2. 安装 Carvel imgpkg 工具。
    wget -O- https://carvel.dev/install.sh > install.sh
    sudo bash install.sh
  3. 运行 imgpkg version 以验证安装。
  4. 检查软件包存储库版本。
    imgpkg tag list -i projects.registry.vmware.com/tkg/packages/standard/repo
  5. 安装软件包存储库。相应地更新存储库版本。
    apiVersion: packaging.carvel.dev/v1alpha1
    kind: PackageRepository
    metadata:  
      name: tanzu-standard  
      namespace: tkg-system
    spec:  
      fetch:    
        imgpkgBundle:      
          image: projects.registry.vmware.com/tkg/packages/standard/repo:v2024.4.12
  6. 确认软件包存储库。
    kubectl get packagerepository -A
    NAMESPACE    NAME             AGE     DESCRIPTION
    tkg-system   tanzu-standard   2m22s   Reconcile succeeded
  7. 验证 Cluster Autoscaler 软件包是否存在。
    kubectl get package
    NAME                                                                  PACKAGEMETADATA NAME                             VERSION                 AGE
    cert-manager.tanzu.vmware.com.1.7.2+vmware.3-tkg.1                    cert-manager.tanzu.vmware.com                    1.7.2+vmware.3-tkg.1    5s
    cert-manager.tanzu.vmware.com.1.7.2+vmware.3-tkg.3                    cert-manager.tanzu.vmware.com                    1.7.2+vmware.3-tkg.3    5s
    cluster-autoscaler.tanzu.vmware.com.1.25.1+vmware.1-tkg.3             cluster-autoscaler.tanzu.vmware.com              1.25.1+vmware.1-tkg.3   5s
    cluster-autoscaler.tanzu.vmware.com.1.26.2+vmware.1-tkg.3             cluster-autoscaler.tanzu.vmware.com              1.26.2+vmware.1-tkg.3   5s
    cluster-autoscaler.tanzu.vmware.com.1.27.2+vmware.1-tkg.3             cluster-autoscaler.tanzu.vmware.com              1.27.2+vmware.1-tkg.3   5s
    contour.tanzu.vmware.com.1.26.2+vmware.1-tkg.1                        contour.tanzu.vmware.com                         1.26.2+vmware.1-tkg.1   5s
    ...

安装 Autoscaler 软件包

现在,可以安装 Cluster Autoscaler 软件包。将在 kube-system 命名空间中作为部署安装 Cluster Autoscaler。
  1. 创建 autoscaler.yaml 配置文件。
    • 可以通过使用适用于您的环境的相应值更改规范的 autoscaler-data-values 部分来自定义 Autoscaler。
    #autoscaler.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: autoscaler-sa
      namespace: tkg-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: autoscaler-role-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: autoscaler-sa
        namespace: tkg-system
    ---
    apiVersion: packaging.carvel.dev/v1alpha1
    kind: PackageInstall
    metadata:
      name: autoscaler
      namespace: tkg-system
    spec:
      serviceAccountName: autoscaler-sa
      packageRef:
        refName: cluster-autoscaler.tanzu.vmware.com
        versionSelection:
          constraints: 1.27.2+vmware.1-tkg.3
      values:
      - secretRef:
          name: autoscaler-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: autoscaler-data-values
      namespace: tkg-system
    stringData:
      values.yml: |
        ---
        arguments:
          ignoreDaemonsetsUtilization: true
          maxNodeProvisionTime: 15m
          maxNodesTotal: 0
          metricsPort: 8085
          scaleDownDelayAfterAdd: 10m
          scaleDownDelayAfterDelete: 10s
          scaleDownDelayAfterFailure: 3m
          scaleDownUnneededTime: 10m
        clusterConfig:
          clusterName: "gc1"
          clusterNamespace: "cluster"
        paused: false
  2. 安装 Cluster Autoscaler 软件包。
    kubectl apply -f autoscaler.yaml
  3. 验证 Autoscaler 软件包的安装。
    kubectl get pkgi -A | grep autoscaler
    预期结果:
    tkg-system autoscaler cluster-autoscaler.tanzu.vmware.com 1.27.2+vmware.1-tkg.3 Reconcile succeeded 3m52s
  4. 验证 Autoscaler 部署。
    kubectl get pods -n kube-system | grep autoscaler
    cluster-autoscaler-798b65bd9f-bht8n 1/1 Running 0 2m

测试集群自动扩展

要测试集群自动扩展,请部署应用程序,增加副本数,并验证是否已扩展额外的工作节点以处理负载。

请参见测试 Cluster Autoscaler

升级自动扩展的集群

要升级自动扩展的集群,请暂停 Autoscaler 软件包。

请参见使用 Kubectl 升级自动扩展的集群