以下幾節說明如何設定 Tanzu Kubernetes Grid (TKG) 工作負載叢集,以使用特定於具有獨立管理叢集的 vSphere 的功能。這些功能不能完全在叢集的平面組態檔或 Kubernetes 樣式的物件規格中設定。
如需如何使用組態檔和物件規格,在 vSphere 上設定工作負載叢集的相關資訊,請參閱:
如果您要將單一自訂 OVA 映像用於每一個 Kubernetes 版本,以將叢集部署在一個作業系統上,請將 OVA 匯入至 vSphere,然後在 tanzu cluster create
中使用 --tkr
選項來指定它。
不過,如果您要將多個自訂 OVA 映像用於相同的 Kubernetes 版本,則 --tkr
值不明確。當將 OVA 用於相同的 Kubernetes 版本時,會發生下列情況:
make build-node-ova-vsphere-ubuntu-1804
、make build-node-ova-vsphere-photon-3
和 make build-node-ova-vsphere-rhel-7
建立的作業系統。為了解決這種不明確現象,請先將 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:
govc
。有關安裝指示,請參閱 GitHub 上的 govmomi 存放庫。govc
設定環境變數,以存取 vCenter:
export GOVC_USERNAME=VCENTER-USERNAME
export GOVC_PASSWORD=VCENTER-PASSWORD
export GOVC_URL=VCENTER-URL
export GOVC_INSECURE=1
govc find / -type m
,並在輸出中尋找映像名稱,該輸出會依物件的完整詳細目錄路徑來列出物件。如需有關自訂 OVA 映像的詳細資訊,請參閱建置機器映像。
您可以為工作負載叢集指定地區和區域,使其與設定給 vSphere CSI (雲端儲存區介面) 的地區和區域標籤整合在一起。對於跨多個區域的叢集,這可讓工作節點尋找並使用共用儲存區,即使這些節點是在沒有儲存區網繭的區域中執行,例如在電信無線電存取網路 (RAN) 中執行。
若要部署具有透過 vSphere CSI 啟用共用儲存區的地區和區域標籤的工作負載叢集,請執行下列動作:
在 vCenter Server 上建立標籤:
k8s-region
和 k8s-zone
。遵循建立和編輯 vSphere 標籤,在資料中心內的地區和區域類別中建立標籤,如下表所示:
類別 | 標籤 |
---|---|
k8s-zone |
zone-a zone-b zone-c |
k8s-region |
region-1 |
如資料表中所示,遵循指派或移除 vSphere 標籤,來建立叢集和資料中心的對應標籤。
vSphere 物件 | 標籤 |
datacenter |
region-1 |
cluster1 |
zone-a |
cluster2 |
zone-b |
cluster3 |
zone-c |
若要為 vSphere 工作負載叢集的 CSI 驅動程式,啟用自訂地區和區域,請將叢集組態檔中的變數 VSPHERE_REGION
和 VSPHERE_ZONE
設定成上述的標籤。例如:
VSPHERE_REGION: region-1
VSPHERE_ZONE: zone-a
當 Tanzu CLI 使用這些變數集來建立工作負載叢集時,它會使用拓撲索引鍵 failure-domain.beta.kubernetes.io/zone
和 failure-domain.beta.kubernetes.io/region
來標記每個叢集節點。
執行 tanzu cluster create
,以建立工作負載叢集,如建立以計劃為基礎的叢集或 TKC 叢集中所述。
建立叢集並將 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 驅動程式 - 使用拓撲的部署。
Tanzu Kubernetes Grid 可以在多個目標平台帳戶上執行工作負載叢集,例如在不同的團隊之間分割雲端使用方式,或者將不同的安全設定檔套用至生產、暫存和開發工作負載。
若要將工作負載叢集部署到備用 vSphere 帳戶 (不同於用於部署其管理叢集的帳戶),請執行以下動作:
將 kubectl
的內容設定為管理叢集:
kubectl config use-context MY-MGMT-CLUSTER@MY-MGMT-CLUSTER
其中,MY-MGMT-CLUSTER
是管理叢集的名稱。
使用以下內容建立 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-USERNAME
和 VSPHERE-PASSWORD
是可存取備用 vSphere 帳戶的登入認證。使用該檔案建立 Secret
物件:
kubectl apply -f secret.yaml
使用以下內容建立 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
是您在上面為用戶端密碼提供的名稱。使用該檔案建立 VsphereClusterIdentity
物件:
kubectl apply -f identity.yaml
管理叢集現在可以將工作負載叢集部署到備用帳戶。
若要將工作負載叢集部署到帳戶,請執行以下動作:
執行 tanzu cluster create --dry-run
,以建立叢集資訊清單。
編輯資訊清單中的 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
...
執行 kubectl apply -f my-cluster-manifest.yaml
以建立工作負載叢集。
建立工作負載叢集後,使用備用帳戶認證登入 vSphere,您應該會看到其正在執行。
如需詳細資訊,請參閱叢集 API 提供者 vSphere 存放庫中的身分識別管理。
附註此功能的運作不如預期,如果將資料存放區叢集中的多個資料存放區標記為工作負載叢集儲存原則的基礎,則工作負載叢集僅使用其中一個資料存放區。
若要使工作負載叢集能夠使用資料存放區叢集而不是單一資料存放區,請設定以資料存放區叢集中的所有資料存放區為目標的儲存區原則,如下所示:
建立標籤並將其與相關資料存放區相關聯:
Datastore
作為可關聯的物件類型。依照為以標籤為基礎的放置建立虛擬機器儲存區原則建立以標籤為基礎的儲存區原則。
在叢集組態檔中:
VSPHERE_STORAGE_POLICY_ID
設定為在上一個步驟中建立的儲存區原則的名稱。VSPHERE_DATASTORE
。VSPHERE_DATASTORE
設定將覆寫儲存區原則設定。若要部署兼具 Windows 系統和 Linux 系統的工作節點的多重作業系統工作負載叢集,請建立自訂的 Windows 機器映像,部署 Windows 工作負載叢集,然後新增 Linux MachineDeployment
,將僅適用於 Windows 的工作負載叢集轉換為多重作業系統叢集。
多重作業系統叢集可以主控 Windows 和 Linux 工作負載,同時在其所屬的工作節點上執行 Linux 系統的 TKG 元件。
建立 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"
執行 kubectl apply -f win-osimage.yaml
以新增 OSImage。
將 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 的範例。
執行下列命令,以建立以類別為基礎的叢集物件規格:
tanzu cluster create my-cluster --file my-cluster-config.yaml --dry-run > my-cluster-spec.yaml
其中:
WINDOWS-CLUSTER
是 Windows 叢集的名稱。*
CLUSTER-CONFIG
是組態檔的名稱。
將新的 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
透過執行下列命令來部署多重作業系統叢集:
tanzu cluster create my-cluster -f my-cluster-spec.yaml
會使用已知的標籤、註解和污點中的作業系統資訊,來標記節點和套用污點。
附註不支援備份和還原多重作業系統工作負載叢集。
HNS 網路在 Windows 上不具備持續性。Windows 節點重新開機後,antrea-agent 建立的 HNS 網路會被移除,且依預設會停用 Open vSwitch 延伸。因此,請在 Windows 節點重新開機後,移除失效的 OVS 橋接器和連接埠。您可以使用説明指令碼 Clean-AntreaNetwork.ps1
清理 OVS 橋接器。
使用以下其中一種方法安裝說明指令碼:
若要在每個隔離的工作負載節點上手動安裝説明指令碼,請執行以下動作:
Clean-AntreaNetwork.ps1
安裝指令碼。下載的安裝指令碼 snippet.ps1
將安裝 Clean-AntreaNetwork.ps1
。透過 SSH 登入節點,然後執行下列命令。
powershell snippet.ps1
若要建立自訂的 ClusterClass
,以在每個新的工作負載節點上自動安裝説明指令碼,請執行以下動作:
使用 YTT 從此代碼範例套用修補程式,並在管理叢集上套用規格:
ytt -f custom-cluster-class.yaml -f snippet.yaml | kubectl apply -f -
如果部署 Windows 或 MultiOS 叢集,必須確保分散式連接埠群組將某些安全性原則設為 Reject
。例如,如果混合模式設定為 Accept
,節點可以在 Ready
和 NotReady
狀態之間交替使用。
在 vSphere Client 中,選擇用於 Windows 節點的網路,移至虛擬分散式交換器 > 分散式連接埠群組安全性原則設定,然後將這些原則設為 Reject
: