在之前的文章中介绍了k8s创建Pod流程,主要介绍了k8s如何通过编排和调度启动一个Pod。
这篇文章我们从Pod的角度看,一个Pod从启动到终止经过了的流程,下图展现了一个Pod从启动到结束经过的中间过程以及执行相应的钩子函数。在业务容器启动之前首先会运行Initcontainer容器,initcontainer是串行执行的,负责容器初始化的一些操作。
当所有的initcontainer执行完后,会逐个启动业务容器容器,业务容器启动成功后,kubelet只能知道容器已经处于运行状态,但容器里面运行应用的真实状态就不得而知了。为此kubelet引入了探针机制,通过HTTP/TCP/EXEC的方式检测容器里面业务是否启动。
另外还有两个Hook:容器启动之后PostStart和容器关闭之前PreStop。由于PostStart和容器ENTRYPOINT是并发执行,Kubelet并不能保证PostStart一定是在ENTRYPOINT之后执行,但如果PostStart一直无法结束运行,那么Pod将无法进入Running状态,所以PostStart通常可以在短时间内完成任务,不会驻留太长时间。PreStop则不同,它是一定在容器关闭之前执行。Pod首先会执行PreStop钩子函数,在PreStop执行完成后,才会继续执行优雅关闭操作。如果PreStop在优雅关闭时间(默认30s)之内无法完成时,将强制停止,并将优雅关闭时间设置成2s,继续执行之后的优雅关闭操作。
页面更新:2024-04-16
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号