北京看荨麻疹好的医院 http://baidianfeng.39.net/a_zhiliao/210116/8595950.html
在Pod的生命周期中,有两个钩子函数PostStart和PreStop,两个健康检查的探针livenessprobe和readinessprobe,这些都会对容器的生命周期产生影响,除了这些,还有一个是用来做初始化工作的容器InitContainer,在一个Pod中可以有一个或者多个,如果有多个的话,这些容器会按照定义的顺序去执行,只有所有的InitContainer都执行完后,主容器才会被启动。在一个Pod中的所有容器都是共享同一个网络命名空间和数据卷的,所以在IntiContainer里面产生的数据也可以让主容器使用到。
从直观的角度看上去的话,初始化容器的确有点像Poststart,但是Poststart和InitContainer是处在不同的阶段的,我们可以通过下面的图来了解下:
从上面的图来看,两个钩子函数和两个健康检查函数都在主容器的周期范围内,而初始化容器是在主容器的外面,但它们都是属于Pod的生命周期中。
InitContainer主要是用来做初始化容器工作的,那么它主要有哪些应用的场景呢?
①等待其他模块Ready:这个可以用来解决服务之间的依赖问题,比如说一个web服务,该服务又依赖于数据库服务,但是在我们启动web服务的时候不可以保证数据库服务就已经启动起来,所以有可能会出现一段时间内web服务连接数据库失败。这样InitContainer就可以发挥作用了,在这个容器中可以检查数据库是否已经准备好了,准备好了过后初始化容器就会退出,然后主容器就会启动,这个时候去连接数据库就不会有问题了。
②做初始化配置:比如集群里检测所有已经存在的成员节点,为主容器准备好集群的配置信息,这样主容器起来后就能用这个配置信息加入到集群。
③其他场景:将Pod注册到一个中央数据库,配置中心等。
实例演示服务依赖的场景下初始化容器的使用方法:
---apiVersion:v1kind:Podmetadata:name:init-podlabels:app:initspec:initContainers:#初始化容器-name:init-myservice#第一个初始化容器,检测myservice有没有启动好image:busybox