K8S Pod 생애주기와 실습 (with 트러블슈팅)

정석·2025년 5월 2일
1
post-thumbnail

Kubernetes에서 Pod는 다음과 같은 생애주기를 거칩니다.

  • PendingRunningSucceeded/Failed

스케줄러가 노드를 선택해 Pod를 배정하면 Pending 상태로 진입합니다. 이후 노드에 정확히 바인딩되고, 모든 컨테이너가 정상적으로 실행되면 Running 상태가 됩니다. 반대로 컨테이너 중 하나라도 종료되거나 오류가 발생하면, Pod는 Failed 상태로 변경됩니다.

bash 환경에서 Pod 생성부터 삭제까지 과정을 명령어로 실습해보고, 중간에 발생할 수 있는 오류 상황까지 다루어 보겠습니다.


Pod 상태 실시간 모니터링

먼저 Pod 상태를 지속적으로 확인하기 위해 --watch 옵션을 활용합니다.

kubectl get pods -o wide --watch

이 명령어를 입력해둔 상태로 다른 터미널을 엽니다.


Pod 생성

새 터미널에서 다음과 같이 Redis Pod를 생성합니다.

kubectl create -f redis.yaml

  • Pending 상태로 시작하여,
  • worker2 노드에서 컨테이너를 생성하고,
  • 최종적으로 Running 상태가 되는 과정을 실시간으로 확인할 수 있습니다.

Pod 삭제

Pod를 삭제할 때는 다음 명령어를 사용합니다.

kubectl delete pods --all

Pod가 Terminating 상태로 변경되고, 이후 삭제 완료되는 과정을 볼 수 있습니다.


Pod 생성 트러블슈팅

Redis를 생성하는 과정에서 다음과 같이 Error 상태에 빠진 Pod를 확인했습니다.

보다 정확한 원인을 파악하기 위해 describe 명령어로 세부 정보를 확인했습니다.

kubectl describe pod <pod명>

오류 원인은 간단했습니다.
rediss라는 잘못된 이미지 이름으로 인해, 이미지 Pull에 실패한 것이었습니다.

이를 해결하기 위해 kubectl edit 명령어를 사용해 Pod를 직접 수정했습니다.

kubectl edit pods <수정할 pod명>

Vi 편집기 화면에서 잘못된 image 이름을 올바르게 수정한 뒤 저장했습니다. 수정 후 Pod는 정상적으로 실행되었습니다.


활용한 명령어

명령어설명
kubectl get pods -o wide --watchPod 상태를 실시간으로 모니터링
kubectl create -f redis.yamlredis.yaml 파일을 기반으로 Pod 생성
kubectl delete pods --all모든 Pod 삭제
kubectl describe pod <pod명>Pod 상세 정보 확인 (오류 원인 분석)
kubectl edit pods <수정할 pod명>실행 중인 Pod의 설정 직접 수정 (Vi 편집기 이용)

0개의 댓글