InitContainer란
일반적으로 다중 컨테이너 Pod에서는 각 컨테이너가 Pod의 생명주기 동안 지속적으로 실행된다.
예를 들어, 웹 애플리케이션 컨테이너와 로그 에이전트 컨테이너가 함께 실행되는 경우, 두 컨테이너 모두 Pod의 수명 동안 계속 살아 있어야 하며, 하나라도 실패하면 Pod가 재시작된다.
때로는 특정 작업이 Pod의 주 컨테이너가 실행되기 전에 단 한 번만 실행되고 완료되어야 할 때가 있다.
예를 들어, 웹 애플리케이션이 실행되기 전에 코드나 바이너리를 git과 같은 저장소에서 가져오는 작업이 필요할 수 있다.
또는 외부 서비스나 데이터베이스가 준비될 때까지 대기하는 작업이 필요할 수도 있다. 이런 경우에 InitContainer가 사용된다.
InitContainer의 특징
1. 완료 후에 주 컨테이너가 실행된다.
InitContainer는 일반 컨테이너와 유사하게 구성되지만, Pod의 initContainers 섹션에 명시된다. InitContainer가 완료될 때까지 주 컨테이너는 실행되지 않으며, InitContainer가 여러 개 있을 경우 순차적으로 실행된다.
2. InitContainer가 실패하면 주 컨테이너는 실행되지 않는다.
만약 InitContainer가 실패할 경우, 쿠버네티스는 Pod를 반복해서 재시작하며, InitContainer가 성공할 때까지 주 컨테이너가 실행되지 않는다. Pod는 pending 상태로 멈춰있게 된다.
InitContainer 실습
정상적으로 InitContainer가 실행되었을 때
다음과 같은 yaml 파일로 multi container pod를 실행시킨다.
apiVersion: v1
kind: Pod
metadata:
name: blue
namespace: default
spec:
containers:
- command:
- sh
- -c
- echo The app is running! && sleep 3600
image: busybox:1.28
name: green-container-1
initContainers:
- command:
- sh
- -c
- sleep 5
image: busybox
name: init-myservice
정상적으로 Running 되는 것을 확인 가능하다.
kubectl describe po blue
다음 명령어로 Init container 상태 확인 시 정상적으로 실행이 완료된 후에 바로 Terminated로 바뀌는 것을 확인할 수 있다.
InitContainer가 아직 끝나지 않았을 때
InitContainer 부분을 다음과 같이 설정할 경우 sleep을 30분동안 진행한다.
의도적으로 주 컨테이너가 실행이 되는지 안 되는지 확인이 가능하다.
initContainers:
- command:
- sh
- -c
- sleep 600
image: busybox:1.28
imagePullPolicy: IfNotPresent
name: warm-up-1
- command:
- sh
- -c
- sleep 1200
image: busybox:1.28
imagePullPolicy: IfNotPresent
name: warm-up-2
예상대로 다른 Pod들과 달리 아직 Init으로 멈춰있는 것을 확인 가능하다.
InitContainer가 정상 실행되지 않았을 때
의도적으로 command를 sleeeep으로 오류로 줘 정상적인 실행이 불가하게끔 해주었다.
initContainers:
- command:
- sh
- -c
- sleeeep 600
image: busybox:1.28
imagePullPolicy: IfNotPresent
name: warm-up-1
상태를 확인할 경우 purple과 다르게 CrashLoopBackOff 오류가 반환되는 것을 확인 가능하다.
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes Cluster Upgrade (0) | 2024.10.24 |
---|---|
Kubernetes Drain, Cordon and Uncordon (0) | 2024.10.23 |
Kubernetes 환경 변수(Configmap, secret) 설정 (0) | 2024.10.22 |
Kubernetes Metrics Server 구축 (0) | 2024.10.20 |
Kubernetes 환경에서의 Monitoring (3) | 2024.10.20 |