k8s - pod 的生命周期
先上图,通过图来看看pod的生命周期
当kubectl调用创建pod的命令之后,pod会经历以下几个阶段,跟着图来走
如图,这个pod里面会有n个容器
1. init container(初次化容器)
每个容器都可以存放一些初次容器(init container),这个初次容器的目的就在运行真正容器之前的一些准备工作,例如拷贝文件,初次化文件,或者获取一些敏感字段如密码,秘钥等。为什么这样做呢?有以下几个点
- a.假设每个容器里面都带有一些拷贝的命令工具,如zip,或者crul等工具,就会造成每一个容器的大小会增加,因为这些unzip等工具,在容器运行当中是不会使用到的,这样变成工具冗余了,所以希望能在初次化容器中完成所有工作后就把容器关闭。
- b.因为在真正启动的容器当中,是不可以访问敏感字段空间的,所以初次化容器就能把需要的敏感字段拿到后,赋予给主容器当中,这样就不会出现主容器的安全性问题了。
- c.这里注意的是,初次容器是同步运行的,按顺序执行,第一初次化容器执行容器失败,是不会进入第二个初次化容器的。
- d.这里也涉及到初次化容器的启动策略
2. start (启动容器)
初次化容器全部执行完成后,将会全部被杀掉,然后主容器将会被启动
3. readiness (探针)
启动过程中,会带有探针,目的是检查容器是否启动成功,如果成功,才会把服务端口暴露出去
4. liveness (存活)
在整个过程中会检查主容器的存活状态
5. stop (停止容器)
最后就是停止容器,这里必须是人为的停止或者控制器停止