✍ Posted by Immersive Builder Seong
Pod Lifecycle
POD Status
Pod Status는 파드가 라이프사이클의 어느 단계에 있는지를 나타냅니다.
파드가 처음 생성될 때 Pending 상태가 되는데, 스케줄러가 파드를 어느 노드에 배치할 것인지 알아내는 단계입니다. 만약 스케줄러가 적절한 노드를 찾지 못하면 Pending 상태가 유지됩니다. 이후 파드가 스케줄링되면 ContainerCreating 상태로 변경이 되고, 어플리케이션에 필요한 이미지를 가져와 컨테이너를 실행하게 됩니다. 그리고 파드의 모든 컨테이너가 시작되면 Running 상태가 되어, 프로그램이 성공적으로 완료되거나 종료될 때까지 해당 상태를 유지합니다. 마지막으로 Succeeded 상태는 파드의 모든 컨테이너가 성공적으로 완료된 상태이고, Failed 상태는 하나 이상의 컨테이너가 오류 또는 시스템에 의해 비정상적으로 종료된 상태를 의미합니다.
Pod Conditions
Pod Conditions는 파드의 상태를 알려주는 참 또는 거짓 값을 가지는 항목의 배열입니다.
Pod Conditions에는 PodScheduled, Initialized, ContainerReady, Ready 등 4개의 항목이 있고, 각각 의미하는 바는 아래와 같습니다.
- PodScheduled : 파드가 노드에 스케줄링되었는지 여부
- Initialized : 모든 Init 컨테이너가 성공적으로 완료되었는지 여부
- ContainerReady : 파드의 모든 컨테이너가 준비 상태인지 여부
- Ready: 값이 true이면, 파드가 사용자에게 요청을 제공하거나 서비스의 로드밸런싱을 위한 파드로 추가될 수 있음
여기서 Ready Condition이 중요한데, 쿠버네티스 서비스가 트래픽을 전달할 때 파드의 Ready Condition에 의존하기 때문입니다. 기본적으로 쿠버네티스는 컨테이너가 생성되는 즉시 사용자 트래픽을 제공할 준비가 된 것으로 간주하여 파드의 Ready Condition을 true로 설정합니다. 그러나 실제 컨테이너 내의 어플리케이션이 실행되는데에는 어느 정도의 시간이 소요되고, 서비스는 이를 인지하지 못하므로 트래픽을 그대로 전달하여 사용자가 라이브 상태가 아닌 어플리케이션에 접속하는 문제가 발생합니다.
Readiness Probes
위와 같은 문제를 해결하기 위해서 Readiness Probes를 사용합니다. Readiness Probes는 쿠버네티스에서 컨테이너가 트래픽을 처리할 준비가 되었는지 확인하는 메커니즘입니다. 아래는 Readiness Probes를 적용한 예시입니다.
쿠버네티스는 Ready Condition을 true로 바로 설정하지 않고, HTTP API 요청에 대한 응답이 정상적인지를 먼저 테스트합니다. 그때까지 서비스는 파드가 Ready 상태가 아니라고 판단하여 어떠한 트래픽도 파드로 전달하지 않습니다. 이러한 방식으로 어플리케이션이 라이브 상태일 때에만 사용자가 접속할 수 있게 됩니다.
추가 옵션에 대한 설명은 아래와 같습니다.
옵션 | 설명 |
initialDelaySeconds | 어플리케이션 초기 설정으로 인한 지연 시간 (단위: 초) |
periodSeconds | Probe를 실행하는 주기 (단위: 초) |
failure Threshold | Readiness Probes가 실패할 경우 재시도 횟수 (디폴트: 3) |
또한, ReadinessProbes 옵션으로 사용 가능한 형식은 httpGet 이외에도 tcpSocket, exec command 등이 있습니다.
- httpGet
- tcpSocket
- exec command
[출처]
1) https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
'K8s > Core Concept' 카테고리의 다른 글
[K8s] Jobs & CronJobs (0) | 2024.11.26 |
---|---|
[K8s] Liveness Probes 란? (0) | 2024.11.24 |
[K8s] 소프트웨어 배포 전략(Software Deployment Strategies) (0) | 2024.11.19 |
[K8s] CoreDNS 란? (0) | 2024.11.16 |
[K8s] Helm 이란? (1) | 2024.11.14 |