具有首选模式的节点之间的Kubernetes吊舱分布
我正在将我的应用程序迁移到Kubernetes。我在用EKS 我希望将我的pod分发到不同的节点,以避免出现单点故障。 我读过关于具有首选模式的节点之间的Kubernetes吊舱分布,kubernetes,kubernetes-pod,amazon-eks,Kubernetes,Kubernetes Pod,Amazon Eks,我正在将我的应用程序迁移到Kubernetes。我在用EKS 我希望将我的pod分发到不同的节点,以避免出现单点故障。 我读过关于pod亲和性和反亲和性和必需和首选模式的内容 提供了一个很好的方法来实现这一点 但我的疑问是,假设我有3个节点,其中2个已经满了(资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution,k8s将启动新节点并将POD分发到每个节点。如果我使用preferredDuringSchedulingIgnoredDur
pod亲和性
和反亲和性
和必需
和首选
模式的内容
提供了一个很好的方法来实现这一点
但我的疑问是,假设我有3个节点,其中2个已经满了(资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution
,k8s将启动新节点并将POD分发到每个节点。如果我使用preferredDuringSchedulingIgnoredDuringExecution
,它将检查首选节点,而不会找到不同的节点,将只在第三个节点上部署所有POD。在这种情况下,它将再次成为单点故障
我如何解决这个问题
我能想到的一种方法是拥有一个过度配置的集群,这样总有一些额外的节点
第二种方法,我不知道如何做到这一点,但我认为应该有一种方法可以同时使用requiredDuringSchedulingIgnoredDuringExecution
和preferredDuringSchedulingIgnoredDuringExecution
有人能帮我吗?我错过什么了吗?人们如何在这种情况下工作
我是Kubernetes的新手,如果我错了或遗漏了什么,请随时纠正我
提前谢谢
注意:
我在同一个节点上运行几个类似的pod没有问题,只是不希望所有pod都在同一个节点上运行,因为只有一个节点可供部署。我看到您正在尝试确保k8s永远不会在同一节点上调度所有pod副本 不可能为kubernetes调度器创建这样的硬需求 Scheduler将尽可能均匀地调度您的应用程序,但在2个节点没有备用资源,1个节点调度所有pod副本的情况下,k8s可以执行以下操作之一(取决于配置):
Antiaffinity
+requiredDuringSchedulingIgnoredDuringExecution
)Antiaffinity
+RequiredDuringSchedulingIgnoreDuringExecution
+群集自动缩放器
)kubernetes在做出调度决策时会考虑到这一点。如果您打算将POD分发到不同的节点,只是为了避免单点故障,那么您已经有了错误的心态。你可以有10个节点和10个给定pod的副本;所有10个节点都在10个节点中的1个节点上运行,但由于k8s的特性,您仍然不应该担心它。否则,为什么守护程序不是运行POD的默认方式,而是部署?