管理不同虛擬機器類型的節點集區

本主題說明如何在工作負載叢集中建立、更新和刪除節點集區。節點集區讓單一工作負載叢集能夠包含及管理不同類型的節點,以支援不同應用程式的各種不同需求。

例如,叢集可以使用具有高儲存區容量的節點,來執行資料存放區,以及使用較精簡的節點來處理應用程式要求。

附註

無法在單節點叢集中建立節點集區。
若要在由 vSphere with Tanzu 建立的工作負載叢集中建立和使用節點集區,需要執行 vSphere v7.0 U3 或更新版本。
如果使用 vSphere with Tanzu,vSphere with Tanzu 叢集必須使用 v1alpha2 API 才能成功執行 node-pool 命令。如需詳細資訊,請參閱 vSphere with Tanzu 說明文件

關於節點集區

節點集區會為工作負載叢集使用的工作節點集,定義其內容。

某些節點集區的內容取決於基礎結構中可用的虛擬機器選項,但所有雲端基礎結構上的所有節點集區會共用以下內容:

  • name:節點集區的唯一識別碼,用於更新和刪除等作業。
  • replicas:集區中的節點數,所有這些節點會共用相同的內容。
  • labels:索引鍵/值配對會設定成節點上的中繼資料,以便使工作負載與集區中的節點相符。如需詳細資訊以及範例標籤,請參閱 Kubernetes 說明文件中的標籤和選取器

對於 vSphere 上的工作負載叢集,獨立管理叢集預設遵循反相似性規則,將節點集區工作節點和控制平面節點部署到不同的 ESXi 主機。若要停用節點放置的反相似性規則,請參閱停用反相似性規則

所有工作負載叢集都是以第一個原始節點集區來建立的。當您為叢集建立其他節點集區時,如下所述,第一個節點集區會提供預設值給未設定在新節點集區定義中的內容。

列出節點集區

若要檢查叢集中目前可用的節點集區,請執行:

tanzu cluster node-pool list CLUSTER-NAME

該命令會傳回叢集中所有節點集區的清單,以及每個節點集區中的複本狀態。

建立節點集區

若要在叢集中建立節點集區,請執行下列動作:

  1. 為節點集區建立組態檔。有關範例組態檔,請參閱範例組態

    有關組態內容的完整清單,請參閱組態內容

  2. 建立組態檔所定義的節點集區:

    tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
    

    選項:

    • --namespace 指定叢集的命名空間。預設值為 default
    • (舊版叢集) --base-machine-deployment 指定要從中建立新節點集區的基礎 MachineDeployment 物件。
      • 將此值設定為 MachineDeployment 識別碼,如 Details 之下的 tanzu cluster get 輸出中所列。
      • 預設值是叢集的工作節點陣列中的第一個 MachineDeployment 物件,在內部是以 workerMDs[0] 表示。

範例組態

以下提供基礎結構的範例組態。

vSphere 組態
除了必要的 namereplicaslabels 內容之外,vSphere 上的節點集區組態檔還可以包含 vsphere 區塊,以定義特別用來在 vSphere 上設定虛擬機器的選用內容。

vSphere 叢集的節點集區定義範例:

    name: tkg-wc-oidc-md-1
    replicas: 4
    labels:
      key1: value1
      key2: value2
    vsphere:
      memoryMiB: 8192
      diskGiB: 64
      numCPUs: 4
      datacenter: dc0
      datastore: iscsi-ds-0
      storagePolicyName: name
      folder: vmFolder
      resourcePool: rp-1
      vcIP: 10.0.0.1
      template: templateName
      cloneMode: clone-mode
      network: network-name

對於任何未設定於 vsphere 區塊中的值,都會繼承叢集第一個節點集區中的值。

對於 vcIP 值,工作負載叢集節點集區必須在與叢集控制平面相同的 vCenter 中執行。

對於由 vSphere with Tanzu 主管部署的叢集,請定義 storageClasstkrvmClass。如需有關這些內容的詳細資訊,請參閱 vSphere with Tanzu 說明文件中的 TanzuKubernetesCluster v1alpha3 API – 已標註

依預設,vSphere 上的工作負載叢集是依照反相似性規則部署的,這些規則將每個節點集區中的控制平面節點和工作節點分散到多個 ESXi 主機。若要停用或重新啟動反相似性規則,請參閱下方的停用反相似性規則 (vSphere)

AWS 組態
除了所需的 namereplicaslabels 內容外,AWS 上的節點集區的組態檔還支援以下選用內容:
  • az:可用性區域
  • nodeMachineType:執行個體類型

可能會省略這些設定,在這種情況下,其值會繼承自叢集的第一個節點集區。

AWS 叢集的節點集區定義範例:

name: tkg-aws-wc-np-1
replicas: 2
az: us-west-2b
nodeMachineType: t3.large
labels:
  key1: value1
  key2: value2
附註

AWS 上的工作負載叢集節點集區必須與獨立管理叢集位於相同的可用區域中。

Azure 組態
除了上方所需的 namereplicaslabels 属性外,Microsoft Azure 上的節點集區的組態檔還支援以下選用內容:
  • az:可用性區域
  • nodeMachineType:執行個體類型

如果省略這些設定,則其值將從叢集的第一個節點集區繼承。

Azure 叢集的節點集區定義範例:

name: tkg-azure-wc-np-1
replicas: 2
az: 2
nodeMachineType: Standard_D2s_v3
labels:
  key1: value1
  key2: value2

組態內容

下表列出您可以在節點集區組態檔中定義給工作負載叢集的所有內容。

附註

您無法新增或修改現有節點集區的 labelsaznodeMachineType 或 vSphere 屬性。若要變更這些內容,您必須在叢集中建立具有所需內容的新節點集區,將工作負載移轉至新的節點集區,然後刪除原始節點集區。

名稱 類型 叢集物件 提供者 附註
name string 任何 全部 要建立或更新的節點集區的名稱。
replicas integer 任何 全部 節點集區中的節點數。
az string 任何 AWS 或 Azure 上的 TKG 用於放置節點的 AZ。
nodeMachineType string 任何 AWS 或 Azure 上的 TKG 分別為 AWS 和 Azure 中的節點 instanceTypevmSize
labels map[string]string 任何 全部 要在節點上使用 kubeletExtraArgs (‐‐node-labels) 來設定的標籤。
vmClass string 任何 全部 Kubernetes vmClass 的名稱。與 TKC 叢集中所定義的 vmClass 相符。此類別設定節點可用的 CPU 和記憶體。若要列出可用的虛擬機器類別,請執行 kubectl describe virtualmachineclasses
storageClass string 任何 全部 要用於節點集區的 Kubernetes StorageClass 名稱。此類別適用於儲存節點根檔案系統的磁碟。若要列出可用的儲存區類別,請執行 kubectl describe storageclasses
volumes
  • name, string
  • mountPath, string
  • capacity, corev1.ResourceList
  • storageClass, string
[]object 任何 全部 要用於節點的磁碟區。
tkr
  • reference, string
