kubernetes - 通过切换到新池来升级GKE集群:集群间服务通信会失败吗?
问题描述
从这篇文章(https://cloudplatform.googleblog.com/2018/06/Kubernetes-best-practices-upgrading-your-clusters-with-zero-downtime.html)我了解到可以创建一个新的节点池, 并对旧节点一一进行封锁和排空,以便将工作负载重新调度到新池中的新节点上。
对我来说,一个新的节点池似乎意味着一个新的集群。原因:我们在 GKE 中有两个节点池,它们被列为两个独立的集群。
我的问题是:在一个服务下的 pod 移动到一个新节点后,如果该服务正在从旧节点中的其他 pod 调用,这个集群间服务调用会失败吗?
解决方案
您本身不会创建新的集群。您升级主节点,然后创建一个新节点池,其中包含具有较新版本的节点。确保新节点池与原始节点池共享相同的网络。
如果您有一个具有一个副本(一个 pod)的服务,并且该 pod 位于您正在升级的节点之一中,则您需要留出时间让 Kubernetes 在另一个未升级的节点上创建新副本。届时,您的服务将不可用。
如果您的服务具有多个副本,那么您可能不会看到任何停机时间,除非出于某种奇怪的原因,您的所有副本都安排在同一个节点上。
建议:在进行节点升级之前,将服务于您的服务(部署、DaemonSet、StatefulSet 等)的资源扩展一两个副本。
StatefulSet 提示:如果您在重新安排 mysql 主服务器时在主从配置中运行 mysql 之类的东西,您将有一些写入停机时间。
推荐阅读
- java - 使用从 Sql 数据库中获取的时间发送通知
- django - 目标路径 '/home/matms/django_project/media_root/xxx.jpg' 已经存在
- django - Django search_fields 外键未按预期工作
- apache-spark - AttributeError:“NoneType”对象没有属性“在 Pyspark 中写入”
- kotlin - 访问协程作业中的自定义协程上下文元素
- callback - 在Julia中DifferentialEquations.jl的ODE求解器中的每个常规时间间隔回调
- python - 如何有效地将一个DF的多列附加到另一个DF的一列中
- ruby-on-rails - 无需重新渲染整个页面即可访问更新的数据
- python - 如何在 python 中接受第三方 cookie 到 selenium chromedriver?
- javascript - 按下按钮时创建警报