Kubernetes Pod在优先模式下的节点之间分布

我正在将我的应用程序迁移到Kubernetes。我正在使用EKS。

我想将pod分配到不同的节点,以避免出现单点故障。 我了解了pod-affinityanti-affinity以及requiredpreferred模式。

This answer提供了一种非常好的方法来完成此任务。

但是我的疑问是,如果我有3个节点,其中2个节点已满(在资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution,则k8将启动新节点并将吊舱分配到每个节点。如果我使用preferredDuringSchedulingIgnoredDuringExecution,它将检查首选节点,而不会找到其他节点,只会将所有pod部署在第三个节点上。在这种情况下,它将再次成为单点故障。

我该如何解决这种情况?

我能想到的一种方法是拥有一个过度配置的集群,这样总会有一些额外的节点。

第二种方式,我不确定如何做到这一点,但我认为应该有一种同时使用requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution的方式。

有人可以帮我吗?我想念什么吗?人们在这种情况下如何工作?

我是Kubernetes的新手,所以如果我错了或遗漏了一些东西,请随时纠正我。

预先感谢

注意:

在同一节点上运行几个类似的pod时我没有问题,只是不希望所有pod在同一节点上运行,只是因为只有一个节点可供部署。

xiaoyuwuxin22 回答:Kubernetes Pod在优先模式下的节点之间分布

我看到您正在尝试确保k8永远不会在同一节点上调度所有pod副本。

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

Scheduler会尽最大努力尽可能均匀地调度您的应用程序,但是当您有2个节点没有备用资源并且有1个节点将调度所有Pod副本时,k8可以执行以下操作之一(取决于配置) ):

  1. 将Pod安排在一个节点上(尽力而为/默认)
  2. 只运行一个Pod,完全不计划其余的Pod(antiaffnity + requiredDuringSchedulingIgnoredDuringExecution
  3. 根据需要为Pod创建新节点(antiaffnity + requiredDuringSchedulingIgnoredDuringExecution + cluster autoscaler
  4. 开始从节点删除Pod,以释放高优先级Pod(priority based preemption)的资源,并在可能的情况下重新安排被抢占的Pod

也请阅读此article,以更好地了解调度程序如何做出决定。

您还可以使用PodDisruptionBudget告诉kubernetes确保指定的副本始终正常工作,请记住,尽管:

  

中断预算并不能真正保证所指定豆荚的数量/百分比将一直保持不变。

kubernetes在制定调度决策时会考虑它。

本文链接:https://www.f2er.com/3156984.html

大家都在问