vSphere 上的叢集

以下幾節說明如何設定 Tanzu Kubernetes Grid (TKG) 工作負載叢集,以使用特定於具有獨立管理叢集的 vSphere 的功能。這些功能不能完全在叢集的平面組態檔或 Kubernetes 樣式的物件規格中設定。

如需如何使用組態檔和物件規格,在 vSphere 上設定工作負載叢集的相關資訊,請參閱:

使用自訂 OVA 映像部署叢集

如果您要將單一自訂 OVA 映像用於每一個 Kubernetes 版本,以將叢集部署在一個作業系統上,請將 OVA 匯入至 vSphere,然後在 tanzu cluster create 中使用 --tkr 選項來指定它。

不過,如果您要將多個自訂 OVA 映像用於相同的 Kubernetes 版本,則 --tkr 值不明確。當將 OVA 用於相同的 Kubernetes 版本時,會發生下列情況:

  • 具有不同的作業系統,例如,由 make build-node-ova-vsphere-ubuntu-1804make build-node-ova-vsphere-photon-3make build-node-ova-vsphere-rhel-7 建立的作業系統。
  • 具有名稱相同,但位於不同的 vCenter 資料夾中。

為了解決這種不明確現象,請先將 VSPHERE_TEMPLATE 選項設定為您要的 OVA 映像,然後再執行 tanzu cluster create

  • 如果 OVA 範本映像名稱是唯一的,請將 VSPHERE_TEMPLATE 設定成只有映像名稱。

  • 若有多個映像具有相同的名稱,請將 VSPHERE_TEMPLATE 設定成映像在 vCenter 中的完整詳細目錄路徑。此路徑遵循 /MY-DC/vm/MY-FOLDER-PATH/MY-IMAGE 形式,其中:

    • MY-DC 是包含 OVA 範本映像的資料中心。
    • MY-FOLDER-PATH 是從資料中心指向映像的路徑,如 vCenter 虛擬機器和範本 (VMs and Templates) 視圖中所示。
    • MY-IMAGE 是映像名稱。

    例如:

    VSPHERE_TEMPLATE: "/TKG_DC/vm/TKG_IMAGES/ubuntu-2004-kube-v1.29.9-vmware.1"
    

    您可以手動確定映像的完整 vCenter 詳細目錄路徑,也可以使用 govc CLI:

    1. 安裝 govc。有關安裝指示,請參閱 GitHub 上的 govmomi 存放庫。
    2. govc 設定環境變數,以存取 vCenter:
      • export GOVC_USERNAME=VCENTER-USERNAME
      • export GOVC_PASSWORD=VCENTER-PASSWORD
      • export GOVC_URL=VCENTER-URL
      • export GOVC_INSECURE=1
    3. 執行 govc find / -type m,並在輸出中尋找映像名稱,該輸出會依物件的完整詳細目錄路徑來列出物件。

如需有關自訂 OVA 映像的詳細資訊,請參閱建置機器映像

使用 CSI 的地區和區域標籤來部署叢集

您可以為工作負載叢集指定地區和區域,使其與設定給 vSphere CSI (雲端儲存區介面) 的地區和區域標籤整合在一起。對於跨多個區域的叢集,這可讓工作節點尋找並使用共用儲存區,即使這些節點是在沒有儲存區網繭的區域中執行,例如在電信無線電存取網路 (RAN) 中執行。

若要部署具有透過 vSphere CSI 啟用共用儲存區的地區和區域標籤的工作負載叢集,請執行下列動作:

  1. 在 vCenter Server 上建立標籤:

    1. 遵循建立和編輯標籤類別,在 vCenter Server 上建立標籤類別。例如,k8s-regionk8s-zone
    2. 遵循建立和編輯 vSphere 標籤,在資料中心內的地區和區域類別中建立標籤,如下表所示:

      類別 標籤
      k8s-zone zone-a
      zone-b
      zone-c
      k8s-region region-1

  2. 如資料表中所示,遵循指派或移除 vSphere 標籤,來建立叢集和資料中心的對應標籤。

    vSphere 物件 標籤
    datacenter region-1
    cluster1 zone-a
    cluster2 zone-b
    cluster3 zone-c
  3. 若要為 vSphere 工作負載叢集的 CSI 驅動程式,啟用自訂地區和區域,請將叢集組態檔中的變數 VSPHERE_REGIONVSPHERE_ZONE 設定成上述的標籤。例如:

    VSPHERE_REGION: region-1
    VSPHERE_ZONE: zone-a
    

    當 Tanzu CLI 使用這些變數集來建立工作負載叢集時,它會使用拓撲索引鍵 failure-domain.beta.kubernetes.io/zonefailure-domain.beta.kubernetes.io/region 來標記每個叢集節點。

  4. 執行 tanzu cluster create,以建立工作負載叢集,如建立以計劃為基礎的叢集或 TKC 叢集中所述。

  5. 建立叢集並將 kubectl 內容設定給叢集後,您可以執行下列其中一個動作,來檢查地區和區域標籤:

    • 執行 kubectl get nodes -L failure-domain.beta.kubernetes.io/zone -L failure-domain.beta.kubernetes.io/region,並確認輸出中會列出叢集節點。

    • 執行 kubectl get csinodes -o jsonpath='{range .items\[\*\]}{.metadata.name} {.spec}{"\\n"}{end}',並確認已在 vsphere-csi 上啟用該地區和區域。