object 以 TKC 為基礎 全部 要用於節點集區的 TKR 名稱。例如,v1.27.5---vmware.2-tkg.2
tkrResolver string 以類別為基礎 全部 對於以類別為基礎的叢集來說是必要的。Cluster 資源中的 run.tanzu.vmware.com/resolve-os-image 註解的值。
nodeDrainTimeout metav1.Duration 任何 全部 節點清空逾時。
vsphere object 任何 全部 請參閱 [組態內容 (僅限 vSphere)](#vsphere-properties)。
workerClass string 以類別為基礎 全部 對於以類別為基礎的叢集來說是必要的。在叢集的 ClusterClass 中,您希望節點集區使用的 workerClass

組態內容 (僅限 vSphere)

如需 VSPHERE_* 組態變數的相關資訊,請參閱組態檔變數參考中的 vSphere

名稱 類型 管理叢集類型 附註
cloneMode string 獨立 VSPHERE_CLONE_MODE 相同。
datacenter string 獨立 VSPHERE_DATACENTER 相同。
datastore string 獨立 VSPHERE_DATASTORE 相同。
storagePolicyName string 獨立 VSPHERE_STORAGE_POLICY_NAME 相同。
taints []corev1.Taint 主管 要套用至節點的污點。
folder string 獨立 VSPHERE_FOLDER 相同。
network string 獨立 VSPHERE_NETWORK 相同。
nameservers []string 獨立 VSPHERE_WORKER_NAMESERVERS 相同。
tkgIPFamily string 獨立 TKG_IP_FAMILY 相同。
resourcePool string 獨立 VSPHERE_RESOURCE_POOL 相同。
vcIP string 獨立 VSPHERE_SERVER 相同。
template string 獨立 VSPHERE_TEMPLATE 相同。
memoryMiB integer 獨立 VSPHERE_WORKER_MEM_MIB 相同。
diskGiB integer 獨立 VSPHERE_WORKER_DISK_GIB 相同。
numCPUs integer 獨立 VSPHERE_WORKER_NUM_CPUS 相同。

將工作負載指派給節點集區

若要將工作負載指派給節點集區,請執行以下動作:

  1. 在管理 Pod 的 Kubernetes 工作負載資源或資源中,將 nodeSelector 設定為您在節點集區組態檔中定義的 labels 值。如需 Kubernetes 工作負載資源的相關資訊,請參閱 Kubernetes 說明文件中的工作負載
  2. 透過執行 kubectl apply -f 命令套用組態。

若要將工作負載重新指派給不同的節點集區,請執行以下動作:

  1. 在管理網繭的 Kubernetes 工作負載資源或資源中,將 nodeSelector 的值更新為新值。
  2. 透過執行 kubectl apply -f 命令套用組態更新。

更新節點集區

如果只需要變更節點集區中的節點數,請使用僅調整節點中的 Tanzu CLI 命令。如果您要新增標籤,請遵循新增標籤和調整節點中的程序。

注意

使用這些程序時,請勿變更節點集區的現有標籤、可用區域、節點執行個體類型 (在 AWS 或 Azure 上) 或虛擬機器內容 (在 vSphere 上)。這可能會對正在執行的工作負載產生嚴重的負面影響。若要變更這些內容,請使用這些內容建立新的節點集區,並將工作負載重新指派至新節點集區,之後再刪除原始節點集區。如需相關指示,請參閱上方的將工作負載指派給節點集區

僅調整節點

若要變更節點集區中的節點數,請執行:

tanzu cluster scale CLUSTER-NAME -p NODE-POOL-NAME -w NODE-COUNT

其中:

  • CLUSTER-NAME 是工作負載叢集的名稱。
  • NODE-POOL-NAME 是節點集區的名稱。
  • NODE-COUNT 是屬於此節點集區的節點數 (整數)。

新增標籤和調整節點

您可以將標籤新增至節點集區,並透過節點集區組態檔,同時調整其節點。

  1. 開啟您要更新的節點集區的組態檔。

  2. 如果您要增加或減少此節點集區中的節點數,請更新 replicas 後的數字。

  3. 如果您要新增標籤,請將它們縮排至 labels 下方。例如:

    labels:
      key1: value1
      key2: value2
    
  4. 儲存節點集區組態檔。

  5. 在終端機中執行:

    tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
    

    如果命令中的 CLUSTER-NAME 和組態檔中的 name,與叢集中的節點集區相符,則此命令會更新現有的節點集區,而不是新建一個。

刪除節點集區

若要刪除節點集區,請執行:

tanzu cluster node-pool delete CLUSTER-NAME -n NODE-POOL-NAME

其中,CLUSTER-NAME 是工作負載叢集的名稱,NODE-POOL-NAME 是節點集區的名稱。

或者,使用 --namespace 來指定叢集的命名空間。預設值為 default

注意

在執行此作業之前,請將這些節點上的任何工作負載重新指派至其他節點集區。tanzu cluster node-pool delete 在刪除節點之前不會將工作負載從節點中移轉出來。如需相關指示,請參閱上方的將工作負載指派給節點集區

停用反相似性規則 (vSphere)

依預設,vSphere 上的工作負載叢集是依照反相似性規則部署的,這些規則將每個節點集區中的控制平面節點和工作節點分散到多個 ESXi 主機。執行以下動作,以在叢集建立期間停用或重新啟用反相似性規則:

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

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

    其中,MGMT-CLUSTER-NAME 是叢集的名稱。

  2. 在 CAPV 控制器上執行 kubectl get deployment 以收集其 manager 容器的 args 值,例如:

    kubectl get deployment -n capv-system capv-controller-manager -o=json | jq '.spec.template.spec.containers[] | select(.name=="manager") | .args'
    [
      "--leader-elect",
      "--logtostderr",
      "--v=4",
      "--feature-gates=NodeAntiAffinity=true,NodeLabeling=true"
    ]
    
  3. 複製上一個步驟的輸出,變更 --feature-gates 值,並將引數清單傳遞至 kubectl patch 命令以修改物件中的值。例如,要將 NodeAntiAffinityNodeLabeling 功能閘道設定為 false 以停用節點反相似性規則,請執行以下動作:

    kubectl patch deployment -n capv-system capv-controller-manager --type=json -p '[{"op":"replace", "path":"/spec/template/spec/containers/0/args", "value": [
    "--leader-elect",
    "--logtostderr",
    "--v=4",
    "--feature-gates=NodeAntiAffinity=false,NodeLabeling=false"
    ]}]'
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon