透過叢集 v1beta1 API,可以預設的 ClusterClass 定義為基礎佈建叢集。

ClusterClass API v1beta1

Kubernetes 叢集 API 是一套工具,用於提供 Kubernetes 叢集的宣告式佈建、升級和運作。ClusterClass 是叢集 API 的演進版本,可用於定義管理多組叢集的生命週期的範本。TKG 服務 使用 v1beta1 API 支援 ClusterClass。

TKG 服務 隨附一個名為 tanzukubernetescluster 的預設 ClusterClass 定義。tanzukubernetescluster ClusterClass 提供用於使用 v1beta API 建立叢集的範本。tanzukubernetescluster ClusterClass 在所有使用者命名空間中均可用。若要基於此 ClusterClass 建立叢集,請在叢集規格中參考它。如需有關指引,請參閱 v1beta 範例。

預設 ClusterClass tanzukubernetescluster

預設 tanzukubernetescluster ClusterClass 是不可變的。可能會在每次發佈 TKG 服務時對其進行更新。

若要檢視 TKG 服務執行個體隨附的預設 tanzukubernetescluster ClusterClass,請完成以下步驟:

  1. 登入 主管
    kubectl vsphere login --server=IP-or-FQDN --vsphere-username [email protected]
  2. 將內容切換到佈建了 TKGS 叢集的 vSphere 命名空間
    kubeclt config use-context VSPEHRE-NS
  3. 取得預設 tanzukubernetescluster ClusterClass。
    kubectl get clusterclass tanzukubernetescluster -o yaml
  4. 您可以選擇性地將預設 ClusterClass 的輸出寫入名為 tkc-dcc.yaml 的檔案。
    kubectl get clusterclass tanzukubernetescluster -o yaml > tkc-dcc.yaml

用於自訂叢集的 ClusterClass 變數

可以使用變數根據 tanzukubernetescluster ClusterClass 來自訂叢集。使用名稱-值對定義變數。語法必須符合 openAPIV3Schema 的要求。

使用 v1beta1 API 佈建叢集需要兩個變數:
  • 虛擬機器類別
  • 儲存區類別
還可以使用其他變數來自訂叢集,例如:
  • Proxy
  • TLS 憑證
  • SSH 金鑰

下列區段列出了預設 tanzukubernetescluster ClusterClass 可用的所有變數。

重要: 有效金鑰名稱只能包含英數字元、破折號 (如 key-name)、底線 (如 KEY_NAME) 或點 (如 key.name)。不能在金鑰名稱中使用空格。

clusterEncryptionConfigYaml

使用 clusterEncryptionConfigYaml 變數設定叢集加密。

clusterEncryptionConfigYaml
為提供加密組態詳細資料的 YAML 檔案的字串。
可以使用 kube-apiserver 加密組態套件設定對 etcd 資料庫中資料的加密。請參閱 Kubernetes 說明文件中的 〈加密靜態密碼資料〉
...
    variables:
    #clusterEncryptionConfigYaml specifies the base64 encoded 
    #EncryptionConfiguration YAML
    #the YAML contains a base64 encryption configuration for the cluster identity
    #the key is generated randomly
    - name: clusterEncryptionConfigYaml
      value: string which is name of the EncryptionConfiguration YAML 

controlPlaneCertificateRotation

使用 controlPlaneCertificateRotation 變數設定系統,在控制平面節點的 TLS 憑證到期之前觸發憑證推出,從而輪替這些憑證。控制平面憑證輪替可用於所有新的和現有的控制平面節點。
controlPlaneCertificateRotation
布林值,用於啟用該功能以及到期前輪替憑證的天數。如需詳細資訊,請參閱 使用 Kubeadm Control Plane 提供者自動輪替憑證
...
    variables:
    - name: controlPlaneCertificateRotation
      value: 
        activate: true
        daysBefore: 90

其中:

  • activate 是用於啟用該功能的布林值;預設值為 true
  • daysBefore 表示到期前的天數:預設值為 90 天;最小值為到期前 7
備註: 此變數是為 vSphere 8 Update 3 ( TKG 服務 3.0) 更新的。

controlPlaneVolumes

使用 controlPlaneVolumes 變數為控制平面節點設定持續性磁碟區。
controlPlaneVolumes
可選物件陣列,其中每個物件都包含 namestorageClassmountPath (均為字串),以及可選的 capacity 物件 (包含 storage 字串)。
...
    variables:
      #controlPlaneVolumes is an optional set of PVCs to create and
      #attach to each node
      - name: controlPlaneVolumes
        value:
          #name of the PVC to be used as the suffix (node.name)
          - name: NAME
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /dir/path
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

defaultRegistrySecret

