当前位置: 首页 > 知识库问答 >
问题:

Kubernetes AntiAffinity-限制每个节点的最大相同POD数

长孙高远
2023-03-14

我有一个kubernetes集群,有4个节点。我部署了一个pod作为部署,有8个副本。当我部署这个时,kubernetes有时会在node1中安排4个吊舱,其余的4个吊舱安排在node2中。在这种情况下,node3和node4没有运行此容器(但其他容器在那里运行)

我确实理解Pod亲和力和反亲和力,他们有Pod反亲和力的ZooWatch示例,这很好。这将确保没有2个pod会部署在同一个节点上。

这很好,但是我的要求略有不同,我想限制k8s可以部署到一个具有节点反亲和性的节点的最大POD数量。

在上面的示例中,我需要确保在一个节点上部署的同一POD实例不超过3个。我曾想过在POD上设置内存/cpu限制,但这似乎是个坏主意,因为我有不同配置的节点。有没有办法做到这一点?

(更新1)-我知道我的问题不够清楚。为了进一步澄清,我想将pod的实例限制为针对特定部署的每个节点最多3个。例如,我如何告诉k8s每个节点部署的nginx pod实例不超过3个?该限制应仅适用于nginx部署,而不适用于其他部署。

(更新2)-用场景进一步解释。一个k8s群集,具有4个工作节点。2部署

  1. nginx部署-

需求-嘿,kubernetes,我想在4个节点中安排10个“自定义用户代理”吊舱(本例中为2个吊舱),但我想确保每个节点最多只能有3个“自定义用户代理”吊舱。对于“nginx”pod,不应该有任何这样的限制,这意味着我不介意k8s是否在一个节点中调度5个nginx,而在第二个节点中调度5个nginx的其余部分。

共有3个答案

耿建弼
2023-03-14

该功能是alpha的,我相信它被称为topologyKey,这取决于您的Kubernetes版本,您可能可以使用它。https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

程振濂
2023-03-14

因此,通过topologykey可以为每个节点设置最小数量的pod

是的,您可以通过将topologykey设置为“kubernetes.io/hostname”的pod关联,通过部署对象在每个节点上生成一个pod。

在上述示例中,您将具有以下行为:

翟泰
2023-03-14

我自己没有找到这个的官方留档。但是我认为你可以使用preferredDuringSchedulingIgnoredDuringExecution选项的podantiaffinity。这将阻止k8s在单个节点上放置相同的pod,但如果这是不可能的,它将选择最符合条件的现有节点。官方文档在这里

affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchLabels:
              name: deployment-name
          topologyKey: kubernetes.io/hostname
        weight: 100
 类似资料:
  • 在尝试了各种提供程序(bare kubernetes、openshift、aws eks)后,我们发现即使节点有足够的资源(cpu、ram、hdd),在达到~110个POD后,新的POD仍处于挂起状态,除了事件之外没有任何事件或错误 我们已经尝试在kubelet、scheduler等中搜索任何相关的日志--但除了前面提到的这个事件之外什么也没有。 是否有人成功地运行了每个节点超过110个豆荚?我们

  • 我想知道kubernetes在有多个等待作业时是如何选择要运行的作业的。它不是FIFO,而是LIFO? 这是我的实验设置。 Kubernetes服务器版本1.21.5 kubernetes集群中的1个节点 通过将<code>ResourceQuota</code>设置为命名空间,限制每个节点3个pod 我安排了9个< code > cron jobs (< code > cron job 1 ..

  • 问题内容: 如果有人可以建议每个ES节点的最佳分片数量以获得最佳性能,或者提供任何建议的方式来得出一个应该使用的分片数量(如果有核心数量和内存占用量的话),我将不胜感激。 问题答案: 分片前要考虑以下三种情况。 情况1) 您想将Elasticsearch与故障转移和高可用性一起使用。然后,您要进行分片。在这种情况下,您需要根据要在生产中使用的节点[ES实例]的数量来选择分片的数量。 考虑您要在生产

  • 2.)我已经通过在kubernetes中创建LoadBalancer类型的服务向外部世界公开了我的REACT应用程序,并且我能够从浏览器访问REACT应用程序endpoint。现在,是否可以从节点内部的REACT应用程序访问EXPRESS应用程序而不向外部世界公开我的EXPRESS应用程序?如何实现这一点? 提前谢了。

  • 我们在一个3节点kubernetes集群上用3个pods运行我们的应用程序。当我们部署应用程序时,有时,pods被调度到同一个kubernetes节点。 我们希望我们的 Pod 以这样一种方式调度,即它将我们的 Pod 分布在节点上(同一应用程序的 2 个 Pod 不应该是同一个节点)。事实上,根据文档(https://kubernetes.io/docs/concepts/configurati

  • 问题内容: 我已经为kubernetes中的front(REACT)和backend(EXPRESS NODE JS)项目泊坞窗并创建了部署和服务。我已经在Google Cloud Platform中的两个 Pod (即 一个 Pod- > REACT APP和SECOND POD-> EXPRESS NODE JS )的同一节点的Kubernetes(单节点集群)中成功部署了。 题: 1.)如何