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