전공영역 공부 기록

쿠버네티스 pod running과 ready 차이

악분 2023. 8. 13. 11:15
반응형

팀 동료분이 질문주신 내용 중에 pod Running상태와 Ready가 뭐가 다른지 물어봤습니다. 저는 정확하게 몰라 같이 공부해보자고 답변을 하고 어떤 차이가 있는지 공부했습니다.

 

이 글에서 다루는 예제코드는 github에 공개되어 있습니다.

 

1. 선수지식: pod의 컨테이너

pod는 1개 이상 컨테이너를 갖습니다. 예를 들어 아래 pod는 컨테이너 2개(nginx, busybox)를 갖습니다. 컨테이너 갯수는

kubectl get pod 결과에서 READY필드에 표시됩니다.

예제코드: https://github.com/choisungwook/pod_running_and_ready/tree/main/example1_nginx

 

2. pod running과 ready 비교

running(실행중)은 pod에 정의한 컨테이너 이미지가 실행되었는지 확인합니다. ready(준비)는 조건을 검사하여 pod를 사용할 수 있는지 확인합니다.

pod의 컨테이너가 실행되었다는 의미와 사용가능한지 검사하는 것은 무슨 차이가 있을까요?
pod의 컨테이너가 실행되더라도 여러가지 이유로 의도한 동작이 실행되지 않을 수 있습니다. 예를 들어 부팅과정이 느린 웹 애플리케이션을 pod로 실행하면, 컨테이너가 실행되더라도 부팅이 끝날 때까지 컨테이너는 아무런 동작을 하지 않습니다. 

 

컨테이너가 실행되고 있지만, 애플리케이션 부팅 등으로 컨테이너가 비정상이라면 pod 사용할 없습니다. 그래서 pod 사용할 있는지 검사하게 되는데, 검사 통과 유무를 표시하는 필드가 ready입니다. 검사조건은 livenessprobe, readinessprobe 있습니다.

 

정리하면, pod running은 pod 사용할 있다라는 것을 보장하지 않습니다. 개념에 익숙하지 않으면 pod 장애분석에 걸림돌이 됩니다.

 

3. pod running 상세내용

3.1 running이 되는 조건

pod running라는 것은 무엇을 의미할까요? pod 정의한 컨테이너 모두 생성이 되었고 1 이상 컨테이너가 running 상태입니다.

 

컨테이너가 생성되는 조건은 init container, prestart hook, 컨테이너 이미지 다운로드 성공 등이 있습니다. 컨테이너 running 컨테이너 이미지를 실행했다는 의미입니다.

 

3.2 running 조회 방법

예제코드: https://github.com/choisungwook/pod_running_and_ready/tree/main/example4_invalid_containers

pod running상태는 kubectl describe pod에서 조회할 있습니다. 아래 예제는 모든 컨테이너가 생성되었고 running상태입니다. 그러므로 pod running상태입니다.

 

존재하지 않는 컨테이너 이미지가 있으면 컨테이너가 생성이 안됩니다. 그러므로 pod pending상태에 있습니다.

 

4. pod ready 상세내용

4.1 ready가 되는 조건

pod ready pod 사용할 준비가 되었다는 의미로, pod 정의한 모든 컨테이너가 ready이면서 커스텀 조건을 통과해야 합니다. 글은 커스텀 조건은 제외하고 컨테이너 ready상태에 집중적으로 살펴보겠습니다.

출처: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-readiness-status

 

4.2 ready 조회 방법

kubectl describe pod명령어로 pod ready되었다는 것을 확인할 있습니다. Conditions.Ready필드는 pod ready되었는지 표시합니다. conditions.ContainersReady pod 정의한 컨테이너가 모두 ready상태인지 표시합니다.

 

예제코드: https://github.com/choisungwook/pod_running_and_ready/tree/main/example1_nginx

 

컨테이너 ready갯수는 kubectl get pod로 쉽게 조회할 수 있습니다. 컨테이너 ready 검사조건은 livenessprobe, readinessprobe 등이 있습니다.

 

반응형

 

5. pod가 not ready일때 미치는 영향

pod not ready라는 말은 pod 사용할 없는 상태라는 의미입니다. 그러므로 pod 참조하는 쿠버네티스 리소스에 영향을 미칩니다. 대표적으로 replicaset, service 있습니다.

 

replicaset pod not ready이면, 새로운 pod 선택(selector)하지 못합니다. replicaset pod spec 수정하여 새로운 pod 생성되더라도, pod not ready이면 새로운 pod 사용하지 못한다는 의미입니다.

예제코드: https://github.com/choisungwook/pod_running_and_ready/tree/main/example3_containers

 

service 엔드포인트(endpoints) pod 추가되지 않습니다. 그러므로 service 사용하여 pod 접근하지 못합니다.

 

6. 마치며

running ready 공부한 2가지를 느꼈습니다.

 

첫번째, 안전하게 pod 배포하기 위해 probe 적극적으로 사용해야겠다는 마음을 가졌습니다. running pod 사용할 있다는 의미가 아니므로 pod 정상적이라는 것을 보장하지 못합니다. 그리고 서비스 장애까지 발생하는 최악의 상황을 만날 있습니다.

 

번째, ready 쿠버네티스 리소스뿐만 아니라 쿠버네티스 오픈소스에 많은 영향을 있다는 것을 알았습니다. 예를 들어 argo rollout promote조건은 replicaset ready여야 합니다. ready라는 의미를 정확히 해석하지 못하면, 안전하게 pod 배포하지 못해 서비스 장애를 만날 있습니다.

 

참고자료

반응형