想象一下,你有一个包含三个副本的部署 。
每个副本被分配了一个视频进行转码,并且这个任务可能需要几个小时才能完成 。
当你触发滚动更新时,Pod在被终止之前有30秒的时间来完成任务 。
你如何避免延迟关闭Pod的操作?你可以将terminationGracePeriodSeconds增加到几个小时 。
然而,在那个时间点上,Pod的端点是无法访问的 。

文章插图
如果你将指标暴露用以监控Pod,你的监控工具将无法访问你的Pod 。
为什么会这样?
像Prometheus这样的工具依赖于端点来抓取集群中的Pod 。
然而,一旦你删除Pod,端点删除的信息会在集群中传播,甚至传递给Prometheus!
与其增加宽限期限,你应该考虑为每个新版本创建一个全新的部署 。
当你创建一个全新的部署时,现有的部署将保持不变 。
长时间运行的作业可以继续正常处理视频 。一旦它们完成,你可以手动删除它们 。
如果你希望自动删除它们,你可以设置一个自动缩放器,当任务用尽时,它可以将部署的副本数缩减为零 。
这种 Pod 自动缩放器的一个例子是 Osiris——一个 Kubernetes 的通用、缩放到零的组件 。
这种技术有时被称为Rainbow Deployments,在需要保持先前的Pod运行时间长于宽限期限的情况下非常有用 。
另一个很好的例子是WebSockets 。如果你正在向用户实时传输更新,你可能不希望每次发布时都终止WebSockets 。
如果你在一天内频繁发布,这可能会导致实时数据流中断多次 。
为每个发布创建一个新的部署是一个不太直观但更好的选择 。
现有用户可以继续传输更新,而最新的部署为新用户提供服务 。
随着用户从旧的Pod断开连接,你可以逐渐减少副本并淘汰过去的部署 。
总结你应该注意从集群中删除的Pod , 因为它们的IP地址可能仍然被用于路由流量 。
与立即关闭Pod不同 , 你应该考虑在应用程序中等待更长时间,或设置一个preStop钩子 。
只有在集群中的所有端点都被传播并从kube-proxy、Ingress控制器、CoreDNS等中删除后 , 才应该删除Pod 。
如果你的Pod运行长时间的任务,例如视频转码或使用WebSockets提供实时更新,请考虑使用Rainbow Deployments 。在Rainbow Deployments中,你为每个发布创建一个新的部署 , 并在连接(或任务)耗尽时删除先前的部署 。
你可以在长时间运行的任务完成后手动删除旧的部署 。或者,你可以自动将部署的副本数缩减为零 , 以自动化该过程 。
推荐阅读
- ps出血位怎么做,PS中的出血线该怎样使设置
- CDR怎么裁剪圆形,cdr中的裁剪工具要怎样使用
- 五禽戏功效,五禽戏中的熊戏是由什么构成的
- cdr中的剪切蒙版要怎样使用,ai释放剪切蒙版快捷键是什么
- 脚注上面的横线能怎样加,word中的脚注上的横线怎么调整长度
- 狱中的吴亦凡?搬家逃债的郑爽?被抵制的AB?47岁露脸的赵薇?
- 7个方法增加头发中的黑色素以防止过早变白
- 在应酬中要注意哪些问题 应酬中的要注意哪些行为举止
- 《外来媳妇本地郎》中的由美已回归生活,现实中的她当上音乐教授
- 何润东老婆有多美?自信优雅似模特,颜值不输圈内一线明星
