gpt4 book ai didi

kubernetes - 避免 kubernetes 调度程序在 kubernetes 集群的单个节点中运行所有 pod

转载 作者:行者123 更新时间:2023-12-04 03:19:41 29 4
gpt4 key购买 nike

我有一个具有 4 个节点和一个主节点的 Kubernetes 集群。我正在尝试在所有节点中运行 5 个 nginx pod。目前,调度程序有时在一台机器上运行所有 pod,有时在不同的机器上运行。

如果我的节点出现故障并且我的所有 pod 都在同一个节点上运行,会发生什么?我们需要避免这种情况。

如何强制调度程序以循环方式在节点上运行 pod,以便如果任何节点出现故障,那么至少一个节点应该让 NGINX pod 处于运行模式。

这可能吗?如果可能,我们如何实现这种情况?

最佳答案

使用 Pod 拓扑传播约束
自 2021 年起,(v1.19 及更高版本)您可以使用 Pod Topology Spread Constraints topologySpreadConstraints默认情况下,我发现它比 podAntiAfinity 更合适对于这种情况。
主要区别在于 Anti-affinity 只能限制每个节点一个 pod,而 Pod 拓扑传播约束可以限制每个节点 N 个 pod。

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-example-deployment
spec:
replicas: 6
selector:
matchLabels:
app: nginx-example
template:
metadata:
labels:
app: nginx-example
spec:
containers:
- name: nginx
image: nginx:latest
# This sets how evenly spread the pods
# For example, if there are 3 nodes available,
# 2 pods are scheduled for each node.
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: nginx-example
更多详情见 KEP-895an official blog post.

关于kubernetes - 避免 kubernetes 调度程序在 kubernetes 集群的单个节点中运行所有 pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784480/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com