https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/
공식문서를 읽고 정리하면 다음과 같다.
더 많은 내용이 있지만 사실 가장 중요한 내용은
"앱 컨테이너들은 병렬로 실행되는 반면, 초기화 컨테이너들은 어떠한 앱 컨테이너라도 시작되기 전에 실행 완료되어야 하므로, 초기화 컨테이너는 사전 조건들이 충족될 때까지 앱 컨테이너가 시동되는 것을 막거나 지연시키는 간편한 방법을 제공한다."
이부분이라고 생각한다.
예전 프로젝트할때 db 파드가 먼저 뜨고 다른 파드들이 떠야 파드들이 정상동작하는 상황이 있었다.
당시 helm chart로 배포하였는데, 처음에는 그냥 수동으로 한번씩 파드를 delete 처리하여 다시 띄웠고, 그 후 배포스크립트를 분리해서 2번에 걸쳐서 배포하였었다.
그 후 initContainer를 아래와 같은 식으로 세팅하여 db가 뜨기 전까지는 pod 생성을 막았었다.
until nc -z db-service 5432; do echo waiting for db; sleep 3; done;