我有一个部署,我添加了如下亲和力 -
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- example.com
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: component
operator: In
values:
- myapp
topologyKey: "kubernetes.io/hostname"
现在,每当我更新此 pod 中的配置时,由于错误,升级的 pod 不会被调度 -
Warning FailedScheduling 12s default-scheduler 0/1 nodes are available: 1 node(s) didn't match pod anti-affinity rules. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod
请提供建议,我该如何解决这个问题。
尝试了 prefferedDuringSchedulingIgnoredDuring 执行方法,但没有运气
我的集群中有 3 个节点。
您可以设置:
strategy:
rollingUpdate:
maxUnavailable: 50%
默认情况下,该值设置为 25%,在您的情况下意味着 0(3 的 25% 为 0.75,四舍五入为 0)。
所以这意味着你有 3 个 pod,它们必须全部进入 3 个不同的节点,并且在部署时你不能删除任何 pod(maxUnavailable),同时你不能调度更多的 pod(antiAffinity)。没用。
.spec.strategy.rollingUpdate.maxUnavailable 是一个可选字段, 指定期间不可用的 Pod 的最大数量 更新过程。该值可以是绝对数字(例如, 5) 或所需 Pod 的百分比(例如 10%)。绝对的 数字是根据百分比向下舍入计算的。价值 如果 .spec.strategy.rollingUpdate.maxSurge 为 0,则不能为 0。默认值 值为25%
通过将此值设置为
50%
,它将一次推出一个 Pod,直到完成。
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment