- In a Multi-Container Pods, all containers continues to run as long as the Pod is running.
- Sometimes, you only want to run a containers once, like:
- Pulling dependencies before the main app starts.
- For these kinds of one-time startup tasks, we use Init containers.
- If either container stops or fails, Kubelet restarts the containers based on
restartPolicy- If
restartPolicyis set toAlwaysorOnFailure:- Kubelet will restart the failing init container until it succeeds.
- If
restartPolicyis set toNever:- Kubelet will not restart the failing init container and mark
Podas Failed
- Kubelet will not restart the failing init container and mark
- If
How to create
- Init containers are just like regular containers, but they are placed in a special section in the pod YAML
- Their job is to finish a task and exit successfully.
- The main app container won’t start until all Init containers exit successfully.
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'git clone ;']- This runs a Git clone command before the main app starts.
Multiple Init Containers
- you can define more than one init container and they run in order and one at a time.
- The next init container won’t run until the previous one finishes successfully.
- For example:
initContainers:
- name: init-myservice-1
image: busybox:1.28
command: ['sh', '-c', 'do echo Hello; sleep 2; done;']
- name: init-myservice-2
image: busybox:1.28
command: ['sh', '-c', 'do echo World; sleep 2; done;']⬅️ Multi-Container Pods | Pod Lifecycle ➡️