如何在定期维护期间避免停机 window

How to avoid downtime during scheduled maintenance window

每当 GKE 集群在维护期间升级时,我都会遇到停机 window。我的服务 (API) 在约 5 分钟内无法访问。

集群位置类型设置为“区域”,我的所有 pods 都有 2 个副本。唯一受影响的 pods 似乎是那些使用 nginx 入口控制器的人。

我能做些什么来防止这种情况发生吗?我读到使用区域集群应该可以防止控制平面停机,但我不确定这是否与我的情况有关。任何提示将不胜感激!

您提到“停机时间”,但这是您使用控制平面的停机时间(即 kubectl 停止工作)还是因为使用服务的最终用户不再看到服务正常运行而导致的停机时间。

GKE 升级会升级集群的两个部分:控制平面或主节点,以及工作节点。这是两个独立的升级,尽管它们可以同时发生,具体取决于您的集群配置。

区域集群可以帮助解决这个问题,但随着您拥有更多节点,它们的成本会更高,但好处是集群更具弹性。

回到之前关于控制平面与节点升级的观点。控制平面升级不会影响 end-user/customer 视角。这些服务将剩余 运行.

节点升级会影响客户,因此您应该考虑各种技术来确保服务的高可用性和弹性。

一个常用的技术是增加replicas,也包括pod antiaffinity。这将确保 pods 被安排在不同的节点上,因此当节点升级到来时,它不会取消整个服务,因为集群将所有副本安排在同一节点上。

您在问题中提到了 nginx ingress controller。如果您使用 Helm 将它安装到您的集群中,那么开箱即用,它没有设置为使用 anti-affinity,因此如果它的所有副本都被安排到同一个服务器上,它可能会停止服务节点,然后该节点被标记为升级或类似。