更新应用时,如何实现 K8s 零中断滚动更新?
作者 | 子白(阿里云开发工程师)、溪恒(阿里云技术专家) <关注阿里巴巴云原生公众号,回复 排查 即可下载电子书> 《深入浅出 Kubernetes》一书共汇集 12 篇技术文章,帮助你一次搞懂 6 个核心原理,吃透基础理论,一次学会 6 个典型问题的华丽操作! Kubernetes 集群中,业务通常采用 Deployment + LoadBalancer 类型 Service 的方式对外提供服务,其典型部署架构如图 1 所示。这种架构部署和运维都十分简单方便,但是在应用更新或者升级时可能会存在服务中断,引发线上问题。今天我们来详细分析下这种架构为何在更新应用时会发生服务中断以及如何避免服务中断。 图1 业务部署图 为何会发生服务中断 Deployment 滚动更新时会先创建新 pod,等待新 pod running 后再删除旧 pod。 新建 Pod 图 2 服务中断示意图 中断原因 :Pod running 后被加入到 Endpoint 后端,容器服务监控到 Endpoint 变更后将 Node 加入到 SLB 后端。此时请求从 SLB 转发到 Pod 中,但是 Pod 业务代码还未初始化完毕,无法处理请求,导致服务中断,如图 2 所示。 解决方法 :为 pod 配置就绪检测,等待业务代码初始化完毕后后再将 node 加入到 SLB 后端。 删除 Pod 在删除旧 pod