vSphere 上の単一ノード クラスタ(テクニカル プレビュー)

Tanzu Kubernetes Grid (TKG) は、単一ノード クラスタをサポートします。単一ノード クラスタは、ホストされたワークロードが、単一の ESXi ホスト上で制御プレーン インフラストラクチャと一緒に実行されるワークロード クラスタです。

単一ノード クラスタの占有量をさらに最小限に抑えるには、tiny Tanzu Kubernetes リリース (TKr) から作成します。これは、基本 OS に Photon または Ubuntu の Tiny OVA を持っています。このようなクラスタは、「最小」単一ノード クラスタと呼ばれます。

単一ノード クラスタは、vSphere 8 で実行され、スタンドアローン管理クラスタによって展開されるクラスベースのワークロード クラスタです。

この機能は、サポートされていない「テクニカル プレビュー」状態です。「TKG の機能状態」を参照してください。

ユースケースは次のとおりです。

  • 単一ノード クラスタ
    • 試験的な開発環境とテスト環境
  • 最小単一ノード クラスタ
    • 離れているエッジ セル サイトや他のエッジの場所など、リソースに制約のあるホスト環境

前提条件

単一ノード クラスタの作成

標準の Photon または Ubuntu TKr を使用する vSphere に単一ノード ワークロード クラスタを作成するには、次の手順を実行します。

  1. スタンドアローン管理クラスタを使用する vSphere の構成ファイル」の説明に従って、ワークロード クラスタのフラット構成ファイルを作成します。

  2. オブジェクト仕様の作成」で説明されているように、--dry-run フラグを使用して tanzu cluster create を実行し、フラット構成ファイルを Kubernetes スタイルの Cluster オブジェクト仕様に変換します。

  3. 次の設定を含めるように Cluster オブジェクト仕様を編集します。

    • topology.controlPlane を次のようにします。

      replicas: 1
      
    • topology.workers ブロックがある場合は削除します。

    • topology.variables を次のようにします。

      - name: controlPlaneTaint
        value: false
      
  4. オブジェクト仕様からのクラスベースのクラスタの作成」で説明されているように、変更した Cluster オブジェクト仕様を使用して、tanzu cluster create を実行します。

最小単一ノード クラスタの作成

