方案:防止在特定节点上调度容器组(pod) - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

方案:防止在特定节点上调度容器组(pod)

概览

具有专用处理器(例如 GPU)的节点运行成本可能比在标准计算机上的节点更昂贵。为防止这些节点被不需要专用硬件的工作负载占用,您可以使用 Kubernetes 污点。污点会将节点标记为排斥容差不匹配的容器组(pod),从而确保仅调度兼容的工作负载。有关更多信息,请参阅 Kubernetes 文档中的 Taints and Tolerations

可以使用 Amazon Web Services Management Console 或通过 Amazon EKS API,将 Kubernetes 节点污点应用于新的和现有的托管节点组。此方案展示了如何使用 Amazon CLI 对 Amazon EKS 托管节点组应用污点。有关使用 Amazon Web Services Management Console 创建带有污点的节点组的信息,请参见 为集群创建托管式节点组

先决条件

步数

步骤 1:创建带污点的节点组

使用 aws eks create-nodegroup 命令创建带污点的新托管节点组。此示例应用了一个键为 dedicated、值为 gpuGroup、效果为 NO_SCHEDULE 的污点。

aws eks create-nodegroup \ --cli-input-json ' { "clusterName": "my-cluster", "nodegroupName": "node-taints-example", "subnets": [ "subnet-1234567890abcdef0", "subnet-abcdef01234567890", "subnet-021345abcdef67890" ], "nodeRole": "arn:aws-cn:iam::111122223333:role/AmazonEKSNodeRole", "taints": [ { "key": "dedicated", "value": "gpuGroup", "effect": "NO_SCHEDULE" } ] }'

有关更多信息和示例,请参阅 Kubernetes 参考文档中的 taint

步骤 2:更新现有节点组上的污点

使用 aws eks update-nodegroup-config Amazon CLI 命令为托管节点组添加、删除或替换污点。

aws eks update-nodegroup-config --cluster-name my-cluster --nodegroup-name node-taints-example --taints 'removeTaints=[{key=dedicated,value=gpuGroup,effect=NO_SCHEDULE}]'

备注

  • 创建节点组后,可以使用 UpdateNodegroupConfig API 更新污点。

  • 污点键必须以字母或数字开头。可以包含字母、数字、连字符(-)、句点(.)和下划线(_)。最长可为 63 个字符

  • 污点键也可以以 DNS 子域前缀和单个 / 开头。如果它以 DNS 子域前缀开头,则长度可以为 253 个字符。

  • 值是可选的,必须以字母或数字开头。可以包含字母、数字、连字符(-)、句点(.)和下划线(_)。最长可为 63 个字符

  • 直接使用 Kubernetes 或 Amazon Web Services Management Console 时,污点效果必须为 NoSchedulePreferNoScheduleNoExecute。但是,使用 Amazon CLI 或 API 时,污点效果必须是 NO_SCHEDULEPREFER_NO_SCHEDULENO_EXECUTE

  • 每个节点组最多允许 50 个污点。

  • 如果从节点中手动删除使用托管节点组创建的污点,则 Amazon EKS 不会将污点重新添加回该节点。即使在托管节点组配置中指定了污点,也是如此。