如需有關設定 vSphere CSI 的詳細資訊,請參閱 vSphere CSI 驅動程式 - 使用拓撲的部署

不同 vSphere 帳戶上的叢集

Tanzu Kubernetes Grid 可以在多個目標平台帳戶上執行工作負載叢集,例如在不同的團隊之間分割雲端使用方式,或者將不同的安全設定檔套用至生產、暫存和開發工作負載。

若要將工作負載叢集部署到備用 vSphere 帳戶 (不同於用於部署其管理叢集的帳戶),請執行以下動作:

  1. kubectl 的內容設定為管理叢集:

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

    其中,MY-MGMT-CLUSTER 是管理叢集的名稱。

  2. 使用以下內容建立 secret.yaml 檔案:

    apiVersion: v1
    kind: Secret
    metadata:
      name: SECRET-NAME
      namespace: CAPV-MANAGER-NAMESPACE
    stringData:
      username: VSPHERE-USERNAME
      password: VSPHERE-PASSWORD
    
    

    其中:

    • SECRET-NAME 是分配給用戶端密碼的名稱。
    • CAPV-MANAGER-NAMESPACE 是執行 capv-manager 網繭的命名空間。預設值: capv-system
    • VSPHERE-USERNAMEVSPHERE-PASSWORD 是可存取備用 vSphere 帳戶的登入認證。
  3. 使用該檔案建立 Secret 物件:

    kubectl apply -f secret.yaml
    
  4. 使用以下內容建立 identity.yaml 檔案:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereClusterIdentity
    metadata:
      name: EXAMPLE-IDENTITY
    spec:
      secretName: SECRET-NAME
      allowedNamespaces:
        selector:
          matchLabels: {}
    

    其中:

    • EXAMPLE-IDENTITY 是用於 VSphereClusterIdentity 物件的名稱。
    • SECRET-NAME 是您在上面為用戶端密碼提供的名稱。
  5. 使用該檔案建立 VsphereClusterIdentity 物件:

    kubectl apply -f identity.yaml
    

管理叢集現在可以將工作負載叢集部署到備用帳戶。

若要將工作負載叢集部署到帳戶,請執行以下動作:

  1. 執行 tanzu cluster create --dry-run,以建立叢集資訊清單。

  2. 編輯資訊清單中的 VSphereCluster 定義,將其 VSphereClusterIdentity 物件的 spec.identityRef.name 值設定為您在上方建立的 EXAMPLE-IDENTITY

    ...
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereCluster
    metadata:
     name: new-workload-cluster
    spec:
     identityRef:
       kind: VSphereClusterIdentity
       name: EXAMPLE-IDENTITY
    ...
    
  3. 執行 kubectl apply -f my-cluster-manifest.yaml 以建立工作負載叢集。

建立工作負載叢集後,使用備用帳戶認證登入 vSphere,您應該會看到其正在執行。

如需詳細資訊,請參閱叢集 API 提供者 vSphere 存放庫中的身分識別管理

部署使用資料存放區叢集的叢集

附註

此功能的運作不如預期,如果將資料存放區叢集中的多個資料存放區標記為工作負載叢集儲存原則的基礎,則工作負載叢集僅使用其中一個資料存放區。

若要使工作負載叢集能夠使用資料存放區叢集而不是單一資料存放區,請設定以資料存放區叢集中的所有資料存放區為目標的儲存區原則,如下所示:

  1. 建立標籤並將其與相關資料存放區相關聯:

    1. 按照 vSphere 標籤中的程序進行操作,可在 vCenter Server 上建立標籤類別。確保類別將 Datastore 作為可關聯的物件類型。
    2. 按照 vSphere 標籤中的其他程序進行操作,在上一步中建立的類別中建立標籤,並將新標籤與屬於資料存放區叢集的所有資料存放區相關聯。
  2. 依照為以標籤為基礎的放置建立虛擬機器儲存區原則建立以標籤為基礎的儲存區原則。

  3. 在叢集組態檔中:

    • VSPHERE_STORAGE_POLICY_ID 設定為在上一個步驟中建立的儲存區原則的名稱。
    • 確保未設定 VSPHERE_DATASTOREVSPHERE_DATASTORE 設定將覆寫儲存區原則設定。

部署多重作業系統工作負載叢集

若要部署兼具 Windows 系統和 Linux 系統的工作節點的多重作業系統工作負載叢集,請建立自訂的 Windows 機器映像,部署 Windows 工作負載叢集,然後新增 Linux MachineDeployment,將僅適用於 Windows 的工作負載叢集轉換為多重作業系統叢集。

