Kubernetes init containers

2 min read | by Jordi Prats

Kubernetes init containers are a special container that runs before the main containers on the Pod. They are usually used used for setting up the environment and populate some shared storage to be used for the actual containers.

We can add them using spec.initContainers on the same way we use spec.containers:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  initContainers:
  - image: my-init-image
    name: my-init
  containers:
  - image: my-app-image
    name: my-app
  - image: my-other-app-image
    name: my-other-app

We must take into account that:

  • Init containers are not expected to keep running, they must finish it's task.
  • Each init container must complete successfully before the next one starts.

If we use --watch with kubectl get pods we can see how this works:

$ kubectl get pods --watch
NAME                          READY   STATUS            RESTARTS   AGE
pet2cattle-8475d6697-jbmsm    0/1     Pending           0          0s
pet2cattle-8475d6697-jbmsm    0/1     Pending           0          0s
pet2cattle-8475d6697-jbmsm    0/1     Init:0/4          0          0s
pet2cattle-8475d6697-2sk4m    0/1     Init:1/4          0          4s
pet2cattle-8475d6697-2sk4m    0/1     Init:2/4          0          5s
pet2cattle-8475d6697-2sk4m    0/1     Init:2/4          0          6s
pet2cattle-8475d6697-2sk4m    0/1     Init:3/4          0          7s
pet2cattle-8475d6697-2sk4m    0/1     PodInitializing   0          8s
pet2cattle-8475d6697-2sk4m    0/1     Running           0          9s
pet2cattle-8475d6697-2sk4m    0/1     Running           0          41s
pet2cattle-8475d6697-2sk4m    1/1     Running           0          2m20s

Posted on 21/06/2021