Kubernetes에서 Pod는 다음과 같은 생애주기를 거칩니다.
스케줄러가 노드를 선택해 Pod를 배정하면 Pending
상태로 진입합니다. 이후 노드에 정확히 바인딩되고, 모든 컨테이너가 정상적으로 실행되면 Running
상태가 됩니다. 반대로 컨테이너 중 하나라도 종료되거나 오류가 발생하면, Pod는 Failed
상태로 변경됩니다.
bash 환경에서 Pod 생성부터 삭제까지 과정을 명령어로 실습해보고, 중간에 발생할 수 있는 오류 상황까지 다루어 보겠습니다.
먼저 Pod 상태를 지속적으로 확인하기 위해 --watch
옵션을 활용합니다.
kubectl get pods -o wide --watch
이 명령어를 입력해둔 상태로 다른 터미널을 엽니다.
새 터미널에서 다음과 같이 Redis Pod를 생성합니다.
kubectl create -f redis.yaml
Pending
상태로 시작하여,worker2
노드에서 컨테이너를 생성하고,Running
상태가 되는 과정을 실시간으로 확인할 수 있습니다.Pod를 삭제할 때는 다음 명령어를 사용합니다.
kubectl delete pods --all
Pod가 Terminating
상태로 변경되고, 이후 삭제 완료되는 과정을 볼 수 있습니다.
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 --watch | Pod 상태를 실시간으로 모니터링 |
kubectl create -f redis.yaml | redis.yaml 파일을 기반으로 Pod 생성 |
kubectl delete pods --all | 모든 Pod 삭제 |
kubectl describe pod <pod명> | Pod 상세 정보 확인 (오류 원인 분석) |
kubectl edit pods <수정할 pod명> | 실행 중인 Pod의 설정 직접 수정 (Vi 편집기 이용) |