Init 컨테이너 디버깅하기
Init 컨테이너 디버깅하기 (Debug Init Containers)
이 페이지는 Init 컨테이너(Init Containers) 실행과 관련된 문제를 조사하는 방법을 보여 줘요. 아래 예시 명령줄은 파드를 <pod-name>으로, Init 컨테이너를 <init-container-1>과 <init-container-2>로 참조해요.
출처: 문서
본문
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 설정돼 있어야 해요. 이 튜토리얼은 제어 플레인 호스트 역할을 하지 않는 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 사용하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용해 만들 수 있어요.
- iximiuz Labs
- Killercoda
- KodeKloud
버전을 확인하려면 kubectl version을 입력하세요.
- Init 컨테이너의 기초에 익숙해야 해요.
- Init 컨테이너를 구성해 봤어야 해요.
Init 컨테이너의 상태 확인하기
파드의 상태를 표시해요.
kubectl get pod <pod-name>
예를 들어 Init:1/2 상태는 두 개의 Init 컨테이너 중 하나가 성공적으로 완료됐다는 것을 나타내요.
NAME READY STATUS RESTARTS AGE
<pod-name> 0/1 Init:1/2 0 7s
상태 값의 더 많은 예시와 그 의미는 '파드 상태 이해하기'를 참고하세요.
Init 컨테이너에 대한 세부 정보 얻기
Init 컨테이너 실행에 대한 더 자세한 정보를 확인해요.
kubectl describe pod <pod-name>
예를 들어 Init 컨테이너가 두 개인 파드는 다음과 같이 보일 수 있어요.
Init Containers:
<init-container-1>:
Container ID: ...
...
State: Terminated
Reason: Completed
Exit Code: 0
Started: ...
Finished: ...
Ready: True
Restart Count: 0
...
<init-container-2>:
Container ID: ...
...
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: ...
Finished: ...
Ready: False
Restart Count: 3
...
Pod Spec의 status.initContainerStatuses 필드를 읽어 Init 컨테이너 상태에 프로그래밍 방식으로 접근할 수도 있어요.
kubectl get pod <pod-name> --template '{{.status.initContainerStatuses}}'
이 명령은 위와 같은 정보를 Go 템플릿으로 포맷해 반환해요.
Init 컨테이너의 로그에 접근하기
로그에 접근하려면 파드 이름과 함께 Init 컨테이너 이름을 전달해요.
kubectl logs <pod-name> -c <init-container-2>
셸 스크립트를 실행하는 Init 컨테이너는 명령이 실행될 때마다 출력해요. 예를 들어 Bash에서 스크립트 시작 부분에 set -x를 실행하면 이렇게 할 수 있어요.
파드 상태 이해하기 (Understanding Pod status)
Init:으로 시작하는 파드 상태는 Init 컨테이너 실행의 상태를 요약해요. 아래 표는 Init 컨테이너를 디버깅할 때 볼 수 있는 몇 가지 예시 상태 값을 설명해요.
| 상태 | 의미 |
|---|---|
| Init:N/M | 파드에는 M개의 Init 컨테이너가 있고, 지금까지 N개가 완료됨. |
| Init:Error | Init 컨테이너가 실행에 실패함. |
| Init:CrashLoopBackOff | Init 컨테이너가 반복적으로 실패함. |
| Pending | 파드가 아직 Init 컨테이너 실행을 시작하지 않음. |
| PodInitializing 또는 Running | 파드가 이미 Init 컨테이너 실행을 마침. |