Kubernetes反亲和性 - 限制每个节点上相同Pod的最大数量

12
我有一个由4个节点组成的kubernetes集群。我部署了一个pod作为deployment,并拥有8个副本。当我部署它时,kubernetes有时会在node1中调度4个pod,其余的4个pod在node2中。在这种情况下,node3和node4没有此容器运行(但其他容器在那里运行)。
我确实理解Pod亲和力和反亲和性,其中他们对pod-anti-affinity有Zookeeper示例,这非常好。这将确保没有2个pod部署在同一节点上。
这很好,但是我的要求略有不同,我想使用节点反亲和性限制k8s可以部署到一个节点的最大pod数。
我需要确保在上面的示例中不会部署超过3个相同pod的实例。我考虑在pod上设置内存/ CPU限制,但这似乎是个坏主意,因为我有不同配置的节点。有什么方法可以实现这一点吗?
(更新1)-我明白我的问题不够清晰。为了进一步澄清,我想要的是限制特定部署的每个节点上pod的最大数量为3个实例。例如,如何告诉k8s不要在每个节点上部署超过3个nginx pod实例?该限制仅应适用于nginx部署,而不适用于其他部署。
(更新2)-为了进一步解释一个场景。 一个k8s集群,有4个工作节点。 2个部署
1.一个nginx部署->副本= 10 2.自定义用户代理部署->副本10
要求-Hey kubernetes,我想在4个节点中安排“自定义用户代理” pod(此示例中的Pod#2),但我想确保每个节点最多只有3个“自定义用户代理”的pod。对于“nginx” pod,不应该有任何限制,这意味着如果k8s在一个节点中安排5个nginx,则我不介意在第二个节点中安排其余的5个。

这里有什么进展吗?这正是我遇到的问题,因为我必须使用“hostNetwork:true”,所以我只能容纳每个节点有限的最大Pod数量。 - Liviu Chircu
4个回答

4

我自己没有找到官方文档,但我认为您可以使用 preferredDuringSchedulingIgnoredDuringExecution 选项来使用 podantiaffinity。这将防止 k8s 在同一节点上放置相同的 pods,但如果不可能,它将选择最合适的现有节点。官方文档在这里

affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchLabels:
              name: deployment-name
          topologyKey: kubernetes.io/hostname
        weight: 100

你知道吗,如果所有节点至少有一个 pod,而有些节点有两个 pod,它会优先将新的 pod 调度到具有 1 个 pod 的节点上,然后再调度到具有 2 个 pod 的节点上吗?这似乎是一种合理的实现方式,但我找不到明确的文档说明。 - dsollen

2
“所以,通过使用拓扑键(topologykey),可以为每个节点设置最少的Pod数量。”
“是的,您可以通过部署对象并使用Pod亲和性来实现在每个节点上生成一个Pod,其中topologykey设置为“kubernetes.io/hostname”。”
“使用上述示例,您将获得以下行为:”

topology key

我希望这是您要找的内容: {{link1:在此输入图像描述}}

2
实际上相反,我如何设置每个节点的同一Pod的最大数量? - zeroweb
这显然是不可行的。对于调度,您可以去更改调度程序的源代码或编写一些节点部分的算法。此外,如果您转向托管服务之类的东西,事情会变得非常混乱。因此,您应该以良好架构的格式查看实现部分。 - redzack
请设置您的请求:这样您就可以分配资源(内存不可压缩)。您还需要使用污点和容忍来确保只有您的 Pod 类型与那些节点匹配,以便数学计算正确。 - Leblanc Meneses

1

我们如何限制容器上的Pods,这就是我卡住的地方。 - zeroweb
什么是在容器上限制Pod的意思?Pod是一组容器,如果你想限制容器数量,那么就不要将它们添加到PodSpec数组中即可。 - DanF
2
抱歉,我的意思是限制在“节点”上运行的总Pod数量。我不想像@suren建议的那样强制实施全局Pod限制。该限制仅适用于一个Pod。 - zeroweb
换句话说,如何限制同一节点上运行的相同Pod的最大实例数?例如,如果有一个nginx Pod,我该如何确保k8s每个节点部署不超过4个nginx Pod实例?该限制应仅适用于特定部署。所有其他部署不应受影响。 - zeroweb
我已更新问题并加入了一个示例。希望这样更清晰明了,进一步澄清我的问题。 - zeroweb
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接