我有一个在GKE上运行的3节点集群。所有节点都是可抢占的,这意味着它们可以随时被杀死,并且生存时间通常不会超过24小时。万一某个节点被杀死,自动缩放器会旋转一个新节点来替换它。发生这种情况通常需要一分钟左右的时间。
在我的集群中,我有一个部署,其副本设置为3。我的意图是,每个Pod将散布在所有节点上,以便只要我的集群中至少有一个节点处于活动状态,我的应用程序仍将运行。 >
我使用了以下相似性配置,因此,该Pod倾向于在与该部署已在运行的Pod主机不同的主机上运行:
spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - my-app topologyKey: kubernetes.io/hostname weight: 100
当我将应用程序从0缩放时,这似乎可以正常工作。但是实际上会发生以下情况:
my-app
复制集A
,B
和C
的Pod分别在节点1
,2
和3
上运行。因此状态为: 1 -> A
2 -> B
3 -> C
my-app
寻找没有任何吊舱的节点。由于自动标量仍在启动替换节点(4
)的过程中,因此只有1
和2
可用。D
上计划新的容器1
4
最终联机,但是由于my-app
安排了所有吊舱,因此没有任何吊舱正在运行。结果状态为 1 -> A, D
2 -> B
4 -> -
这不是理想的配置。出现问题是因为创建新节点存在延迟,并且计划表不知道它将很快可用。
是否有更好的配置可以确保Pod始终在节点上分布?我在想像preferredDuringSchedulingpreferredDuringExecution
这样的指令可能会这样做,但是那不存在。
我有一个在GKE上运行的3节点集群。所有节点都是可抢占的,这意味着它们可以随时被杀死,并且生存时间通常不会超过24小时。如果节点被杀死,则...