首页 > 解决方案 > 通过切换到新池来升级GKE集群:集群间服务通信会失败吗?

问题描述

从这篇文章(https://cloudplatform.googleblog.com/2018/06/Kubernetes-best-practices-upgrading-your-clusters-with-zero-downtime.html)我了解到可以创建一个新的节点池, 并对旧节点一一进行封锁和排空,以便将工作负载重新调度到新池中的新节点上。

对我来说,一个新的节点池似乎意味着一个新的集群。原因:我们在 GKE 中有两个节点池,它们被列为两个独立的集群。

我的问题是:在一个服务下的 pod 移动到一个新节点后,如果该服务正在从旧节点中的其他 pod 调用,这个集群间服务调用会失败吗?

标签: kubernetesgoogle-kubernetes-engine

解决方案


您本身不会创建新的集群。您升级主节点,然后创建一个新节点池,其中包含具有较新版本的节点。确保新节点池与原始节点池共享相同的网络。

如果您有一个具有一个副本(一个 pod)的服务,并且该 pod 位于您正在升级的节点之一中,则您需要留出时间让 Kubernetes 在另一个未升级的节点上创建新副本。届时,您的服务将不可用。

如果您的服务具有多个副本,那么您可能不会看到任何停机时间,除非出于某种奇怪的原因,您的所有副本都安排在同一个节点上。

建议:在进行节点升级之前,将服务于您的服务(部署、DaemonSet、StatefulSet 等)的资源扩展一两个副本。

StatefulSet 提示:如果您在重新安排 mysql 主服务器时在主从配置中运行 mysql 之类的东西,您将有一些写入停机时间。


推荐阅读