請按照以下指示,使用 Kubectl 安裝和設定 Cluster Autoscaler 套件。
需求
- 最低 vSphere 版本為 vSphere 8 U3
- vSphere 8 的最低 TKr 版本為 TKr 1.27.x
- TKr 的次要版本和 Cluster Autoscaler 套件的次要版本必須相符
設定 vSphere 命名空間
完成佈建 TKG 叢集的下列必要條件工作。
- 安裝或將您的環境更新到 vSphere 8 U3 和適用於 vSphere 8 的 TKr 1.27.x
- 使用最新的 Tanzu Kubernetes 版本 建立或更新內容程式庫。請參閱管理用於 TKG 服務 叢集的 Kubernetes 版本。
- 建立並設定 vSphere 命名空間 以便主控 TKG 叢集。請參閱設定 vSphere 命名空間 以便託管 TKG 服務 叢集。
- 安裝 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/
- 執行
kubectl
和kubectl vsphere
以確認安裝。
使用 Autoscaler 註解建立 TKG 叢集
按照指示建立 TKG 叢集。如需其他指導,請參閱使用 Kubectl 佈建 TKG 叢集的工作流程。
若要使用 Autoscaler,您必須根據此處提供的叢集規格範例設定帶有 autoscaler 標籤註解的叢集。與一般叢集佈建不同,您不會對 worker 節點複本的數目進行硬式編碼。Kubernetes 根據 autoscaler 的最小和最大大小註解內建了複本的預設邏輯。由於這是新的叢集,因此使用最小大小建立叢集。如需詳細資訊,請參閱https://cluster-api.sigs.k8s.io/tasks/automated-machine-management/autoscaling。
- 使用 kubectl 對 主管 進行驗證。
kubectl vsphere login --server=SUPERVISOR-CONTROL-PLANE-IP-ADDRESS-or-FQDN --vsphere-username USERNAME
- 將內容切換到將主控叢集的目標 vSphere 命名空間。
kubectl config use-context tkgs-cluster-namespace
- 列出 vSphere 命名空間 中可用的虛擬機器類別。
您只能使用已繫結到目標 vSphere 命名空間 的虛擬機器類別。請參閱對 TKG 服務 叢集使用虛擬機器類別。
- 列出可用的持續性磁碟區儲存區類別。
kubectl describe namespace VSPHERE-NAMESPACE-NAME
命令將傳回有關 vSphere 命名空間 的詳細資料,包括儲存區類別。命令
kubectl describe storageclasses
還會傳回可用的儲存區類別,但需要 vSphere 管理員權限。 - 列出可用的 Tanzu Kubernetes 版本。
kubectl get tkr
此命令將傳回此 vSphere 命名空間 中可用的 TKr 及其相容性。請參閱管理用於 TKG 服務 叢集的 Kubernetes 版本。
- 使用您收集的資訊來編寫 TKG 叢集規格 YAML 檔案,其中包含所需的 Cluster Autoscaler 組態。
- 對 worker 節點集區使用
*-min-size
個和*-max-size
個註解,在此範例中,3 表示可以調整的最小 worker 節點數,5 表示可以調整的最大 worker 節點數。依預設,將建立具有 3 個 worker 節點的叢集。 - 為 TKr 和 Autoscaler 套件使用符合的次要版本。
- 使用的叢集
metadata.name
和metadata.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
- 對 worker 節點集區使用
- 套用叢集規格。
kubectl apply -f cc-autoscaler.yaml
- 確認叢集建立。
kubectl get cluster,vm
- 確認叢集節點版本。
kubectl get node
在 TKG 叢集上安裝套件管理程式
- 登入佈建的 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
- 安裝 Carvel imgpkg 工具。
wget -O- https://carvel.dev/install.sh > install.sh sudo bash install.sh
- 執行
imgpkg version
以確認安裝。 - 檢查套件存放庫版本。
imgpkg tag list -i projects.registry.vmware.com/tkg/packages/standard/repo
- 安裝套件存放庫。相應地更新存放庫版本。
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
- 驗證套件存放庫。
kubectl get packagerepository -A NAMESPACE NAME AGE DESCRIPTION tkg-system tanzu-standard 2m22s Reconcile succeeded
- 確認 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 套件
kube-system
命名空間中作為部署安裝叢集 Cluster Autoscaler。
- 建立
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
- 可以透過使用適用於您環境的適當值變更規格的
- 安裝 Cluster Autoscaler 套件。
kubectl apply -f autoscaler.yaml
- 確認 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
- 確認 Autoscaler 部署。
kubectl get pods -n kube-system | grep autoscaler
cluster-autoscaler-798b65bd9f-bht8n 1/1 Running 0 2m
測試叢集自動調整
若要測試叢集自動調整功能,請部署應用程式,增加複本數,並確認已擴充額外的 worker 節點以處理負載。
請參閱測試叢集 Autoscaler。
升級自動調整的叢集
若要升級自動調整的叢集,請暫停 Autoscaler 套件。