我刚刚测试了 Ranche RKE,将 kubernetes 13.xx 升级到 14.xx,在升级过程中,已经运行的 nginx Pod 在升级过程中重新启动。这是预期的行为吗?
我们可以在不重新启动用户 Pod 的情况下进行 Kubernetes 集群升级吗?
哪种工具支持不间断升级?
哪些停机时间是我们永远无法避免的? (除了控制平面)
最佳答案
Kubernetes 升级的默认方式是对节点进行滚动升级,一次一个。
这通过排空和封锁(将节点标记为不可用于新部署)每个正在升级的节点来实现,以便该节点上没有运行的 Pod。
它通过在另一个节点上创建现有 Pod 的新版本(如果可用)来实现这一点,并且当新 Pod 开始运行(并响应就绪/运行状况探测)时,它会停止并删除旧 Pod(发送正在升级的节点上的每个 Pod 容器的 SIGTERM
。
Kubernetes 等待 pod 正常关闭的时间,由 pod 规范上的 terminationGracePeriodSeconds
控制,如果 pod 花费的时间超过该时间,则会通过 SIGKILL
.
重点是,要进行优雅的 Kubernetes 升级,您需要有足够的可用节点,并且您的 Pod 必须具有正确的 liveness 和就绪性探针 ( https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/ )。
一些值得一读的有趣 Material :
https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-upgrading-your-clusters-with-zero-downtime (特定于 GKE,但有一些见解)
https://blog.gruntwork.io/zero-downtime-server-updates-for-your-kubernetes-cluster-902009df5b33
关于Kubernetes 版本升级和停机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061117/