多重作業系統叢集可以主控 Windows 和 Linux 工作負載,同時在其所屬的工作節點上執行 Linux 系統的 TKG 元件。

  1. 依照 Windows 自訂機器映像中的所有程序建立 Windows 機器映像。
  2. 建立 YAML 檔案 (例如,win-osimage.yaml),以便在您建立 Windows 機器映像時,在管理叢集中新增指向範本的 OSImage。

    您可以使用以下的 YAML 檔範例。將 spec.image.ref.template 值變更為您建立的 Windows 範本的位置。此路徑特定於 vSphere 環境。

    apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: OSImage
    metadata:
     name: v1.25.7---vmware.2-tkg.1-windows
    spec:
     image:
       ref:
         template: /dc0/vm/windows-2019-kube-v1.25.7+vmware.2-tkg.1
         version: v1.25.7+vmware.2-tkg.1-windows
       type: ova
     kubernetesVersion: v1.25.7+vmware.2
     os:
       arch: amd64
       name: windows
       type: windows
       version: "2019"
    
  3. 執行 kubectl apply -f win-osimage.yaml 以新增 OSImage。

  4. 將 TKR 版本新增到 spec.osImages,以便成功進行 TKR 解析和 Webhook 驗證。使用以下命令,將 TKR 版本新增到 spec.osImages

    $ kubectl edit tkr v1.25.7---vmware.2-tkg.1
    apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: TanzuKubernetesRelease
    metadata:
      name: v1.25.7---vmware.2-tkg.1
    spec:
      bootstrapPackages:
      # Keep the other packages listed here.
      - name: tkg-windows.tanzu.vmware.com.0.29.0+vmware.1
      osImages:
      # Keep the other images listed here.
      - name: v1.25.7---vmware.2-tkg.1-windows
    

    在 TKR 上,在 spec.bootstrapPackages 中新增一個項目,來啟用 tkg-windows 套件。可以使用 tanzu package available list tkg-windows.tanzu.vmware.com,在官方存放庫中找到該套件。以下是有效 TKR 的範例。

  5. 執行下列命令,以建立以類別為基礎的叢集物件規格:

    tanzu cluster create my-cluster --file my-cluster-config.yaml --dry-run > my-cluster-spec.yaml
    

    其中: * WINDOWS-CLUSTER 是 Windows 叢集的名稱。* CLUSTER-CONFIG 是組態檔的名稱。

  6. 將新的 tkg-worker 機器部署類別新增到 my-cluster-spec.yaml 中的叢集物件。請確定註解無誤,如此 TKG 才可以搜尋 OSImage 物件。

    您可以將新的 tkg-worker 規格,新增到類似以下範例的 spec.workers.machineDeployments

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      name: WINDOWS-CLUSTER
    spec:
      workers:
        machineDeployments:
        - class: tkg-worker
            metadata:
            annotations:
                run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=photon
            name: md-0-l
            replicas: 1
        - class: tkg-worker-windows
            metadata:
            annotations:
                run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=windows
            name: md-0
            replicas: 1
    
  7. 透過執行下列命令來部署多重作業系統叢集:

    tanzu cluster create my-cluster -f my-cluster-spec.yaml

會使用已知的標籤、註解和污點中的作業系統資訊,來標記節點和套用污點。

附註

不支援備份和還原多重作業系統工作負載叢集。

Windows Antrea CNI 可靠性

HNS 網路在 Windows 上不具備持續性。Windows 節點重新開機後,antrea-agent 建立的 HNS 網路會被移除,且依預設會停用 Open vSwitch 延伸。因此,請在 Windows 節點重新開機後,移除失效的 OVS 橋接器和連接埠。您可以使用説明指令碼 Clean-AntreaNetwork.ps1 清理 OVS 橋接器。

使用以下其中一種方法安裝說明指令碼:

  • 手動安裝
  • 自動安裝

手動安裝

若要在每個隔離的工作負載節點上手動安裝説明指令碼,請執行以下動作:

  1. 此代碼範例下載 Clean-AntreaNetwork.ps1 安裝指令碼。下載的安裝指令碼 snippet.ps1 將安裝 Clean-AntreaNetwork.ps1
  2. 透過 SSH 登入節點,然後執行下列命令。

    powershell snippet.ps1
    

自動安裝

若要建立自訂的 ClusterClass,以在每個新的工作負載節點上自動安裝説明指令碼,請執行以下動作:

  1. 請依照建立 ClusterClass 中的步驟,建立自訂的 ClusterClass 物件。
  2. 使用 YTT 從此代碼範例套用修補程式,並在管理叢集上套用規格:

    ytt -f custom-cluster-class.yaml -f snippet.yaml | kubectl apply -f -
    

分散式連接埠群組安全性說明

如果部署 Windows 或 MultiOS 叢集,必須確保分散式連接埠群組將某些安全性原則設為 Reject。例如,如果混合模式設定為 Accept,節點可以在 ReadyNotReady 狀態之間交替使用。

在 vSphere Client 中,選擇用於 Windows 節點的網路,移至虛擬分散式交換器 > 分散式連接埠群組安全性原則設定,然後將這些原則設為 Reject

  • 混合模式
  • MAC 位址變更
  • 偽造的傳輸
check-circle-line exclamation-circle-line close-line
Scroll to top icon