我刚刚测试了 Ranche RKE ,将 kubernetes 13.xx 升级到 14.xx ,在升级过程中,已经运行的 nginx Pod 在升级过程中重新启动。这是预期的行为吗?
我们可以在不重启用户 pod 的情况下进行 Kubernetes 集群升级吗?
哪个工具支持非侵入式升级?
我们无法避免的停机时间是什么?(除了控制平面)
我刚刚测试了 Ranche RKE ,将 kubernetes 13.xx 升级到 14.xx ,在升级过程中,已经运行的 nginx Pod 在升级过程中重新启动。这是预期的行为吗?
我们可以在不重启用户 pod 的情况下进行 Kubernetes 集群升级吗?
哪个工具支持非侵入式升级?
我们无法避免的停机时间是什么?(除了控制平面)
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
已解决通过在主机上配置容器运行时不在 docker restart 时重启容器。