gpt4 book ai didi

kubernetes - 使用 podAntiAffinity 规则确保 Pod 运行在不同的抢占式节点上

转载 作者:行者123 更新时间:2023-12-02 11:39:15 25 4
gpt4 key购买 nike

我有一个在 GKE 上运行的 3 节点集群。所有节点都是可抢占的,这意味着它们可以随时被杀死,并且通常存活时间不超过 24 小时。如果一个节点被杀死,自动缩放器会启动一个新节点来替换它。发生这种情况时,这通常需要一分钟左右的时间。

在我的集群中,我有一个部署,其副本设置为 3。我的意图是每个 pod 将分布在所有节点上,这样只要我的集群中至少有一个节点处于事件状态,我的应用程序仍将运行。

我使用了以下关联配置,以便 pod 更喜欢在与已经为该部署运行 pod 的主机不同的主机上运行:

spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- my-app
topologyKey: kubernetes.io/hostname
weight: 100

当我从 0 扩展我的应用程序时,这似乎按预期工作。但在实践中会发生以下情况:
  • 让我们说 pod 属于 my-app副本集 A , BC正在节点上运行 1 , 23分别。所以状态将是:
  •   1 -> A
    2 -> B
    3 -> C
  • 节点 3 被杀死并带走了 pod C,导致副本集中有 2 个正在运行的 pod。
  • 调度器会自动开始调度一个新的 pod,将副本集恢复到 3。
  • 它为 my-app 寻找没有任何 Pod 的节点.由于自动标量仍在启动替换节点 ( 4 ) 的过程中,因此只有 12可用。
  • 它调度新的 pod D在节点 1
  • 节点 4最终上线,但作为 my-app它的所有 pod 都已安排好,但没有任何 pod 正在运行。结果状态是
  •   1 -> A, D
    2 -> B
    4 -> -

    这不是理想的配置。出现问题是因为创建新节点有延迟,并且调度程序不知道它很快就会可用。

    是否有更好的配置可以确保 Pod 始终分布在整个节点上?我在想像 preferredDuringSchedulingpreferredDuringExecution 这样的指令可能会这样做,但那不存在。

    最佳答案

    preferredDuringSchedulingIgnoredDuringExecution 意味着它是一个偏好而不是硬性要求,这可以解释 1 -> A, D

    我相信您正在搜索 requiredDuringSchedulingIgnoredDuringExecution 与反亲和性,以便您拥有分布式工作负载。

    请看看这个github有关更多详细信息和示例。

    关于kubernetes - 使用 podAntiAffinity 规则确保 Pod 运行在不同的抢占式节点上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58714858/

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