本主题介绍了如何在工作负载集群中创建、更新和删除节点池。节点池使单个工作负载集群能够包含和管理不同类型的节点,以支持不同应用程序的不同需求。
例如,集群可以使用具有高存储容量的节点来运行数据存储,以及使用瘦节点处理应用程序请求。
注意无法在单节点集群中创建节点池。
要在由 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
该命令会返回集群中所有节点池的列表以及每个节点池中副本的状态。
要在集群中创建节点池,请执行以下操作:
为节点池创建配置文件。有关示例配置文件,请参见示例配置。
有关配置属性的完整列表,请参见配置属性 (Configuration Properties)。
创建配置文件定义的节点池:
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 | 任意 | TKG on AWS 或 Azure | 用于放置节点的 AZ。 |
nodeMachineType |
string | 任意 | TKG on AWS 或 Azure | 分别为 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 :
|
对象 | 基于 TKC | 全部 | 要用于节点池的 TKR 的名称。例如,v1.26.8---vmware.2-tkg.2 。 |
tkrResolver |
string | 基于类 | 全部 | 基于类的集群必需。Cluster 资源中的run.tanzu.vmware.com/resolve-os-image 注释的值。 |
nodeDrainTimeout |
metav1.Duration | 任意 | 全部 | 节点引流超时。 |
vsphere |
对象 | 任意 | 全部 | 请参见 [配置属性(仅限 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"
]}]'