具有首选模式的节点之间的Kubernetes吊舱分布

具有首选模式的节点之间的Kubernetes吊舱分布,kubernetes,kubernetes-pod,amazon-eks,Kubernetes,Kubernetes Pod,Amazon Eks,我正在将我的应用程序迁移到Kubernetes。我在用EKS 我希望将我的pod分发到不同的节点,以避免出现单点故障。 我读过关于pod亲和性和反亲和性和必需和首选模式的内容 提供了一个很好的方法来实现这一点 但我的疑问是,假设我有3个节点,其中2个已经满了(资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution,k8s将启动新节点并将POD分发到每个节点。如果我使用preferredDuringSchedulingIgnoredDur

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

我希望将我的pod分发到不同的节点,以避免出现单点故障。 我读过关于
pod亲和性
反亲和性
必需
首选
模式的内容

提供了一个很好的方法来实现这一点

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

我如何解决这个问题

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

第二种方法,我不知道如何做到这一点,但我认为应该有一种方法可以同时使用
requiredDuringSchedulingIgnoredDuringExecution
preferredDuringSchedulingIgnoredDuringExecution

有人能帮我吗?我错过什么了吗?人们如何在这种情况下工作

我是Kubernetes的新手,如果我错了或遗漏了什么,请随时纠正我

提前谢谢

注意:


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

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

不可能为kubernetes调度器创建这样的硬需求

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

  • 在一个节点上安排播客(尽力而为/默认)
  • 运行一个pod,而完全不计划其余的pod(
    Antiaffinity
    +
    requiredDuringSchedulingIgnoredDuringExecution
  • 如果需要,为POD创建新节点(
    Antiaffinity
    +
    RequiredDuringSchedulingIgnoreDuringExecution
    +
    群集自动缩放器
  • 开始从节点中删除POD以释放高优先级POD()的资源,并在可能的情况下重新安排抢占的POD
  • 也请阅读本文,以更好地了解调度器是如何做出决策的

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

    中断预算并不能真正保证指定数量/百分比的POD始终处于上升状态


    kubernetes在做出调度决策时会考虑到这一点。

    如果您打算将POD分发到不同的节点,只是为了避免单点故障,那么您已经有了错误的心态。你可以有10个节点和10个给定pod的副本;所有10个节点都在10个节点中的1个节点上运行,但由于k8s的特性,您仍然不应该担心它。否则,为什么守护程序不是运行POD的默认方式,而是部署?