google-kubernetes-engine - 调整大小时,GKE 真的会随机关闭节点吗? (这可以避免吗?)

我目前正在 GKE 节点池中运行单个节点。如果我想在生产 pod 的同时测试一些新的更改,我手动将大小扩大到 2,然后启动新的 pod。完成后,我会关闭新的 pod。

所以现在我有 2 个节点,一个运行生产 pod,另一个只运行默认的 GKE pod。现在我将节点池缩回到 1 个节点。

我注意到有时包含我的生产 pod 的节点会关闭,因此所有 pod 都会迁移到另一个节点。这发生在没有停机时间的情况下,但这似乎有点奇怪。

我几乎找不到任何关于这种行为的文档,除了 https://cloud.google.com/kubernetes-engine/docs/how-to/resizing-a-cluster 中的这一行,它说

MIG 不区分运行 Pod 的实例和没有 Pod 的实例。缩小尺寸会随机删除实例。

这似乎证实了我所看到的,但没有提供进一步的提示。首先是为什么(它不能删除请求资源最少的实例吗?),但更重要的是是否有任何解决方法。

我看到我可以使用 kubectl 命令封锁和排空节点。如果我这样做,调整大小操作会选择要删除的封锁节点,还是它仍然是随机的,我最终可能会得到不可调度的 pod?

如果我在这里误解了任何基本概念,请指出我正确的方向!也许我应该在 1 到 2 个节点之间的节点池上使用自动缩放器并让它处理其余的?但大多数时候我不需要 2,所以我担心它会旋转起来,而不是“注意到”它会旋转回来。

回答1

听起来你已经在考虑这个了。一种潜在的解决方案可能是启用集群自动缩放器,然后对未充分利用的节点自动进行缩减。此外,您还可以显式地封锁和/或排空一个节点,然后自动缩放器会很快自动删除该节点。

请注意,启用自动缩放器后,您不必封锁或排水。如果其他节点上有足够的可用容量,集群自动缩放器将自动删除未充分利用的节点。

以下文档将有助于通读:https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler 特别是阅读有关配置文件的部分。如果您的工作负载可以容忍优化利用率配置文件,那么您可能正在寻找更积极的缩减规模。