当我们启用反亲和力时允许调度多个 pod

问题描述 投票:0回答:1

我有一个部署,我添加了如下亲和力 -

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 个节点。

docker kubernetes kubernetes-helm kubernetes-pvc
1个回答
0
投票

您可以设置:

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

© www.soinside.com 2019 - 2024. All rights reserved.