defaultRegistrySecret 變數為叢集設定預設的容器登錄。
備註: 此變數將保留,供內嵌式 Harbor 登錄使用。
defaultRegistrySecret
包含預設容器登錄的公開金鑰、憑證名稱和命名空間的物件。
如果在 主管 上啟用內嵌式 Harbor 登錄,則 defaultRegistrySecret 變數會指定叢集信任的登錄服務憑證。憑證密碼標記有 managed-by: vmware-vRegistry。建立叢集時,系統會將 defaultRegistry 憑證插入 defaultRegistrySecret 變數中。建立叢集後,您可以透過手動更新此變數來管理憑證輪替或任何更新。
...
    variables:
    - name: defaultRegistrySecret
      value:
        #data holds the base64 encoded data.ca\.crt content
        #data.ca\.crt is already encoded, so raw cert data is encoded twice
        data: LS0tLS1CRUdJTiBDRVJU...S0tRU5EIENFUlRJRklDQVRFL
        #name specifies the name of the registry cert secret 
        name: harbor-ca-key-pair
        #namespace specifies the ns of the registry cert secret
        namespace: svc-harbor-domain-c9

defaultStorageClass

使用 defaultStorageClass 變數為叢集設定預設儲存區類別。

defaultStorageClass
可識別要用作預設儲存區類別的儲存區類別的字串,通常 Helm 圖和 Tanzu 套件等應用程式需要它。
...
    variables:
    - name: defaultStorageClass
      value: tkg2-storage-profile

extensionCert

使用 extensionCert 變數設定 TLS 憑證。

extensionCert
包含具有 namekey 字串的 contentSecret 物件的物件。 contentSecret 會參考為 TLS 憑證建立的 Kubernetes 密碼物件。
...
    variables:
    #extensionCert specifies the cert and key for Extensions Controller
    #self-signed issuer and certificates must be created in advance
    - name: extensionCert
      value: 
        contentSecret:
          #name specifies the name of secret
          name: string
          #key specifies the content of tls\.crt in the secret's data map
          key: string

kubeAPIServerFQDNs

使用 kubeAPIServerFQDNs 變數設定具有 FQDN 的叢集。

kubeAPIServerFQDNs
一或多個完整網域名稱 (FQDN) 組成的陣列。
產生的 Kubernetes API 憑證將包含您在 kubeAPIServerFQDNs 變數中指定的每個 FQDN。系統將使用清單中的第一個 FQDN 填入 kubeconfig,並假定它可解析。如果要使用清單中的其他 FQDN,可以使用變數清單中的所需 FQDN 手動編輯產生的 kubeconfig 檔案。
如需詳細資料,請參閱 v1beta1 範例:具有 FQDN 的叢集

nodePoolLabels

使用 nodePoolLabels 變數為 Worker 節點設定標籤。

nodePoolLabels
一或多個物件組成的陣列,每個物件均包含索引鍵/值 (均為字串) 配對。
透過標籤,您可以根據需求組織系統物件,以便進行查詢和報告。如需使用率詳細資料,請參閱 Kubernetes 標籤說明文件

nodePoolTaints

使用 nodePoolTaints 變數將污點套用至 Worker 節點。

nodePoolTaints
物件陣列,其中每個物件都包含適用於 worker 節點的 污點
每個污點物件都包含 key (字串)、 value (字串) 和 effect (字串)。系統會在建立或更新時填入 timeAdded 欄位。

nodePoolVolumes

使用 nodePoolVolumes 變數為叢集節點指定持續性磁碟區。

nodePoolVolumes
可選物件陣列,其中每個物件都包含 namestorageClassmountPath (均為字串),以及可選的 capacity 物件 (包含 storage 字串)。
...
    variables:
      #nodePoolVolumes is an optional set of PVCs to create and
      #attach to each node; use for high-churn components like containerd
      - name: nodePoolVolumes
        value: |
          #name of the PVC to be used as the suffix (node.name)
          - name: etcd
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /var/lib/containerd
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

ntp

使用 ntp 變數為叢集設定 NTP 伺服器。

ntp
為 NTP 伺服器的 FQDN 或 IP 位址的字串。
NTP 變數可指定 NTP 伺服器的網域名稱,如下列範例所示。NTP 伺服器會在建立叢集時插入叢集變數中。建立叢集後,您可以透過手動更新此叢集變數來管理伺服器名稱輪替或任何更新。
...
    variables:
    - name: ntp
      value: time1.vmware.com

podSecurityStandard

使用 podSecurityStandard 變數設定叢集範圍網繭安全性。
備註: 此變數是為 vSphere 8 Update 3 ( TKG 服務 3.0) 新增的。
podSecurityStandard

對於 TKr v1.26 及更新版本,依預設,將使用註解標籤在命名空間層級強制執行網繭安全性 (PSA) 限制。請參閱為 TKR 1.25 及更新版本設定 PSA

或者,也可以在佈建或更新 v1beta1 叢集時使用 podSecurityStandard 變數來設定叢集範圍 PSA。

podSecurityStandard 變數可按以下方式實作:

...
variables:
- name: podSecurityStandard
  value: 
    deactivated: DEACTIVATED
    audit: AUDIT-PROFILE
    enforce: ENFORCE-PROFILE
    warn: WARN-PROFILE
    auditVersion: AUDIT-VERSION
    enforceVersion: ENFORCE-VERSION
    warnVersion: WARN-VERSION
    exemptions: 
      namespaces: [EXEMPT-NS]
其中:
  • DEACTIVATED 值為 false (預設值) 表示套用叢集範圍 PSA;值為 true 則表示不套用。
  • *-PROFILE 值表示每種模式的 PSA 設定檔,可以是 "privileged""baseline""restricted" (預設值)。
  • *-VERSION 值表示每種模式的 Kubernetes 版本,例如 "v1.26"。值 "latest" 為預設值。
  • EXEMPT-NS 值表示要從 PSA 控制中排除的命名空間的逗號分隔清單。
備註: 系統命名空間將從網繭安全性中排除,包括 kube-system、tkg-system 和 vmware-system-cloud-provider。

如果不實作 podSecurityStandard 變數,將保留預設 PSA 行為。如果叢集規格中包含 podSecurityStandard 變數,變數設定將施加控制,包括其預設值,除非您覆寫預設值。

以下範例顯示了預設值。
...
    variables:
      - name: podSecurityStandard
        value:
          enforce: "restricted"
          enforce-version: "latest"
以下範例提供了稽核記錄和警告,用於確定哪些工作負載未遵循目前的網繭強化最佳做法,但僅強制執行限制性最低的原則 (「基準」,這會阻止已知的權限提升)。
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "baseline"
以下範例強制執行限制原則,但在特定命名空間上除外。
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "restricted"
          exemptions:
            namesaces: ["privileged-workload-ns"]
以下範例僅對特定 TKr 版本強制執行限制。
...
variables:
  - name: podSecurityStandard
    value: 
      audit-version: "v1.26"
      warn-version: "v1.26"
      enforce-version: "v1.26"

如需更多範例,請參閱 Kubernetes 說明文件中的網繭安全性標準

proxy

使用 proxy 變數為叢集設定 Proxy 伺服器。

proxy
具有參考 Proxy 伺服器以進行輸出叢集連線的參數的物件。
必要的 proxy 參數包括 httpProxyhttpsProxynoProxy。如果要在「叢集」定義中包含 proxy 變數,則所有這三個欄位都為必填。
httpProxyhttpsProxy 欄位會採用參考 Proxy 伺服器的 URI 的字串值,該 Proxy 伺服器被設定為管理 TKG 叢集的輸出 HTTP 和 HTTPS 連線。您可以使用 HTTP 連線到 Proxy 伺服器。不支援 HTTPS 連線。
noProxy 欄位是字串陣列。從 主管 工作負載網路取得 noProxy 值。必須在 noProxy 欄位中包含命名空間網路、入口子網路和出口子網路。
無需在 noProxy 欄位中包括「服務」子網路。TKG 叢集不與此子網路互動。
無需在 noProxy 欄位中包括 clusterNetwork.services.cidrBlocksclusterNetwork.pods.cidrBlocks。系統不會自動代理這些端點。
無需在 noProxy 欄位中包括 localhost 和 127.0.0.1。系統不會自動代理這些端點。
...
    variables:
    #proxy specifies a proxy server to be used for the cluster
    #if omitted no proxy is configured
    - name: proxy
      value:
        #httpProxy is the proxy URI for HTTP connections
        #to endpoints outside the cluster
        httpProxy: http://<user>:<pwd>@<ip>:<port>
        #httpsProxy is the proxy URL for HTTPS connections 
        #to endpoints outside the cluster
        httpsProxy: http://<user>:<pwd>@<ip>:<port>
        #noProxy is the list of destination domain names, domains, 
        #IP addresses, and other network CIDRs to exclude from proxying
        #must include Supervisor Pod, Egress, Ingress CIDRs
        noProxy: [array of strings, comma-separated]

storageClass

使用 storageClass 變數為叢集設定儲存區類別。

storageClass
為 vSphere 儲存區設定檔的名稱的字串,此設定檔已被指派給佈建了 TKG 叢集的 vSphere 命名空間
...
    variables:
    - name: storageClass
      value: tkgs-storage-profile 
