如何使用 Kubernetes 跨节点均匀分布 K8 Deployments?

How to distribute K8 Deployments evenly across nodes with Kubernetes?

我有 12 个 K8 部署,应该根据资源利用率(如 uptime 命令)均匀分布在 3 个 K8 节点上。我希望 Kubernetes 在创建 pod 时自动选择使用最少资源的节点,我认为这应该会导致分布稍微均匀,但令我惊讶的是 Kubernetes 创造了大部分 Pods 在几乎不处理负载的同一单个节点上,而其他节点几乎根本没有被利用。

我听说过像这样使用 topologySpreadConstraints

topologySpreadConstraints:
              - maxSkew: 1
                topologyKey: kubernetes.io/hostname
                whenUnsatisfiable: ScheduleAnyway
                labelSelector:
                    matchLabels:
                      type: wordpress-3 

但我无法让它正常工作,实现我正在寻找的部署的均匀分布行为的正确方法是什么?谢谢!

您使用的是 bitnami 的 wordpress 图表吗?

如果是这样,您可以更新您传递到图表中的 values.yaml 并像这样设置 anti-affinity:


# Affinity
affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - topologyKey: kubernetes.io/hostname
      labelSelector:
        matchLabels:
          app.kubernetes.io/instance: {name of your Wordpress release}

这将强制 kubernetes 只允许一台主机(即节点)上有一个 Wordpress pod。我在我自己的 Wordpress 安装上使用这个设置,这意味着如果一个节点出现故障,它不会删除该站点,因为其他副本仍然 运行 并且在单独的节点上