微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在kubernetes集群中的一个节点上调度几个Statefulset Pod,在其他节点上调度

如何解决在kubernetes集群中的一个节点上调度几个Statefulset Pod,在其他节点上调度

我有一个由3个工作程序节点组成的kubernetes集群,我需要在其中部署一个具有6个副本的statefulset应用程序。 我的要求是确保在每种情况下,每个节点都应在6个副本中恰好获得2个容器。基本上,

node1 - 2 pods of app
node2 - 2 pods of app
node3 - 2 pods of app
========================
Total   6 pods of app        

任何帮助将不胜感激!

解决方法

您应该使用Pod Anti-Affinity来确保Pod已传播到其他节点

由于节点上将有多个吊舱,因此请使用preferredDuringSchedulingIgnoredDuringExecution

当应用程序带有标签app: mydb(使用适合您的情况)的示例:

    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - mydb
          topologyKey: "kubernetes.io/hostname"

每个节点应在6个副本中准确地获得2个容器

尽量不要认为Pod已固定到特定节点。 Kubernetes工作负载的想法是该工作负载独立于诸如节点之类的基础架构。我想-您真正想要的是散布豆荚以提高可用性-例如如果一个节点出现故障,您的系统仍将可用。

如果您在云提供商处运行,则可能应该设计反亲和性,以便将Pod安排到不同的可用区,而不仅安排到不同的节点-而且要求您的群集部署在一个Region中(由多个可用区)。

在可用区中分布吊舱

均匀分布后,所有3个节点(分散在三个区域中)将具有2个容器。那没问题。硬性要求是,如果1个节点(说节点1)发生故障,那么它是2个Pod,无需在其他节点上重新安排。恢复节点1后,现在将在其上重新安排这2个Pod。因此,可以说,所有3对Pod具有不同的节点/区域亲和力。有什么想法吗?

可以用PodAffinity完成,但更可能使用TopologySpreadConstraints完成,您可能会使用topologyKey: topology.kubernetes.io/zone,但这取决于您节点的标签有。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。