Kubernetes 版本升级和停机

标签 kubernetes rancher rancher-rke

我刚刚测试了 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/

相关文章:

在入口中提供路径时无法访问 Kubernetes 仪表板

go - 使用 K8S Go 客户端列出 ClusterServiceVersions

docker - Rancher:同一台物理计算机中的多个主机

kubernetes - Rancher v3 Api 文档不可用

kubernetes - Rancher : kubernetes cluster stuck in pending. "No route to host"

namespaces - Rancher - 是否可以在新环境中启动/重新创建一个环境中可用的整个命名空间

kubernetes - kubectl 代理的目的是什么?

kubernetes - 使用 TcpDiscoveryKubernetesIpFinder 时,OpenShift/K8s 项目 pod 不加入同一网格的问题,而是创建多个隔离的网格

kubernetes - 将它连接到 istio 后,如何为我的 keycloak 实例创建 URL 前端