Init Container

han·2025년 2월 21일

Init Container란 무엇인가?

https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/
공식문서를 읽고 정리하면 다음과 같다.

  • pod 내에서 애플리케이션 컨테이너가 시작되기 전에 실행되는 하나 이상의 특수한 컨테이너이다.
  • 애플리케이션 컨테이너가 실행되기 위한 준비 작업을 수행한다.
  • 여러 개의 init container를 순서대로 정의할 수 있으며, 이전 init container가 성공적으로 완료되어야 다음 init container가 실행된다.
  • init container 중 하나라도 실패하면 kubernetes는 pod를 재시작한다.
  • 만약 파드의 restartPolicy 를 Never으로 설정되어있다면 pod는 실행되지 않는다
  • 초기화 컨테이너는 lifecycle, livenessProbe, readinessProbe 또는 startupProbe 를 지원하지 않는다

더 많은 내용이 있지만 사실 가장 중요한 내용은
"앱 컨테이너들은 병렬로 실행되는 반면, 초기화 컨테이너들은 어떠한 앱 컨테이너라도 시작되기 전에 실행 완료되어야 하므로, 초기화 컨테이너는 사전 조건들이 충족될 때까지 앱 컨테이너가 시동되는 것을 막거나 지연시키는 간편한 방법을 제공한다."
이부분이라고 생각한다.

예전 프로젝트할때 db 파드가 먼저 뜨고 다른 파드들이 떠야 파드들이 정상동작하는 상황이 있었다.
당시 helm chart로 배포하였는데, 처음에는 그냥 수동으로 한번씩 파드를 delete 처리하여 다시 띄웠고, 그 후 배포스크립트를 분리해서 2번에 걸쳐서 배포하였었다.
그 후 initContainer를 아래와 같은 식으로 세팅하여 db가 뜨기 전까지는 pod 생성을 막았었다.
until nc -z db-service 5432; do echo waiting for db; sleep 3; done;

0개의 댓글