本页面简要介绍了 GKE on VMware 上的污点和容忍。当您安排工作负载以在集群上进行部署时,可使用节点污点来控制允许工作负载在哪些节点上运行。
概览
当您提交要在集群中运行的工作负载时,scheduler会确定要在何处放置与工作负载关联的 Pod。调度程序可以在任何满足 Pod 的 CPU、内存和自定义资源要求的节点上自由放置 Pod。
如果您的集群运行各种工作负载,您可能希望对特定节点池上可以运行哪些工作负载进行一些控制。
利用节点污点,您可以标记节点,以使调度程序避免或阻止将其用于某些 Pod。利用补充功能“容忍”,您可以指定能在“有污点的”节点上使用的 Pod。
污点和容忍协同工作,确保 Pod 不会被调度到不当的节点上。
污点是与“效果”相关联的键值对。下表列出了可用的变量效果:
效果 | 说明 |
---|---|
NoSchedule |
不能容忍此污点的 Pod 不会被调度到节点上;现有 Pod 不会从节点中逐出。 |
PreferNoSchedule |
Kubernetes 会尽量避免将不能容忍此污点的 Pod 调度到节点上。 |
NoExecute |
如果 Pod 已在节点上运行,则该 Pod 会从节点中被逐出;如果尚未在节点上运行,则不会被调度到节点上。 |
在 GKE on VMware 中设置节点污点的优势
虽然您可以使用 kubectl taint
命令设置节点污点,但相比使用 kubectl
,使用 gkectl
或 Google Cloud 控制台设置节点污点具有以下优势:
- 重启或替换节点时会保留污点。
- 将节点添加到节点池时,系统会自动创建污点。
- 使用
gkectl
添加污点时,系统会在集群自动扩缩期间自动创建污点。(自动扩缩功能目前不支持在 Google Cloud 控制台中创建的节点池。)
设置节点污点
您可以在创建用户集群时或者在创建集群后,在节点池中设置节点污点。本部分介绍如何向已创建的集群添加污点,但该过程与创建新集群时添加污点的过程类似。
您可以添加新的节点池并设置污点,也可以更新现有节点池并设置污点。在添加其他节点池之前,请验证集群上是否有足够的可用 IP 地址。
如果您在 Google Cloud 控制台中创建了集群,则可以使用 Google Cloud 控制台添加或更新节点池。
在新的节点池中设置污点
控制台
在控制台中,前往 Google Kubernetes Engine 集群概览页面。
选择用户集群所在的 Google Cloud 项目。
在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息。
点击
添加节点池。配置节点池:
- 输入节点池名称。
- 输入池中每个节点的 vCPUs 数量(每个用户集群工作器最少 4 个)。
- 输入池中每个节点的内存大小(以兆字节 (MiB) 为单位,每个用户集群工作器节点最少 8192 MiB,并且必须是 4 的倍数)。
- 在副本字段中,输入池中的节点数(最少 3 个)。
选择操作系统映像类型:Ubuntu Containerd 或 COS。
输入启动磁盘大小(以吉比字节 (GiB) 为单位,默认值为 40 GiB)。
在节点池元数据(可选)部分中,点击 + 添加污点。输入污点的键、值和效果。根据需要重复上述步骤。
(可选)点击 + 添加 Kubernetes 标签。输入标签的键和值。根据需要重复上述步骤。
点击创建。
Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件和状态消息。
命令行
-
您必须指定以下字段:
nodePools.[i].name
nodePools[i].cpus
nodePools.[i].memoryMB
nodePools.[i].replicas
以下字段是可选的。如果您未添加
nodePools[i].bootDiskSizeGB
或nodePools[i].osImageType
,则系统会使用默认值。 请填写
nodePools[i].taints
部分。例如:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
(可选)填写以下部分:
nodePools[i].labels
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]
替换为用户集群配置文件的路径。
在现有节点池中设置污点
控制台
在控制台中,前往 Google Kubernetes Engine 集群概览页面。
选择用户集群所在的 Google Cloud 项目。
在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息。
点击节点标签页。
点击要修改的节点池的名称。
点击节点池元数据(可选)旁边的
修改,然后点击 + 添加污点。输入污点的键、值和效果。根据需要重复上述步骤。点击完成。
点击
以返回到上一页。Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件和状态消息。
命令行
请填写
nodePools[i].taints
。例如:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
运行以下命令:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
替换以下内容:
将
[ADMIN_CLUSTER_KUBECONFIG]
替换为管理员集群的 kubeconfig 文件的路径。将
[USER_CLUSTER_CONFIG]
替换为用户集群配置文件的路径。
配置 Pod 以容忍污点
要配置 Pod 以容忍污点,您可以在 Pod 的规范中加入 tolerations
字段。在以下示例中,Pod 可以安排在具有 dedicated=experimental:NoSchedule
污点的节点上:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
如需了解其他示例,请参阅污点和容忍设置。