带你读《企业级云原生白皮书项目实战》——3.2.5 滚动更新

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 带你读《企业级云原生白皮书项目实战》——3.2.5 滚动更新

3.2.5 滚动更新


rollingUpdate

应用中的一下yaml参数对于pod在被滚动更新过程中的行为有非常大的影响,比如rollingUpdate中maxSurge和maxUnavailable,其中前者是可以理解为应用最大副本数=设置副本数*(1+maxSurge),应用最小副本数=设置副本数*(1-maxUnavailable),结果为向上取整。如果maxUnavailable:0,表明要等新建立的pod ready后,才会去删除老的pod,该情况下会对整个集群的资源要求比较高。

Kubernetes 集群中,业务通常采用 Deployment + LoadBalancer 类型 Service 的方式对外提供服务,这种架构部署和运维都十分简单方便,但是在应用更新或者升级时可能会存在服务中断,引发线上问题。 在更新应用过程中涉及新建pod和删除pod以及相关的节点或pod加入到SLB的后端的过程。所以需要分开进行分析:

新建pod

如果引起服务中断的是新建pod,这是因为对于k8s来说,pod running后,就会被加到svc的后端,也就是SLB的后端中,此时如果pod 内承接业务请求的应用还未就绪,那么就会引起相关的业务中断。所以需要给pod设置相关的readiness探针,让pod内的应用完全就绪后才会被加入到svc后端中。

被删除的pod

如果发现引起业务服务中的是被删除的老pod。这是因为对于k8s来说, 在删除过程中需要对多个对象(如 Endpoint、ipvs/iptables、SLB)进行状态同步,这些同步操作是异步执行的。在pod被删除的时候,pod会被置于terminating状态,从相关的svc移除,不再承接新流量,但是依然可以处理老的流量请求。但是由于是异步进行的,所以存在相关pod已经收到了SIGTERM的信号,被终止,但是还未被从SLB后端移除,造成了流量被发送到了deleted的pod上,所以针对这种情况,建议使用PreStop,使pod收到了SIGTERM后不要马上终止,确保被SLB转发而来的流量请求依然可以被处理。 但是需要注意PreStop的时间不可以超过 terminationGracePeriodSeconds ,如果到达了 terminationGracePeriodSeconds 时间,PreStop还未执行完毕,pod依然会被马上强制终止。

iptables/ipvs

对于SLB 转发流量到后端pod,整个链路是从SLB->node->POD。 所以存在相关的ipvs/iptable规则已经被删除,但是pod还未完全从SLB后端移除,此时流量被转发到后端node时候已经没有了相关的转发规则了。 Cluster 模式下 kube-proxy 会在所有的 Node 的 上配置相关的转发工艺则,如果当前 Node 没有业务 pod,则该请求会被转发给其他 Node,因此不会存在服务中断 。 Local 模式下,kube-proxy 仅仅会在有后端pod的node上配置转发规则。当 Node 上只有一个 pod 且状态变为 terminating 时,iptables/ipvs 会将该 pod 记录移除。此时请求转发到这个 node 时,无对应的 iptables/ipvs 记录,导致请求失败。这个问题可以通过原地升级来避免,即保证更新过程中 Node 上至少有一个 Running Pod。 ENI 模式 Service:ENI 模式绕过 kube-proxy,将 Pod 直接挂载到 SLB 后端,因此不存在因为 iptables/ipvs 导致的服务中断。 目前Terway集群的SVC 默认情况下都是ENI模式挂载后端pod到SLB

SLB

当SVC的后端pod发生变化,会将 Node 从 slb 后端移除。当节点从 slb 后端移除后,SLB 对于继续发往该节点的长连接会直接断开,导致服务中断 ,此时建议为 SLB 设置长链接优雅中断。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
1月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
370 108
|
20天前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
3月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
20天前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
133 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
3月前
|
存储 运维 安全
Docker化运维:容器部署的实践指南
Docker化运维:容器部署的实践指南
|
5月前
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
383 17
|
2月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
云原生信息提取系统:容器化流程与CI/CD集成实践
|
4月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
273 18
【赵渝强老师】数据库不适合Docker容器化部署的原因

热门文章

最新文章