使用以下命令列出可用的儲存區類別:
kubectl describe namespace VSPHERE-NAMESPACE-NAME
或者,如果您具有 vSphere 管理員權限:
kubectl describe storageclasses

storageClasses

使用 storageClasses 變數為叢集設定儲存區類別陣列。

storageClasses
一或多個字串組成的陣列,每個字串均是已被指派給佈建了 TKG 叢集的 vSphere 命名空間 的 vSphere 儲存區設定檔的名稱。
...
    variables:
    - name: storageClasses
      value: [tkg2-storage-profile, tkg2-storage-profile-latebinding] 
使用以下命令列出可用的儲存區類別:
kubectl describe namespace VSPHERE-NAMESPACE-NAME
或者,如果您具有 vSphere 管理員權限:
kubectl describe storageclasses

TKR_DATA

使用 TKR_DATA 變數指定 TKR 資訊。

TKR_DATA
用於指定 TKR 版本和其他詳細資料的物件。
version 是由叢集節點使用、採用 TKR NAME 格式的字串。
只有不具有 legacy-tkr 標籤的 TKR 才與 vSphere 9 主管上的 TKG 相容。請參閱 將 Kubernetes 版本與 TKG 服務 叢集搭配使用
預設作業系統為 PhotonOS。使用註解指定 Ubuntu TKR

trust

使用 trust 變數為叢集指定一或多個受信任的 CA 憑證。

trust
用於向叢集新增 TLS 憑證 (其他 CA 或終端憑證) 的物件。
此值為擁有字串陣列的 additionalTrustedCAs。例如:
#trust-example
    variables:
      - name: trust
        value:
          additionalTrustedCAs:
          - name: additional-ca-1
          - name: additional-ca-2
          - name: additional-ca-N
每個字串的值都是 Kubernetes 密碼中資料對應欄位的使用者定義名稱 ,該密碼包含採用雙 base64 編碼之 PEM 格式的 CA 憑證。例如:
#secret-example
apiVersion: v1
data:
  additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09
kind: Secret
metadata:
  name: cluster01-user-trusted-ca-secret
  namespace: tkgs-cluster-ns
type: Opaque
trust 變數的一個常見使用案例是將 v1beta1 叢集與私人容器登錄整合。請參閱 將 TKG 服務 叢集與私人容器登錄整合

user

使用 user 變數指定叢集使用者認證。

user
包含 passwordSecret 物件的物件,此 passwordSecret 物件具有名稱和金鑰字串以及 sshAuthorizedKey 字串。可以使用此變數將使用者的 SSH 金鑰新增到叢集節點以進行遠端 SSH 存取。
「使用者」變數可指定 SSH 登入認證,包括密碼和授權金鑰。依預設,使用者名稱為 vmware-system-user。密碼需要進行雜湊處理,並儲存在佈建了此叢集的同一命名空間的密碼中。 passwordSecret 物件可參考此密碼。例如,在 Linux 上,您可以使用 mkpasswd --method=SHA-512 --rounds=4096 產生安全雜湊。如需詳細資料,請參閱 〈包含使用者和群組〉
...
    variables:
    #user specifies an authorized user and credentials
    - name: user
      value:
        #passwordSecret is an object that contains a Kubernetes secret and key
        passwordSecret:
          #name specifies the secret name
          name: string
          #key specifies the key value pair in the secret's data map
          key: string
        sshAuthorizedKey: string that is the base64-encoded public key

vmClass

使用 vmClass 變數為叢集節點設定虛擬機器類別。

vmClass
對應到虛擬機器類別的名稱的必要字串,該虛擬機器類別已繫結到佈建了 TKG 叢集的 vSphere 命名空間
vmClass 是 VirtualMachineClass 的名稱,說明了要用於叢集節點的虛擬硬體設定。VirtualMachineClass 會控制節點可用的 CPU 和記憶體,以及關於這些資源的要求和限制。請參閱 對 TKG 服務 叢集使用虛擬機器類別
只能使用與正在佈建 TKG 服務叢集的 vSphere 命名空間 關聯的虛擬機器類別。使用命令 kubectl get virtualmachineclass 列出繫結的類別。
可以在不同的範圍中定義 vmClass 變數,以便對控制平面節點和節點集區 worker 節點使用不同的虛擬機器類別。
例如,此處的內嵌 vmClass 變數 overrides 是此特定 machineDeployment 拓撲的主要 vmClass 變數。
...
    workers:
      machineDeployments:
      - class: tkg-worker
        name: compute
        replicas: 3
        variables:
          overrides:
          - name: vmClass
            value: guaranteed-large