我有一些Kubernetes集群,每个集群中都有不同的#of个节点。而且我的config部署具有“副本:#nodes”。没有设置用于调度该Pod的特定配置,但是在部署之后,就节点上Pod的分布而言,我看到了奇怪的行为。
示例:
对于30个节点的集群(30个副本),所有30个pod副本仅分布在25个节点上,其他5个节点在集群中处于理想状态。 对于许多其他不同的集群,情况相似,并且在每个新的/重新部署中,此计数都不同。
问题:
我想将Pod副本分发到所有节点上。如果我设置“ replicas:#nodes”,则每个节点中应该有一个Pod副本。如果我将副本数量增加/增加一倍,那么它应该平均分配。 Kubernetes部署yaml中是否有任何特定配置?
具有节点AntiAffinity的配置,但此配置仍如上所述。尝试使用“ requiredDuringSchedulingIgnoredDuringExecution”,并且确实在每个节点中部署了一个Pod,但是如果我在部署期间增加副本或任何节点出现故障,则整个部署将失败。
metadata:
labels:
app: test1
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test1
topologyKey: kubernetes.io/hostname
答案 0 :(得分:0)
如果每个节点部署需要1个Pod,则应使用daemonSet而不是副本集。或者,如果每个节点需要超过1个容器,并且仍然希望容器分布基本均匀,则可以使用容器抗亲和力,如我所讨论的in this post
答案 1 :(得分:0)
请参阅Pod拓扑传播限制https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ 此功能使您可以根据区域,区域,节点和其他用户定义的拓扑域来精细定义Pod在整个群集中的分布方式。
因此,您可以定义自己的规则来分配豆荚。