占有量を最小限に抑えるため、tiny Tanzu Kubernetes リリース (TKr) を使用する単一ノード ワークロード クラスタを vSphere に作成するには、次の手順を実行します。

  1. vSphere の ClusterClass 定義にパッチを適用して、管理クラスタが、標準の非単一ノード クラスタを作成するときに、tiny TKr を使用しないようにします。

    kubectl annotate --overwrite clusterclass tkg-vsphere-default-v1.0.0 run.tanzu.vmware.com/resolve-tkr='!tkr.tanzu.vmware.com/tiny'
    
  2. 管理クラスタで tiny TKr をインストールします。

    1. kubectl のコンテキストを管理クラスタに設定します。

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

      ここで、MY-MGMT-CLUSTER は管理クラスタの名前です。

    2. 次のコードを使用して、tiny TKr の ConfigMap 定義ファイル tiny-tkr-cm.yaml を作成します。

      apiVersion: v1
      data:
        tkrVersions: '["v1.24.10+vmware.1-tiny.1-tkg.1"]'
      kind: ConfigMap
      metadata:
        name: tkg-compatibility-versions-v1.24.10---vmware.1-tiny.1-tkg.1
        namespace: tkg-system
        labels:
          run.tanzu.vmware.com/additional-compatible-tkrs: ""
      

      TKG v2.1.0 の場合は、ここでの Kubernetes v1.24.9 のバージョンを以下のバージョンに置き換えます。TKr v1.24.9+vmware.1-tiny.2-tkg.1、OVA v1.24.9 Tiny OVA、および ConfigMap の名前と他の文字列も同様に変更します。

    3. TKr ConfigMap を適用します。

      kubectl apply -f tiny-tkr-cm.yaml
      
    4. TKr パッケージ マニフェストとメタデータを /tmp/ ディレクトリにダウンロードします。

      imgpkg pull -b projects.registry.vmware.com/tkg/tkr-repository-vsphere-edge:v1.24.10_vmware.1-tiny.1-tkg.1 -o /tmp/tkr-repository-vsphere-edge
      
    5. TKr パッケージ マニフェストで、次のいずれかの方法で metadata.namespace 設定を "tkg-system" に変更します。

      • 次の yq コマンドを実行します。

        yq  -i e '.metadata.namespace = "tkg-system"' /tmp/tkr-repository-vsphere-edge/packages/tkr-vsphere-edge.tanzu.vmware.com/1.24.10+vmware.1-tiny.1-tkg.1.yml
        
      • マニフェストを編集して、設定 namespace: "tkg-system"metadata に追加します。

        metadata:
          [...]
          namespace: "tkg-system"
        
    6. TKr マニフェストを適用します。

      kubectl apply -f /tmp/tkr-repository-vsphere-edge/packages/tkr-vsphere-edge.tanzu.vmware.com/1.24.10+vmware.1-tiny.1-tkg.1.yml
      
    7. 数分後に、kubectl get を実行して、tiny TKr、クラスタ ブートストラップ テンプレート、および OS イメージ オブジェクトがすべて作成されたことを確認します。例:

      kubectl get tkr,cbt,osimage -A | grep -i tiny
      

      出力は次のようになります。

      v1.24.10---vmware.1-tiny.1-tkg.1   v1.24.10+vmware.1-tiny.1-tkg.1   True    True         16m
      tkg-system   v1.24.10---vmware.1-tiny.1-tkg.1   antrea.tanzu.vmware.com.1.7.2+vmware.1-tkg.1-advanced        vsphere-csi.tanzu.vmware.com.2.6.2+vmware.2-tkg.1        vsphere-cpi.tanzu.vmware.com.1.24.3+vmware.1-tkg.1        kapp-controller.tanzu.vmware.com.0.41.5+vmware.1-tkg.1
      v1.24.10---vmware.1-tiny.1-  1.b3                       v1.24.10+vmware.1-tiny.1   ubuntu    2004         amd64   ova                 16m
      v1.24.10---vmware.1-tiny.1-tkg.1-ac20b3                       v1.24.10+vmware.1-tiny.1   photon    3            amd64   ova                 16m
      
  3. OVA を準備します。

    1. Tanzu Kubernetes Grid のダウンロード ページに移動し、Customer Connect にログインします。

    2. VMware Tanzu Kubernetes Grid の行で、[ダウンロードに移動 (Go to Downloads)] をクリックします。

    3. バージョン 2.x を選択し、[VMware Tanzu Kubernetes Grid] > [ダウンロードに移動 (GO TO DOWNLOADS)] の順にクリックします。

    4. Tiny TKG OVA(テクニカル プレビュー)で、単一ノード クラスタに使用する Tiny OVA をダウンロードします。

      • Photon v3 Kubernetes v1.24.10 Tiny OVA(テクニカル プレビュー)

      • Ubuntu 2004 Kubernetes v1.24.10 Tiny OVA(テクニカル プレビュー)

    5. 基本イメージ テンプレートの vSphere へのインポート」で説明されているように、Tiny OVA を vSphere 環境にインポートして、仮想マシン テンプレートに変換します。

  4. 単一ノード ワークロード クラスタを作成します。

    単一ノード クラスタの場合、「ワークロード クラスタの作成」で説明するように、tanzu cluster create を使用してフラット クラスタ構成ファイルを Kubernetes スタイルのオブジェクト仕様に変換することはできません。

    1. この例で設定するように、環境変数を設定します。

      export CLUSTER_NAME='workload-snc'
      export CLUSTER_NAMESPACE='default'
      export CLUSTER_CIDR='100.96.0.0/11'
      export SERVICE_CIDR='100.64.0.0/13'
      export VSPHERE_CONTROL_PLANE_ENDPOINT=10.185.11.134
      export VSPHERE_SERVER=10.185.12.154
      export VSPHERE_USERNAME='[email protected]'
      export VSPHERE_PASSWORD=<encoded:QWRtaW4hMjM=>
      export VSPHERE_DATACENTER='/dc0'
      export VSPHERE_DATASTORE='/dc0/datastore/sharedVmfs-0'
      export VSPHERE_FOLDER='/dc0/vm'
      export VSPHERE_NETWORK='/dc0/network/VM Network'
      export VSPHERE_RESOURCE_POOL='/dc0/host/cluster0/Resources'
      export VSPHERE_SSH_AUTHORIZED_KEY=ssh-rsa AAAAB3[...]tyaw== [email protected]
      export VSPHERE_TLS_THUMBPRINT=47:F5:83:8E:5D:36:[...]:72:5A:89:7D:29:E5:DA
      export VSPHERE_CONTROL_PLANE_NUM_CPUS='4'
      export VSPHERE_CONTROL_PLANE_MEM_MIB='4096'
      export VSPHERE_CONTROL_PLANE_DISK_GIB='20'
      export TKG_CUSTOM_IMAGE_REPOSITORY='projects.registry.vmware.com/tkg'
      export OS_NAME='photon'
      export TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE="LS0tL[...]0tLQo="
      
    2. 上記の変数を参照する Cluster および Secret のオブジェクト仕様を使用して、マニフェスト vsphere-snc.yaml を作成します。

      apiVersion: cluster.x-k8s.io/v1beta1
      kind: Cluster
      metadata:
        annotations:
          tkg.tanzu.vmware.com/cluster-controlplane-endpoint: ${VSPHERE_CONTROL_PLANE_ENDPOINT}
          run.tanzu.vmware.com/resolve-tkr: 'tkr.tanzu.vmware.com/tiny'
        labels:
          tkg.tanzu.vmware.com/cluster-name: ${CLUSTER_NAME}
        name: ${CLUSTER_NAME}
        namespace: ${CLUSTER_NAMESPACE}
      spec:
        clusterNetwork:
          pods:
            cidrBlocks:
            - ${CLUSTER_CIDR}
          services:
            cidrBlocks:
            - ${SERVICE_CIDR}
        topology:
          class: tkg-vsphere-default-v1.0.0
          controlPlane:
            metadata:
              annotations:
                run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=${OS_NAME}
            replicas: 1
          variables:
          - name: controlPlaneTaint
            value: false
          - name: auditLogging
            value:
              enabled: false
          - name: apiServerEndpoint
            value: ${VSPHERE_CONTROL_PLANE_ENDPOINT}
          - name: aviAPIServerHAProvider
            value: false
          - name: imageRepository
            value:
              host: ${TKG_CUSTOM_IMAGE_REPOSITORY}
          - name: trust
            value:
              additionalTrustedCAs:
              - data: ${TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE}
                name: imageRepository
          - name: vcenter
            value:
              cloneMode: fullClone
              datacenter: ${VSPHERE_DATACENTER}
              datastore: ${VSPHERE_DATASTORE}
              folder: ${VSPHERE_FOLDER}
              network: ${VSPHERE_NETWORK}
              resourcePool: ${VSPHERE_RESOURCE_POOL}
              server: ${VSPHERE_SERVER}
              storagePolicyID: ""
              tlsThumbprint: ${VSPHERE_TLS_THUMBPRINT}
          - name: user
            value:
              sshAuthorizedKeys:
              - ${VSPHERE_SSH_AUTHORIZED_KEY}
          - name: controlPlane
            value:
              machine:
                diskGiB: ${VSPHERE_CONTROL_PLANE_DISK_GIB}
                memoryMiB: ${VSPHERE_CONTROL_PLANE_MEM_MIB}
                numCPUs: ${VSPHERE_CONTROL_PLANE_NUM_CPUS}
          version: v1.24.10+vmware.1-tiny.1
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: ${CLUSTER_NAME}
        namespace: ${CLUSTER_NAMESPACE}
      stringData:
        password: ${VSPHERE_PASSWORD}
        username: ${VSPHERE_USERNAME}
      EOF
      

      次の点に注意してください。

      • run.tanzu.vmware.com/resolve-tkrmetadata.annotations 設定
      • controlPlaneTainttopology.variables 設定
      • topology.workers ブロックはなく、topology.controlPlane のみです。
      • TKG v2.1.0 の場合、topology.versionv1.24.9+vmware.1-tiny.2 になります。
    3. (オプション)デフォルトの Antrea CNI ではなく Calico を CNI として使用するようにクラスタを構成するには、「スーパーバイザーまたは単一ノードのクラスベースのワークロード クラスタの Calico CNI」にある、単一ノード クラスタ向けの手順に従ってください。

    4. Cluster オブジェクト マニフェストを適用します。

      tanzu cluster create -f vsphere-snc.yaml
      
    5. (TKG v2.1.0 のみ、オプション)クラスタにパーシステント ボリューム (PV) をプロビジョニングするには、vSphere StorageClass オブジェクトを作成します。

      これらの手順は、TKG v2.1.1 以降では必要ありません。

      1. マニフェスト vspherestorageclass.yaml を作成します。

        apiVersion: storage.k8s.io/v1
        kind: StorageClass
        metadata:
          annotations:
            storageclass.kubernetes.io/is-default-class: "true"
          name: default
        provisioner: csi.vsphere.vmware.com
        reclaimPolicy: Delete
        volumeBindingMode: Immediate
        allowVolumeExpansion: true
        
      2. StorageClass マニフェストを適用します。

        kubectl apply -f vspherestorageclass.yaml --kubeconfig=KUBECONFIG
        

        ここで、KUBECONFIG は単一ノード クラスタの kubeconfig です。

check-circle-line exclamation-circle-line close-line
Scroll to top icon