本主題說明如何在工作負載叢集中建立、更新和刪除節點集區。節點集區讓單一工作負載叢集能夠包含及管理不同類型的節點,以支援不同應用程式的各種不同需求。
例如,叢集可以使用具有高儲存區容量的節點,來執行資料存放區,以及使用較精簡的節點來處理應用程式要求。
附註無法在單節點叢集中建立節點集區。
若要在由 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
該命令會傳回叢集中所有節點集區的清單,以及每個節點集區中的複本狀態。
若要在叢集中建立節點集區,請執行下列動作:
為節點集區建立組態檔。有關範例組態檔,請參閱範例組態。
有關組態內容的完整清單,請參閱組態內容。
建立組態檔所定義的節點集區:
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]
表示。以下提供基礎結構的範例組態。
name
、
replicas
和
labels
內容之外,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 主管部署的叢集,請定義 storageClass
、tkr
和 vmClass
。如需有關這些內容的詳細資訊,請參閱 vSphere with Tanzu 說明文件中的 TanzuKubernetesCluster v1alpha3 API – 已標註。
依預設,vSphere 上的工作負載叢集是依照反相似性規則部署的,這些規則將每個節點集區中的控制平面節點和工作節點分散到多個 ESXi 主機。若要停用或重新啟動反相似性規則,請參閱下方的停用反相似性規則 (vSphere)。
name
、
replicas
和
labels
內容外,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 上的工作負載叢集節點集區必須與獨立管理叢集位於相同的可用區域中。
name
、
replicas
和
labels
属性外,Microsoft Azure 上的節點集區的組態檔還支援以下選用內容:
az
:可用性區域nodeMachineType
:執行個體類型如果省略這些設定,則其值將從叢集的第一個節點集區繼承。
Azure 叢集的節點集區定義範例:
name: tkg-azure-wc-np-1
replicas: 2
az: 2
nodeMachineType: Standard_D2s_v3
labels:
key1: value1
key2: value2
下表列出您可以在節點集區組態檔中定義給工作負載叢集的所有內容。
附註您無法新增或修改現有節點集區的
labels
、az
、nodeMachineType
或 vSphere 屬性。若要變更這些內容,您必須在叢集中建立具有所需內容的新節點集區,將工作負載移轉至新的節點集區,然後刪除原始節點集區。
名稱 | 類型 | 叢集物件 | 提供者 | 附註 |
---|---|---|---|---|
name |
string | 任何 | 全部 | 要建立或更新的節點集區的名稱。 |
replicas |
integer | 任何 | 全部 | 節點集區中的節點數。 |
az |
string | 任何 | AWS 或 Azure 上的 TKG | 用於放置節點的 AZ。 |
nodeMachineType |
string | 任何 | AWS 或 Azure 上的 TKG | 分別為 AWS 和 Azure 中的節點 instanceType 或 vmSize 。 |
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 :
|
[]object | 任何 | 全部 | 要用於節點的磁碟區。 |
tkr :
|
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。
名稱 | 類型 | 管理叢集類型 | 附註 |
---|---|---|---|
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 相同。 |
若要將工作負載指派給節點集區,請執行以下動作:
nodeSelector
設定為您在節點集區組態檔中定義的 labels
值。如需 Kubernetes 工作負載資源的相關資訊,請參閱 Kubernetes 說明文件中的工作負載。kubectl apply -f
命令套用組態。若要將工作負載重新指派給不同的節點集區,請執行以下動作:
nodeSelector
的值更新為新值。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
是屬於此節點集區的節點數 (整數)。您可以將標籤新增至節點集區,並透過節點集區組態檔,同時調整其節點。
開啟您要更新的節點集區的組態檔。
如果您要增加或減少此節點集區中的節點數,請更新 replicas
後的數字。
如果您要新增標籤,請將它們縮排至 labels
下方。例如:
labels:
key1: value1
key2: value2
儲存節點集區組態檔。
在終端機中執行:
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 上的工作負載叢集是依照反相似性規則部署的,這些規則將每個節點集區中的控制平面節點和工作節點分散到多個 ESXi 主機。執行以下動作,以在叢集建立期間停用或重新啟用反相似性規則:
將 kubectl
內容設定為管理叢集:
kubectl config use-context MGMT-CLUSTER-NAME-admin@MGMT-CLUSTER-NAME
其中,MGMT-CLUSTER-NAME
是叢集的名稱。
在 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"
]
複製上一個步驟的輸出,變更 --feature-gates
值,並將引數清單傳遞至 kubectl patch
命令以修改物件中的值。例如,要將 NodeAntiAffinity
和 NodeLabeling
功能閘道設定為 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"
]}]'