首页 > 解决方案 > Kubernetes 版本升级和停机

问题描述

我刚刚测试了 Ranche RKE ,将 kubernetes 13.xx 升级到 14.xx ,在​​升级过程中,已经运行的 nginx Pod 在升级过程中重新启动。这是预期的行为吗?

我们可以在不重启用户 pod 的情况下进行 Kubernetes 集群升级吗?

哪个工具支持非侵入式升级?

我们无法避免的停机时间是什么?(除了控制平面)

标签: kubernetesrancherrancher-rke

解决方案


Kubernetes 升级的默认方式是对节点进行滚动升级,一次一个。

这通过排空和封锁(将节点标记为对新部署不可用)每个正在升级的节点,以使该节点上没有运行 Pod。

它通过在另一个节点上创建现有 pod 的新修订版(如果可用)并且当新 pod 开始运行(并响应就绪/健康探测)时,它会停止并删除旧 pod(发送SIGTERM到每个 pod容器)在正在升级的节点上。

Kubernetes 等待 pod 正常关闭的terminationGracePeriodSeconds时间由 pod 规范控制,如果 pod 花费的时间超过这个时间,它们会被杀死SIGKILL

关键是,要进行优雅的 Kubernetes 升级,您需要有足够的可用节点,并且您的 pod 必须具有正确的 liveness 和 readiness 探针(https://kubernetes.io/docs/tasks/configure-pod-container/configure- liveness-readiness-probes/)。

一些有趣的材料值得一读:

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


推荐阅读