我有一个包含许多节点池的 Kubernetes 集群。有时部署会失败,因为 Kubernetes 选择的节点池没有足够的可用资源。
是否有某种方法可以强制 Kubernetes 选择一个具有整个 Pod 集所请求的资源量的节点池?
答案1
您可以限制 Pod,使其只能在一组特定的节点上运行。有几种方法可以做到这一点,推荐的方法是使用标签选择器。
您可以使用以下任一方法来选择 Kubernetes 调度特定 Pod 的位置:
节点选择器字段匹配节点标签
亲和性和反亲和性
nodeName 字段
A节点选择器指定使用节点上的自定义标签和 pod 中指定的选择器定义的键/值对的映射。
为了使 pod 有资格在节点上运行,pod 必须具有与节点上的标签相同的键/值节点选择器。
注意:您不能将节点选择器直接添加到现有的计划 pod。
nodeSelector 是将 Pod 限制到具有特定标签的节点的最简单方法,而亲和性和反亲和性扩展了您可以定义的约束类型。亲和性功能包含两种类型的亲和性:
- 节点亲和性功能类似于 nodeSelector 字段,但更具表现力,并允许您指定软规则。
- Pod 间亲和性/反亲和性允许您约束 Pod 与其他 Pod 上的标签。
对于节点名,您可以参考请访问此链接获取更多信息。
节点亲和性是 Pod 的一个属性,可以将它们吸引到一组节点,并且如前所述,节点选择器用于约束 Pod。因此,您可以使用污点和容忍度。
污点则相反,它们允许节点排斥一组 Pod。容忍度应用于 Pod,并允许 Pod 调度到具有匹配污点的节点上。污点和容忍度协同工作,以确保 Pod 不会被调度到不合适的节点上。一个或多个污点应用于一个节点。这标志着该节点应该拒绝任何不容忍污点的 Pod。