3.3.2. Init 컨테이너
init 컨테이너 는 Pod 앱 컨테이너를 시작하기 전에 시작되는 Pod의 컨테이너입니다. Init 컨테이너는 나머지 컨테이너가 시작되기 전에 볼륨을 공유하고, 네트워크 작업을 수행하고, 계산을 수행할 수 있습니다. Init 컨테이너는 일부 사전 조건이 충족될 때까지 애플리케이션 컨테이너의 시작을 차단하거나 지연할 수도 있습니다.
Pod가 시작되면 네트워크와 볼륨을 초기화한 후 init 컨테이너가 순서대로 시작됩니다. 각 init 컨테이너는 다음이 호출되기 전에 성공적으로 종료해야 합니다. init 컨테이너가 시작되지 않거나(런타임) 실패로 종료되면 Pod 재시작 정책에 따라 다시 시작됩니다.
Pod는 모든 init 컨테이너가 성공할 때까지 준비할 수 없습니다.
일부 init 컨테이너 사용 예는 Kubernetes 설명서를 참조하십시오.
다음 예제에서는 두 개의 init 컨테이너가 있는 간단한 포드를 간략하게 설명합니다. 첫 번째 init 컨테이너는 myservice
를 대기하고 두 번째 컨테이너는 mydb
를 기다립니다. 두 컨테이너가 모두 성공하면 Pod가 시작됩니다.
샘플 Init Container Pod 오브젝트 정의(YAML)
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: busybox command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myservice 1 image: busybox command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] - name: init-mydb 2 image: busybox command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
각 init 컨테이너에는 readinessProbe
를 제외한 모든 app 컨테이너의 필드가 있습니다. Pod가 계속 시작되려면 Init 컨테이너가 종료되어야 하며 완료 이외의 준비는 정의할 수 없습니다.
Init 컨테이너는 컨테이너에 activeDeadlineSeconds
및 livenessProbe
를 포함하여 init 컨테이너가 영구적으로 실패하지 않도록 할 수 있습니다. 활성 데드라인에는 init 컨테이너가 포함됩니다.