从这篇文章(https://cloudplatform.googleblog.com/2018/06/Kubernetes-best-practices-upgrading-your-clusters-with-zero-downtime.html)中我了解到可以创建新节点池,并逐行封锁和耗尽旧节点,以便重新安排工作负载到新池中的新节点。
对我来说,新的节点池似乎表示一个新的群集。原因是:我们在GKE中有两个节点池,它们被列为两个单独的群集。
我的问题是:将服务下的Pod移到新节点后,如果正在从旧节点中的其他Pod调用该服务,该集群间服务调用会失败吗?
答案 0 :(得分:0)
您本身不会创建新的集群。升级主服务器,然后创建具有新版本节点的新节点池。确保新节点池与原始节点池共享相同的网络。
如果您有一个带有一个副本(一个Pod)的服务(如果该Pod驻留在您要升级的节点之一中),则需要留出时间让Kubernetes在另一个未升级的节点上创建新副本。在此期间,您的服务将不可用。
如果您的服务具有多个副本,则除非您出于某种奇怪的原因将所有副本都安排在同一节点上,否则您将不会看到任何停机时间。
建议:在进行节点升级之前,按一两个副本来扩展用于服务服务的资源(部署,DaemonSet,StatefulSet等)。
StatefulSet提示:如果在重新计划mysql主服务器时在主从配置中运行类似mysql之类的东西,则会有一些写入停机时间。
答案 1 :(得分:0)
请注意,创建新节点池不会创建新集群。同一集群中可以有多个节点池。由于不同的节点池中的工作负载在同一群集中,因此它们仍将相互交互。
gcloud container node-pools create(创建节点池的命令)要求您指定--cluster标志,以便在现有群集中创建新的节点池。
因此,直接回答问题,按照该Google链接中的步骤进行操作,不会导致任何服务中断,也不会在迁移过程中同一个集群中的Pod相互通信时出现任何问题。