What triggers init container to be run?
Will editing deployment descriptor (or updating it with helm), for example, changing the image tag, trigger the init container?
Will deleting the pod trigger the init container?
Will reducing replica set to null and then increasing it trigger the init container?
Is it possible to manually trigger init container?
What triggers init container to be run?
Basically initContainers
are run every time a Pod
, which has such containers in its definition, is created and reasons of creation of a Pod
can be quite different. As you can read in official documentation init containers run before app containers in a Pod
and they always run to completion. If a Pod’s init container fails, Kubernetes repeatedly restarts the Pod until the init container succeeds. So one of the things that trigger starting an initContainer
is, among others, previous failed attempt of starting it.
Will editing deployment descriptor (or updating it with helm), for example, changing the image tag, trigger the init container?
Yes, basically every change to Deployment
definition that triggers creation/re-creation of Pods
managed by it, also triggers their initContainers
to be run. It doesn't matter if you manage it by helm or manually. Some slight changes like adding for example a new set of labels to your Deployment
don't make it to re-create its Pods
but changing the container image
for sure causes the controller (Deployment
, ReplicationController
or ReplicaSet
) to re-create its Pods
.
Will deleting the pod trigger the init container?
No, deleting a Pod
will not trigger the init container. If you delete a Pod
which is not managed by any controller it will be simply gone and no automatic mechanism will care about re-creating it and running its initConainers
. If you delete a Pod
which is managed by a controller, let's say a replicaSet
, it will detect that there are less Pods
than declared in its yaml definition and it will try to create such missing Pod
to match the desired/declared state. So I would like to highlight it again that it is not the deletion of the Pod
that triggers its initContainers
to be run, but Pod
creation, no matter manual or managed by the controller such as replicaSet
, which of course can be triggered by manual deletion of the Pod
managed by such controller.
Will reducing replica set to null and then increasing it trigger the init container?
Yes, because when you reduce the number of replicas to 0, you make the controller delete all Pods
that fall under its management. When they are re-created, all their startup processes are repeated including running initContainers
being part of such Pods
.
Is it possible to manually trigger init container?
As @David Maze already stated in his comment The only way to run an init container is by creating a new pod, but both updating a deployment and deleting a deployment-managed pod should trigger that. I would say it depends what you mean by the term manually. If you ask whether this is possible to trigger somehow an initContainer
without restarting / re-creating a Pod
- no, it is not possible. Starting initContainers
is tightly related with Pod
creation or in other words with its startup process.
Btw. all what you're asking in your question is quite easy to test. You have a lot of working examples in kubernetes official docs that you can use for testing different scenarios and you can also create simple initContainer
by yourself e.g. using busybox
image which only task is to sleep
for the required number of seconds. Here you have some useful links from different k8s docs sections related to initContainers: