Hanpy's Blog

두 글자 이상 입력하세요.

Infra · Kubernetes

kubernetes Init Container

Kubernetes에서 하나의 POD에 여러개의 Container를 포함하는 것을 Multi Container Pod라고 합니다.

Hanpy약 1분
시리즈Kubernetes14 / 18
  1. 01Kubernetes Introduction
  2. 02Kubernetes Container
  3. 03Kubernetes Container Orchestration
  4. 04쿠버네티스 구성요소
  5. 05Kubernetes Reconciliation
  6. 06Kubernetes Selector/Label
  7. 07Kubernetes Network
  8. 08Kubernetes Storage Volume
  9. 09Kubernetes Custom Resource Definition and Api Aggregation
  10. 10Kubernetes plugin
  11. 11Kubernetes Yaml/Command
  12. 12Kubernetes Pod
  13. 13Multi Container Pod
  14. 14kubernetes Init Container지금 읽는 글
  15. 15Kubernetes Probe
  16. 16Gracefull Shutdown
  17. 17Pod Scheduling
  18. 18Kubernetes - CoreDNS란 무엇인가?
시리즈 목차 보기 →

파드의 초기화를 위해 사용하는 컨테이너입니다. Application을 컨테이너로 실행 시키기 전에, Init Container를 활용하여 특정 작업을 실행하고 종료하는 것이 가능합니다. yaml 작성 방법은 아래와 같습니다.

yaml
apiVersion: v1
kind: Pod
metadata:
  name: init-example
spec:
  initContainers:
    - name: my-initializer
      image: app-initializer
  containers:
    - name: main-container
      image: my-server
    - name: second-container
      image: another-server
    - name: last-container
      image: sub-server

만약 curl/wget를 통해 초기화가 필요한 부분들이 있다면, 이부분에서 셋팅을 해주면 됩니다. 초기 셋팅 부분을 분리하여 Init container로 분리하여 준다면 기존 컨테이너에서 관련 로직을 분리하여 container 제작이 가능해집니다. 작업 순서를 확인해보면 Init container를 실행하고 정상종료가 된 후에 containers를 띄우게 됩니다. 만약 Init container가 정상 종료가 되지 않는다면(exit가 0이 아닌 경우) 다시 Init container를 재실행하게 됩니다.

당연한 말이지만, Init Container는 작업 순서는 우선 실행됩니다. 하지만 위의 yaml 내부의 containers에 main-container/second-container/last-container는 작업 순서를 보장하지 않습니다. Init Container를 여러개 등록하는 것도 가능합니다. 여러개의 컨테이너를 등록하는 것과 동일하게 yaml을 작성해 주면 됩니다. Init Container는 순서를 보장하기 때문에 순자 실행됩니다. 모든 Init Container의 실행 후에 종료가 된 이후에 기본 컨테이너를 실행하게 됩니다.

실습

단일 컨테이너와 멀티 컨테이너는 적는 방식은 동일합니다.

Init Container Test
apiVersion: v1
kind: Pod
metadata:
  name: init-container-pod
spec:
  initContainers:
    - name: my-initializer
      image: busybox
      command: ['sh', '-c', 'sleep 10']
  containers:
    - name: nginx
      image: nginx:1.24
    - name: redis
      image: redis
  • yaml을 실행하면, init 컨테이너를 통해 10초 기다렸다가 2개의 컨테이너가 실행되는 것을 예측 할 수 있습니다.
Hanpy백엔드·인프라 엔지니어 · AI 트렌드 정리 중
About 보기