kubectl を使用してクラスタ自動スケーラ パッケージをインストールおよび構成するには、次の手順を参照してください。

要件

次の要件を満たす必要があります。
  • vSphere の最小バージョンは、vSphere 8 U3
  • vSphere 8 の場合、TKr の最小バージョンは TKr 1.27.x
  • TKr のマイナー バージョンとクラスタ自動スケーラ パッケージのマイナー バージョンが一致
注目: 自動スケーラ パッケージのマイナー バージョンと TKr のマイナー バージョンの間には、1 対 1 の関係があります。たとえば、TKr 1.27.11 を使用している場合は、自動スケーラの v1.27.2 をインストールする必要があります。バージョンが一致しない場合は、パッケージの調整が失敗します。

vSphere 名前空間 の構成

前提条件となる次のタスクを実行して、TKG クラスタをプロビジョニングします。

  1. 環境をインストールするか、vSphere 8 U3 および vSphere 8 用の TKr 1.27.x に更新します。
  2. コンテンツ ライブラリを最新の Tanzu Kubernetes リリース で作成またはアップデートします。TKG サービス クラスタ用 Kubernetes リリースの管理を参照してください。
  3. TKG クラスタをホストするための vSphere 名前空間を作成して構成します。TKG サービス クラスタをホストするための vSphere 名前空間 の構成を参照してください。
  4. vSphere 向け Kubernetes CLI Tools をインストールします。

    次の例を使用して、コマンド ラインからツールをインストールできます。その他のガイダンスについては、vSphere 向け Kubernetes CLI Tools のインストールを参照してください。

    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 を実行してインストールを確認します。

自動スケーラの注釈を使用した TKG クラスタの作成

次の手順に従って、TKG クラスタを作成します。その他のガイダンスについては、Kubectl を使用して TKG クラスタをプロビジョニングするためのワークフローを参照してください。

自動スケーラを使用するには、ここで説明するクラスタ仕様の例に示すように、自動スケーラ ラベルの注釈を使用してクラスタを構成する必要があります。通常のクラスタ プロビジョニングとは異なり、ワーカー ノード レプリカの数はハードコーディングされません。Kubernetes には、自動スケーラの最小サイズと最大サイズの注釈に基づくレプリカのデフォルト ロジックが組み込まれています。これは新しいクラスタであるため、クラスタの作成には最小サイズが使用されます。詳細については、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 ファイルを作成します。
    • ワーカー ノード プールの *-min-size 注釈と *-max-size 注釈を使用します。この例では、拡張可能なワーカー ノードの最小数が 3、最大数が 5 です。デフォルトでは、クラスタは 3 つのワーカー ノードで作成されます。
    • TKr と自動スケーラ パッケージには、一致するマイナー バージョンを使用します。
    • 使用されるクラスタの metadata.namemetadata.namespace の値は、自動スケーラ パッケージのデフォルト値と一致しています。クラスタ仕様でこれらの値を変更する場合は、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. クラスタ自動スケーラ パッケージの有無を確認します。
    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
    ...

自動スケーラ パッケージのインストール

これで、クラスタ自動スケーラ パッケージをインストールできます。クラスタ自動スケーラは、 kube-system 名前空間にデプロイとしてインストールされます。
  1. autoscaler.yaml 構成ファイルを作成します。
    • 環境に適した値を使用して仕様の autoscaler-data-values セクションを変更することで、自動スケーラをカスタマイズできます。
    #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. クラスタ自動スケーラ パッケージをインストールします。
    kubectl apply -f autoscaler.yaml
  3. 自動スケーラ パッケージのインストールを確認します。
    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. 自動スケーラのデプロイを確認します。
    kubectl get pods -n kube-system | grep autoscaler
    cluster-autoscaler-798b65bd9f-bht8n 1/1 Running 0 2m

クラスタの自動スケーリングのテスト

クラスタの自動スケーリングをテストするには、アプリケーションをデプロイし、レプリカの数を増やして、負荷を処理するための追加のワーカー ノードがスケール アウトされていることを確認します。

クラスタ自動スケーラのテストを参照してください。

自動スケーリングされたクラスタのアップグレード

自動スケーリングされたクラスタをアップグレードするには、自動スケーラ パッケージを一時停止します。

Kubectl を使用した自動スケール クラスタのアップグレードを参照してください。