什么触发了初始化容器的运行?
是否会编辑部署描述符(或用头盔更新),例如更改图像标签,触发init容器?
删除pod会触发init容器吗?
将副本设置为空然后将其设置为null会触发init容器吗?
是否可以手动触发初始化容器?
答案 0 :(得分:2)
什么触发了初始化容器的运行?
基本上,每次创建定义中具有此类容器的initContainers
时,都会运行Pod
,并且创建Pod
的原因可能完全不同。如您在官方documentation中所读, 初始化容器 在Pod
中的应用容器之前运行,它们总是运行到完成。 如果Pod的初始化容器失败,Kubernetes会反复重启Pod,直到初始化容器成功。因此,触发启动initContainer
的原因之一是先前尝试启动它的失败尝试之一。
将针对以下内容编辑部署描述符(或使用Helm更新) 例如,更改图像标签,触发init容器?
是的,基本上对Deployment
定义的每一次更改都会触发由它管理的Pods
的创建/重新创建,也触发其initContainers
的运行。手动管理还是手动管理都没关系。进行一些细微的更改(例如在您的Deployment
中添加一组新标签)并不能使其重新创建其Pods
,但可以肯定地更改容器image
会导致控制器({ {1}},Deployment
或ReplicationController
)来重新创建其ReplicaSet
。
删除pod会触发init容器吗?
否,删除Pods
不会触发初始化容器。如果删除不受任何控制器管理的Pod
,它将被删除,并且没有自动机制会关心重新创建它并运行其Pod
。如果删除由控制器管理的initConainers
,例如Pod
,它将检测到replicaSet
少于其yaml定义中声明的Pods
,它将尝试创建一个缺少Pod
以匹配所需/声明的状态。因此,我想再次强调一下,不是Pod
的删除触发其initContainers
的运行,而是Pod
的创建,无论是手动还是由控制器管理例如replicaSet
,当然可以通过手动删除由该控制器管理的Pod
来触发。
将减少副本设置为null然后增加副本将触发 初始化容器?
是的,因为当您将副本的数量减少到0时,您使控制器删除了它所管理的所有Pods
。重新创建它们时,将重复其所有启动过程,包括运行initContainers
作为该Pods
的一部分。
是否可以手动触发初始化容器?
正如@David Maze在其评论中所述运行init容器的唯一方法是创建一个新的pod,但是更新部署和删除由部署管理的pod都将触发该操作。我会说这取决于您所说的“手动”一词的含义。如果您询问是否可以在不重新启动/重新创建initContainer
的情况下以某种方式触发Pod
-不,那是不可能的。 initContainers
的启动与Pod
的创建紧密相关,换句话说,与启动过程紧密相关。
顺便说一句。您在问题中要问的所有内容都很容易测试。您在 kubernetes官方文档中有很多可用的示例,可用于测试不同的场景,也可以自己创建简单的initContainer
,例如使用busybox
图像,唯一的任务是到sleep
所需的秒数。在这里,您有来自不同的与 initContainers 相关的k8s文档部分的有用链接: