When setting up a pod we might need to populate some shared storage or generate some configuration files to be used for the actual containers that are going to run on that pod. It might not make sense that some tools just required for the setting up the environment to be available on the final container. Futhermore, we might need to run some scripts with higher privileges than we really need for running the pod. The initContainers come handy for covering this use-cases.
We can add init containers using spec.initContainers on the same way we use spec.containers. For example:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: initContainers: - name: my-init image: demo containers: - name: webserver image: nginx
There are some considerations though:
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 27/04/2021