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 컨테이너 실행을 마침.

더 알아보기 (Learn more)