创建用户集群时,您必须配置至少一个节点池,即一组具有相同配置的节点。创建集群后,您可以添加新的节点池、更新节点池设置和删除节点池。
选择用于管理节点池的工具
如何创建、更新和删除节点池取决于集群是否由 GKE On-Prem API 管理。如果满足以下任一条件,则用户集群由 GKE On-Prem API 管理:
集群是在 Google Cloud 控制台中或使用 Google Cloud CLI (gcloud CLI) 创建的,后者会自动配置 GKE On-Prem API 来管理集群。
该集群是使用
gkectl
创建的,但已配置为由 GKE On-Prem API 管理。
如果 GKE On-Prem API 正在管理用户集群,您可以使用控制台或 gcloud CLI 管理节点池。如果用户集群不是由 GKE On-Prem API 管理,请在管理员工作站上使用 gkectl
来管理节点池。
如果您计划使用 gcloud CLI,请在已安装 gcloud CLI 的计算机上执行以下操作:
使用您的 Google 账号登录
gcloud auth login
更新组件:
gcloud components update
添加节点池
如果集群由 GKE On-Prem API 管理,您可以使用控制台或 gcloud CLI 添加节点池;但是,您需要在管理员工作站上使用 gkectl
来配置以下节点池设置:
- Windows 操作系统映像类型
- vSphere 数据存储区
vSphere 标记 如果要将标记附加到节点池中的所有虚拟机,您的 vCenter 用户账号必须具有以下 vSphere 标记权限:
- vSphere 标记。分配或取消分配 vSphere 标记
- vSphere 标记。在对象上分配或取消分配 vSphere 标记 (vSphere 7)
在添加其他节点池之前,请验证集群上是否有足够的可用 IP 地址。
gkectl
在管理员工作站上执行以下步骤:
-
您必须指定以下字段:
nodePools.[i].name
nodePools[i].cpus
nodePools.[i].memoryMB
nodePools.[i].replicas
以下字段是可选的。如果您未添加
nodePools[i].bootDiskSizeGB
或nodePools[i].osImageType
,则系统会使用默认值。nodePools[i].labels
nodePools[i].taints
nodePools[i].bootDiskSizeGB
nodePools[i].osImageType
nodePools[i].vsphere.datastore
nodePools[i].vsphere.tags
运行以下命令:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
替换以下内容:
将
ADMIN_CLUSTER_KUBECONFIG
替换为管理员集群的 kubeconfig 文件的路径。将
USER_CLUSTER_CONFIG
替换为用户集群配置文件的路径。
配置示例
以下示例配置中有四个节点池,每个节点池具有不同的特性:
pool-1
:仅指定了所需的最少属性pool-2
:包括vsphere.datastore
和vsphere.tags
pool-3
:包括taints
和labels
pool-4
:包括osImageType
和bootDiskSizeGB
nodePools:
- name: pool-1
cpus: 4
memoryMB: 8192
replicas: 5
- name: pool-2
cpus: 8
memoryMB: 16384
replicas: 3
vsphere:
datastore: my_datastore
tags:
- category: "purpose"
name: "testing"
- name: pool-3
cpus: 4
memoryMB: 8192
replicas: 5
taints:
- key: "example-key"
effect: NoSchedule
labels:
environment: production
app: nginx
- name: pool-4
cpus: 4
memoryMB: 8192
replicas: 5
osImageType: cos
bootDiskSizeGB: 40
控制台
在控制台中,前往 Google Kubernetes Engine 集群概览页面。
选择用户集群所在的 Google Cloud 项目。
在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息。
点击
添加节点池。配置节点池:
- 输入节点池名称。
- 输入池中每个节点的 vCPUs 数量(每个用户集群工作器最少 4 个)。
- 输入池中每个节点的内存大小(以兆字节 (MiB) 为单位,每个用户集群工作器节点最少 8192 MiB,并且必须是 4 的倍数)。
- 在节点字段中,输入池中的节点数(最少 3 个)。
选择操作系统映像类型:Ubuntu Containerd 或 COS。
输入启动磁盘大小(以吉比字节 (GiB) 为单位,默认值为 40 GiB)。
在节点池元数据(可选)部分中,如果要添加 Kubernetes 标签和污点,请执行以下操作:
- 点击 + 添加 Kubernetes 标签。输入标签的键和值。根据需要重复上述步骤。
- 点击 + 添加污点。输入污点的键、值和效果。根据需要重复上述步骤。
点击创建。
Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件和状态消息。
gcloud CLI
运行以下命令以创建节点池:
gcloud container vmware node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --image-type=IMAGE_TYPE \ --boot-disk-size=BOOT_DISK_SIZE \ --cpus=vCPUS \ --memory=MEMORY \ --replicas=NODES
替换以下内容:
NODE_POOL_NAME
:您为节点池选择的名称。该名称必须:- 最多包含 40 个字符
- 只能包含小写字母数字字符或连字符 (
-
) - 以字母字符开头
- 以字母数字字符结尾
USER_CLUSTER_NAME
:将在其中创建节点池的用户集群的名称。
FLEET_HOST_PROJECT_ID
:集群在其中注册的项目的 ID。LOCATION
:与用户集群关联的 Google Cloud 位置。IMAGE_TYPE
:要在节点池中的虚拟机上运行的操作系统映像类型。设置为以下其中一项:ubuntu_containerd
或cos
。BOOT_DISK_SIZE
:池中每个节点的启动磁盘的大小(以吉比字节 [GiB] 为单位)。最小值为 40 GiB。vCPUs
:节点池中每个节点的 vCPU 数量。最小值为 4。MEMORY
:池中每个节点的内存大小(以兆比字节 [MiB] 为单位)。每个用户集群工作器节点至少需要 8192 MiB,并且该值必须是 4 的倍数。NODES
:节点池中的节点数。最小值为 3。
例如:
gcloud container vmware node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --image-type=ubuntu_containerd \ --boot-disk-size=40 \ --cpus=8 \ --memory=8192 \ --replicas=5
您可以选择性地指定以下内容:
--enable-load-balancer
:仅与 MetalLB 负载均衡器相关。如果已指定,则允许 MetalLB speaker 在池中的节点上运行。必须至少为 MetalLB 负载均衡器启用一个节点池。--image=IMAGE
:vCenter 中的操作系统映像名称。--node-labels=KEY=VALUE,...
:应用于池中每个节点的 Kubernetes 标签(键值对)的英文逗号分隔列表。--node-taints=KEY=VALUE:EFFECT,...
应用于池中每个节点的 Kubernetes 污点的逗号分隔列表。污点是与效果相关联的键值对。污点用于 Pod 调度的容忍。为 EFFECT 指定以下其中一项:NoSchedule
、PreferNoSchedule
、NoExecute
。
例如:
gcloud container vmware node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --image-type=ubuntu_containerd \ --boot-disk-size=40 \ --cpus=8 \ --memory=8192 \ --replicas=5 \ --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
如需了解其他可选标志,请参阅 gcloud 参考文档。
更新节点池
当您增加副本数量时,GKE on VMware 会向用户集群添加所需数量的节点;当您减少副本数量时,系统会移除节点。更改节点池的副本数量不会中断工作负载。如果增加副本数量,请确保有可用的 IP 地址。
如果您更新任何其他节点池字段,则会触发集群的滚动更新。在滚动更新中,GKE on VMware 会创建新节点,然后删除旧节点。系统会重复此过程,直到所有旧节点都替换为新节点。此过程不会导致停机,但在更新期间集群必须有一个额外的 IP 地址可供使用。
假设节点池在更新结束时将有 N 个节点。那么,您必须至少有 N+1 个 IP 地址可用于该池中的节点。这意味着,如果要通过向一个或多个池添加节点来调整集群大小,则在结束大小调整时,您所拥有的的 IP 地址数量应该至少比集群的所有节点池中的节点总数多出一个。 如需了解详情,请参阅验证是否有足够的可用 IP 地址。
如需更新用户集群上的节点池,请执行以下操作:
gkectl
在用户集群配置文件的
nodePools
部分中修改要更改的字段的值。更新集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
替换以下内容:
将
ADMIN_CLUSTER_KUBECONFIG
替换为管理员集群的 kubeconfig 文件的路径。将
USER_CLUSTER_CONFIG
替换为用户集群配置文件的路径。
更新节点池使用的 osImageType
如需更新节点池以使用其他 osImageType
,您必须使用命令行。如需更改节点池使用的 osImageType
,请更新节点池的配置文件(如以下示例所示),然后运行 gkectl update cluster
。
nodePools: - name: np-1 cpus: 4 memoryMB: 8192 replicas: 3 osImageType: ubuntu_containerd
控制台
您只能使用控制台更新以下字段:
- 副本数量
- 内存
- vCPU 的数量
如需更新其他字段,请使用 gcloud CLI 或 gkectl
。
在控制台中,前往 Google Kubernetes Engine 集群概览页面。
选择用户集群所在的 Google Cloud 项目。
在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息。
点击节点标签页。
点击要修改的节点池的名称。
点击要修改的字段旁边的
修改,然后点击完成。点击
以返回到上一页。Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件和状态消息。
gcloud CLI
选择性地列出节点池以获取要更新的节点池的名称:
gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
运行以下命令以更新节点池:
gcloud container vmware node-pools update NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --ATTRIBUTE_TO_UPDATE \ ...
替换以下内容:
NODE_POOL_NAME
:要更新的节点池的名称。USER_CLUSTER_NAME
:包含节点池的用户集群的名称。LOCATION
:与用户集群关联的 Google Cloud 位置。ATTRIBUTE_TO_UPDATE
:用于更新节点池特性的一个或多个标志。例如,如需更改池中的 vCPU 和节点数量,请运行以下命令。
gcloud container vmware node-pools update default-pool \ --cluster=user-cluster-1 \ --project=example-project-12345 --location=us-west1 \ --cpus=10 \ --replicas=6
如需了解您可以更新的节点池特性,请参阅 gcloud 参考文档。
验证您的更改
如需验证节点池是否已创建或更新,请检查集群节点:
gkectl
运行以下命令:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide
如果需要还原更改,请修改集群配置文件并运行 gkectl update cluster
。
控制台
在控制台中,前往 Google Kubernetes Engine 集群概览页面。
选择用户集群所在的 Google Cloud 项目。
在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息。
点击节点标签页。
点击要查看的节点池的名称。
gcloud CLI
运行以下命令:
gcloud container vmware node-pools describe NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
删除节点池
虽然您可以删除节点池,但用户集群必须至少具有一个节点池。删除节点池会导致系统立即移除池中的节点,无论这些节点是否正在运行工作负载。
要从用户集群中删除节点池,请执行以下操作:
gkectl
确保受影响的节点上没有工作负载运行。
从用户集群配置文件的
nodePools
部分移除其定义。更新集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
替换以下内容:
将
[ADMIN_CLUSTER_KUBECONFIG]
替换为管理员集群的 kubeconfig 文件的路径。将
[USER_CLUSTER_CONFIG]
替换为用户集群配置文件的路径。
控制台
确保受影响的节点上没有工作负载运行。
在控制台中,前往 Google Kubernetes Engine 集群概览页面。
选择用户集群所在的 Google Cloud 项目。
在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息。
点击节点标签页。
点击要删除的节点池的名称。
点击
删除。点击
以返回到上一页。Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件和状态消息。
gcloud CLI
选择性地列出节点池以获取要删除的节点池的名称:
gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
运行以下命令以删除节点池:
gcloud container vmware node-pools delete NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
替换以下内容:
NODE_POOL_NAME
:要删除的节点池的名称。USER_CLUSTER_NAME
:包含节点池的用户集群的名称。LOCATION
:与用户集群关联的 Google Cloud 位置。
问题排查
通常,
gkectl update cluster
命令会在失败时提供详细信息。如果命令成功并且您没有看到节点,则可以使用诊断集群问题指南进行问题排查。集群资源可能不足,例如在创建或更新节点池期间缺少可用的 IP 地址。请参阅调整用户集群大小主题,详细了解如何验证是否有可用的 IP 地址。
您还可以查看常规问题排查指南。
卡在
Creating node MachineDeployment(s) in user cluster…
。创建或更新用户集群中的节点池可能需要一些时间。但是,如果等待时间非常长并且您怀疑某些操作可能失败,则可以运行以下命令:
- 运行
kubectl get nodes
以获取节点的状态。 - 对于任何未准备就绪的节点,运行
kubectl describe node NODE_NAME
以获取详细信息。
- 运行