Kubernetes 在部署更新时运行init容器

Kubernetes 在部署更新时运行init容器,kubernetes,Kubernetes,什么触发了要运行的init容器 编辑部署描述符(或使用helm更新它)是否会触发init容器,例如更改图像标记 删除pod会触发初始化容器吗 将副本集减少为null,然后增加它会触发init容器吗 是否可以手动触发初始化容器 什么触发了要运行的init容器 基本上,initContainers在每次创建定义中包含此类容器的Pod时都会运行,创建Pod的原因可能会有很大不同。正如您在官方init containers中看到的,在Pod中的应用程序容器之前运行,它们总是运行到完成。如果Pod的初始化

什么触发了要运行的init容器

编辑部署描述符(或使用helm更新它)是否会触发init容器,例如更改图像标记

删除pod会触发初始化容器吗

将副本集减少为null,然后增加它会触发init容器吗

是否可以手动触发初始化容器

什么触发了要运行的init容器

基本上,
initContainers
在每次创建定义中包含此类容器的
Pod
时都会运行,创建
Pod
的原因可能会有很大不同。正如您在官方init containers中看到的,在
Pod
中的应用程序容器之前运行,它们总是运行到完成。如果Pod的初始化容器失败,Kubernetes会反复重新启动Pod,直到初始化容器成功。因此,触发启动
initContainer
的一个因素是之前启动它的失败尝试

将编辑部署描述符(或使用helm更新它),以便 例如,更改图像标记,触发init容器

是的,基本上,对
部署
定义的每一项更改都会触发创建/重新创建由it管理的
pod
,也会触发运行它们的
initContainers
。不管你是通过掌舵还是手动来管理它。一些细微的更改(例如,向
展开添加一组新标签)不会使其重新创建
吊舱
,但更改容器
图像
肯定会导致控制器(
展开
复制控制器
复制集
)要重新创建其
播客

删除pod会触发初始化容器吗

否,删除
Pod
不会触发init容器。如果删除一个不由任何控制器管理的
Pod
,它将被删除,并且没有自动机制会关心重新创建它并运行它的
initConainers
。如果删除由控制器管理的
Pod
,比如说
replicaSet
,它将检测到
Pod
少于其yaml定义中声明的,并尝试创建此类缺失的
Pod
,以匹配所需/声明的状态。因此,我想再次强调的是,触发其
initContainers
运行的不是
Pod
的删除,而是
Pod
创建,无论是手动还是由控制器(如
replicaSet
)管理,当然,手动删除由该控制器管理的
Pod
,可以触发该操作

将副本集减少为null,然后增加它是否会触发 初始化容器

是的,因为当您将副本数量减少到0时,控制器将删除其管理的所有
pod
。当它们被重新创建时,所有的启动过程都会重复,包括运行
initContainers
作为此类
Pods
的一部分

是否可以手动触发初始化容器


正如@davidmaze在他的评论中已经指出的,运行init容器的唯一方法是创建一个新的pod,但是更新部署和删除部署管理的pod都会触发这一点。我想说,这取决于你所说的“手工”一词的意思。如果您询问是否可以在不重新启动/重新创建
Pod
的情况下以某种方式触发
initContainer
-否,则不可能。启动
initContainers
Pod
创建密切相关,换句话说,与它的启动过程密切相关

顺便说一句,你所问的问题都很容易测试。kubernetes官方文档中有很多工作示例,可用于测试不同的场景,您也可以自己创建简单的
initContainer
,例如使用
busybox
image,唯一的任务是
睡眠
,持续所需的秒数。这里有一些来自与initContainers相关的不同k8s文档部分的有用链接:


运行init容器的唯一方法是创建一个新的pod,但更新部署和删除部署管理的pod都会触发该操作。你能给出一个不起作用的案例的更完整的例子吗?@DavidMaze我以为容器没有启动,因为文件权限没有改变。现在,我已经将调试添加到脚本中,并更改了问题。真正的问题可能是emptyDir。你能详细描述一下你的问题吗?实际上,你发布了5个不同的问题,在评论中,你指的是另一件事。在您的描述中没有足够的细节来重新创建和调试您的问题。@mario请忘记注释,我的问题是,何时调用initContainer,因为我在官方文档中不清楚。