经过连续 5 篇相关应用流量引流相关的技术探讨,相信大家已经对 Kubernetes 的服务引流架构有了更深入的了解。常言道好记性不如烂笔头,笔者在反复练习这些参数的过程中,也是费劲了很大的一段时间才对 Kubernetes 的集群引流技术有了一些运用。以下的练习案例都是笔者认为可以加固自身知识体系的必要练习,还请大家跟随我的记录一起练习吧。
练习 1:Deployment 下实现无损流量应用更新
我们在更新应用的时候,往往会发现即使发布应用的时候 Kubernetes 采用了滚动更新的策略,应用流量还是会秒断一下。这个困惑在于官方文档资料的介绍中这里都是重点说可以平滑更新的。注意这里,它是平滑更新,并不是无损流量的更新。所以到底问题出在哪里呢。笔者查阅了资料,发现核心问题是 Pod 生命周期中应用的版本更新如下图,关联对象资源如 Pod、Endpoint、IPVS、Ingress/SLB 等资源的更新操作都是异步执行的。往往流量还在处理中,Pod 容器就有可能给如下图:
依据 Pod 容器进程生命周期流程图中,容器进程的状态变更都是异步的,如果应用部署对象 Deployment 不增加 lifecycle 参数 preStop 的配置,即使南北向流量关闭了,进程仍然还需要几秒钟