kad*_*amb 5 kubernetes kubernetes-pod amazon-eks
我正在努力将我的应用程序迁移到 Kubernetes。我正在使用 EKS。
我想将我的 Pod 分布到不同的节点,以避免出现单点故障。我读到了pod-affinity
andanti-affinity
和required
andpreferred
模式。
这个答案提供了一个非常好的方法来实现这一点。
但我的疑问是,假设我有 3 个节点,其中 2 个节点已满(资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution
,k8s 将启动新节点并将 Pod 分发到每个节点。如果我使用preferredDuringSchedulingIgnoredDuringExecution
,它将检查首选节点,并且不会找到不同的节点,只会将所有 Pod 部署在第三个节点上。在这种情况下,它将再次成为单点故障。
我该如何解决这种情况?
我能想到的一种方法是拥有一个超额配置的集群,这样总会有一些额外的节点。
第二种方法,我不知道如何做到这一点,但我认为应该有一种同时使用requiredDuringSchedulingIgnoredDuringExecution
和 的方法preferredDuringSchedulingIgnoredDuringExecution
。
谁能帮我这个?我错过了什么吗?在这种情况下人们如何工作?
我是 Kubernetes 的新手,所以如果我错了或者遗漏了什么,请随时纠正我。
提前致谢
笔记:
我在同一节点上运行几个类似的 pod 没有问题,只是不希望所有 pod 都在同一节点上运行,因为只有一个节点可供部署。
我看到您试图确保 k8s 永远不会在同一节点上安排所有 pod 副本。
不可能为 kubernetes 调度程序创建这样的硬性要求。
调度程序将尽力尽可能均匀地调度您的应用程序,但在您有 2 个没有空闲资源的节点和 1 个将调度所有 pod 副本的节点的情况下,k8s 可以执行以下操作之一(取决于配置):
antiaffnity
+ requiredDuringSchedulingIgnoredDuringExecution
)antiaffnity
++ )requiredDuringSchedulingIgnoredDuringExecution
cluster autoscaler
priority based preemption
),并在可能的情况下重新安排被抢占的 pod另请阅读本文以更好地了解调度程序如何做出决策。
您还可以使用PodDisruptionBudget告诉 kubernetes 确保指定的副本始终正常工作,但请记住:
中断预算并不能真正保证指定数量/百分比的 Pod 始终正常运行。
kubernetes 在做出调度决策时会考虑到这一点。
归档时间: |
|
查看次数: |
1476 次 |
最近记录: |