vSphere 上的單節點叢集 (技術預覽)

Tanzu Kubernetes Grid (TKG) 支援單節點叢集。單節點叢集是工作負載叢集,其中主控的工作負載與控制平面基礎結構一起在單一 ESXi 主機上執行。

若要進一步最小化單節點叢集的磁碟使用量,您可以從 tiny Tanzu Kubernetes 版本 (Tkr) 建立該叢集,而該版本的基礎作業系統有 Photon 或 Ubuntu Tiny OVA。此類叢集稱為最小單節點叢集。

單節點叢集是在 vSphere 8 上執行且由獨立管理叢集部署的以類別為基礎的工作負載叢集。

附註

此功能處於不受支援的技術預覽狀態;請參閱 TKG 功能狀態

使用案例包括:

  • 單節點叢集
    • 實驗性開發和測試環境
  • 最小的單節點叢集
    • 資源受限的主機環境,例如遠端邊緣行動通訊基地台和其他邊緣位置

必要條件

  • vSphere 8 帳戶
  • 在 vSphere 8 上執行 TKG v2.1.x 的 TKG 獨立管理叢集
  • 安裝了以下工具的啟動機器,如安裝 Tanzu CLI 和其他工具以用於獨立管理叢集中所述:

    • Tanzu CLI
    • kubectl
    • imgpkg
    • (選用) yq v4.11.2
  • 在 Tanzu CLI 中啟用了 single-node-clusters 設定:

    tanzu config set features.cluster.single-node-clusters true
    

建立單節點叢集

若要在使用標準 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 OVAConfigMap 名稱以及其他做了類似變更的字串。

    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
        
      • 編輯資訊清單,以在 metadata 下新增設定 namespace: "tkg-system"

        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、叢集啟動程序範本和作業系統映像物件是否都已建立。例如:

      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. 將 Tiny OVA 匯入您的 vSphere 環境,並將其轉換為虛擬機器範本,如將基礎映像範本匯入到 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. 使用參考上述變數的 ClusterSecret 物件規格建立資訊清單 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.version 應為 v1.24.9+vmware.1-tiny.2
    3. (選用) 若要將叢集設定為使用 Calico 作為 CNI 而非預設的 Antrea 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