계속 실행되어야 하는 애플리케이션 컨테이너가 아니라,
단지 pod 실행시 한 번만 수행해야하는 작업이 있을 경우 사용한다.
git repo에서 소스 코드 받아오는 것, DB 세팅, 스크립트 실행 등등의 작업을 처리할 때 사용 가능
일반 컨테이너처럼 definition 파일에 initContainer 를 선언할 수 있음
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app.kubernetes.io/name: MyApp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
먼저 initContainer가 실행된 후 container가 실행된다.
initContainer가 여러 개일 경우 순서대로 하나씩 실행되고 종료된다.
하나라도 initContainer가 정상 종료되지 않으면, 정상적으로 initContainer가 종료될 때 까지 반복해서 다시 시작한다.