如何使用 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 安装上使用这个设置,这意味着如果一个节点出现故障,它不会删除该站点,因为其他副本仍然 运行 并且在单独的节点上
我有 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 安装上使用这个设置,这意味着如果一个节点出现故障,它不会删除该站点,因为其他副本仍然 运行 并且在单独的节点上