Home > Software design >  Init container not restarting on pod restart
Init container not restarting on pod restart

Time:06-17

I have an init container that do some stuff that needs for the main container to run correctly, like creating some directories and a liveness probe that may fail if one of these directories were deleted. When the pod is restarted due to fail of liveness probe I expect that init container is also being restarted, but it won't.

This is what kubernetes documentation says about this:

If the Pod restarts, or is restarted, all init containers must execute again. https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

Easiest way to prove this behavior was to use the example of the pod from k8s documentation, add a liveness probe that always fails and expect that init container to be restarted, but again, it is not behaving as expected.

This is the example I'm working with:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  restartPolicy: Always
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo "App started at $(date)" && tail -f /dev/null']
    livenessProbe:
      exec:
        command:
        - sh
        - -c
        - exit 1
      initialDelaySeconds: 1
      periodSeconds: 1
  initContainers:
  - name: myapp-init
    image: busybox:1.28
    command: ['/bin/sh', '-c', 'sleep 5 && echo "Init container started at $(date)"']

Sleep and date command are there to confirm that init container was restarted.

The pod is being restarted:

NAME            READY   STATUS    RESTARTS   AGE
pod/myapp-pod   1/1     Running   4          2m57s

But from logs it's clear that init container don't:

$ k logs pod/myapp-pod myapp-init
Init container started at Thu Jun 16 12:12:03 UTC 2022

$ k logs pod/myapp-pod  myapp-container
App started at Thu Jun 16 12:14:20 UTC 2022

I checked it on both v1.19.5 and v1.24.0 kubernetes servers.

The question is how to force the init container to restart on pod restart.

CodePudding user response:

The restart number refers to container restarts, not pod restarts.

init container need to run only once in a pos lifetime, and you need to design your containers like that, you can read this PR, and especially this comment

  • Related