gpt4 book ai didi

Kubernetes pod 在具有首选模式的节点之间分布

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

我正在将我的应用程序迁移到 Kubernetes。我正在使用 EKS。
我想将我的 pod 分发到不同的节点,以避免出现单点故障。
我读过 pod-affinityanti-affinityrequiredpreferred模式。
This answer提供了一种非常好的方法来实现这一点。
但我的疑问是,假设我有 3 个节点,其中 2 个已经满了(资源方面)。如果我使用 requiredDuringSchedulingIgnoredDuringExecution ,k8s 将启动新节点并将 pod 分发到每个节点。如果我使用 preferredDuringSchedulingIgnoredDuringExecution ,它将检查首选节点,而不是找到不同的节点,将仅在第三个节点上部署所有 pod。在这种情况下,它将再次成为单点故障。
我如何解决这种情况?
我能想到的一种方法是拥有一个过度配置的集群,以便总是有一些额外的节点。
第二种方式,我不知道该怎么做,但我认为应该有一种方法可以同时使用 requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution .
谁能帮我这个?我错过了什么吗?人们如何在这种情况下工作?
我是 Kubernetes 的新手,所以如果我错了或遗漏了什么,请随时纠正我。
提前致谢
注:
我在同一个节点上运行几个类似的 pod 没有问题,只是不希望所有 pod 都在同一个节点上运行,只是因为只有一个节点可用于部署。

最佳答案

我看到您试图确保 k8s 永远不会在同一节点上安排所有 pod 副本。

不可能为 kubernetes 调度程序创建这样的硬要求。

调度程序将尽最大努力尽可能均匀地调度您的应用程序,但在您有 2 个没有备用资源的节点和 1 个将调度所有 pod 副本的节点的情况下,k8s 可以执行以下操作之一(取决于配置):

  • 将您的 Pod 安排在一个节点上(尽力而为/默认)
  • 运行一个 Pod 而根本不安排其余的 Pod ( antiaffnity + requiredDuringSchedulingIgnoredDuringExecution )
  • 如果需要,为 Pod 创建新节点 ( antiaffnity + requiredDuringSchedulingIgnoredDuringExecution + cluster autoscaler )
  • 开始从节点中删除 Pod 以释放高优先级 Pod 的资源 ( priority based preemption ) 并在可能的情况下重新安排被抢占的 Pod

  • 另请阅读此 article更好地了解调度程序如何做出决策。

    您也可以使用 PodDisruptionBudget要告诉 kubernetes 确保指定的副本始终有效,请记住,尽管:

    A disruption budget does not truly guarantee that the specified number/percentage of pods will always be up.



    kubernetes 在做出调度决策时会考虑它。

    关于Kubernetes pod 在具有首选模式的节点之间分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58718026/

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