GKE 真的会在扩容时随机关闭节点吗? (这可以避免吗?)

Does GKE really shut down nodes at random when resizing? (And can this be avoided?)

我目前是 运行 GKE 节点池中的单个节点。如果我想在生产 pods 的同时测试一些新的变化,我手动放大到 2 的大小,然后启动新的 pods。完成后,我将关闭新的 pods.

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

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

我几乎找不到任何关于这种行为的文档,除了 Google how-to 中的这一行

The MIG does not differentiate between instances running Pods and instances without Pods. Resizing down removes instances at random.

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

我看到我可以使用 kubectl 命令封锁和排空节点。如果我这样做,调整大小操作会选择要删除的封锁节点,还是它仍然是随机的,我可能会以无法安排的方式结束 pods?

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

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

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

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