Cloud/k8s-CKAD

[CKAD] Pod의 상태 파악 방법

jinkwon.kim 2024. 8. 26. 01:00
728x90
반응형

개요

Pod의 상태를 파악하는 전방 적인 방법을 알아보겠습니다. 

Pod의 배포 상태 확인

kubectl describe pod {pod_name} 수행 시 Conditions 항목에서 True/False를 통하여 기본적인 상태를 알 수 있습니다. 

Conditions 항목 설명

 

  • PodReadyToStartContainers: Pod가 container를 시작할 준비가 되었음을 의미합니다.
  • Initialized: 모든 Init container가 성공적으로 완료되었음을 의미합니다.
  • Ready: Pod가 Traffic을 수신할 준비가 되었음을 의미합니다.
  • ContainersReady: Pod 내의 모든 container가 실행 준비가 되었음을 의미합니다.
  • PodScheduled: Pod가 특정 node에 scheduliling되었음을 의미합니다.

위 모든게 True가 되면 kubect get pods 시 아래 처럼 나옵니다.

Pod의 Traffic 처리 상태 확인

readinessProbe를 사용하여 확인 가능합니다.

readinessProbe 개념

  • 목적
  • container가 Traiffic을 처리할 준비가 되었는지를 확인합니다.
  • readinessProbe가 실패하면, 해당 Pod는 service의 endpoint에서 제외되어 client의 요청을 받지 않습니다.
  • 사용 시점
  • application이 외부 service에 의존하거나, 초기화 작업이 완료된 후에만 정상적으로 동작할 때 사용됩니다.
  • 상황
  • application이 정상적으로 실행 중이지만, 특정 이유로 일시적으로 트래픽을 처리할 수 없는 경우에 유용합니다. 예를 들어, 데이터베이스 연결 대기 중, 캐시 로드 중, 또는 임시 유지보수 작업 등에서 사용됩니다.
  • 결과
  • readinessProbe가 실패하면, Kubernetes는 Pod를 service endpoint에서 제외하고(pod를 service와 분리), Pod는 client 요청을 처리하지 않게 됩니다. 하지만, Pod와 컨테이너는 계속 실행됩니다.

readinessProbe 사용법

readinessProbe는 다음과 같은 방법을 사용할 수 있습니다:

  1. HTTP GET Probe
  2. HTTP GET 요청을 통해 응답 상태 코드를 확인합니다.
  3. TCP Socket Probe
  4. 지정된 포트에 TCP 소켓 연결을 시도하여 연결 가능 여부를 확인합니다.
  5. Exec Probe
  6. 컨테이너 내에서 명령을 실행하고 그 결과를 확인합니다.

HTTP GET Probe

Pod에서 http /healthz 를 8080을 받아서 처리하는게 있어야 합니다.
아래 예제에서는 /healthz 경로에 HTTP GET 요청을 보내고, 응답 코드가 200이면 컨테이너가 준비된 것으로 간주합니다.

readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

TCP Socket Probe

 3306 포트에 TCP 연결을 시도하여 연결에 성공하면 준비 상태로 간주합니다.

readinessProbe:
  tcpSocket:
    port: 3306
  initialDelaySeconds: 5
  periodSeconds: 10

Exec Probe

container 내부에서 /tmp/healthy 파일이 존재하는지 확인하는 명령을 실행합니다. 이 명령이 성공하면 container가 준비된 것으로 간주합니다.

readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 10

 

주요 파라미터

  • initialDelaySeconds: 처음 probe를 실행하기 전 대기 시간 (초).
  • periodSeconds: probe를 주기적으로 실행하는 간격 (초).
  • timeoutSeconds: probe의 타임아웃 시간 (초).
  • successThreshold: 성공으로 간주하기 위한 연속 성공 횟수.
  • failureThreshold: 실패로 간주하기 위한 연속 실패 횟수.

작동 방식

  • readinessProbe가 실패하면 해당 컨테이너에 대한 service traffic이 중지됩니다.
  • readinessProbe가 실패하면, Pod의 상태를 나타내는 conditions 항목 중에서 Ready 조건이 False로 설정됩니다.
  • 준비 상태를 다시 확인하며, 성공하면 트래픽이 다시 전달됩니다.

 

Pod의 Container 상태 확인

원리

livenessProbe를 사용하여 Kubernetes에서 container가 정상적으로 실행되고 있는지를 확인하기 위해 사용됩니다.

livenessProbe가 실패하면 Kubernetes는 해당 container를 재시작합니다. 이는 container가 어떤 이유로든 응답하지 않거나 멈추었을 때, 자동으로 복구할 수 있도록 도와줍니다.

livenessProbe 구성 요소

livenessProbe는 readinessProbe와 유사하게 다음 세 가지 방법을 사용할 수 있습니다:

  1. HTTP GET Probe
    HTTP GET 요청을 통해 컨테이너가 살아있는지를 확인합니다.
  2. TCP Socket Probe
    지정된 포트에 TCP 소켓 연결을 시도하여 연결 가능 여부를 확인합니다.
  3. Exec Probe
    컨테이너 내에서 명령을 실행하고 그 결과를 확인합니다.

HTTP GET Probe

/healthz 경로에 HTTP GET 요청을 보내고, 응답 상태가 200이 아닌 경우 Kubernetes가 컨테이너를 재시작합니다.
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 10

TCP Socket Probe

3306 포트에 TCP 연결을 시도하여 연결에 실패하면 container가 비정상 상태로 간주되어 재시작됩니다.

livenessProbe:
  tcpSocket:
    port: 3306
  initialDelaySeconds: 3
  periodSeconds: 10

Exec Probe 

특정 파일 (/tmp/healthy) 파일을 읽는 명령을 실행하여, 파일이 존재하지 않으면 컨테이너가 비정상 상태로 간주되고 재시작됩니다.

livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 3
  periodSeconds: 10

주요 파라미터

  • initialDelaySeconds: 처음 probe를 실행하기 전 대기 시간 (초).
  • periodSeconds: probe를 주기적으로 실행하는 간격 (초).
  • timeoutSeconds: probe가 완료되기까지 기다리는 시간 (초).
  • successThreshold: 프로브가 성공으로 간주되기 위해 필요한 연속 성공 횟수 (대개 1로 설정).
  • failureThreshold: 프로브가 실패로 간주되기 위해 필요한 연속 실패 횟수.

작동 방식

  • livenessProbe가 실패하면 Kubernetes는 해당 컨테이너를 재시작합니다.
  • livenessProbe가 계속해서 성공하면 컨테이너는 정상적으로 유지됩니다.

readinessProbe  와 livenessProbe 차이점

분류 readinessProbe   livenessProbe
목적 컨테이너가 트래픽을 처리할 준비가 되었는지 확인 컨테이너가 정상적으로 실행 중인지 확인
결과 실패 시 Pod는 서비스 엔드포인트에서 제외됨, 컨테이너는 계속 실행 실패 시 컨테이너를 재시작, Pod는 여전히 서비스 엔드포인트에 남아있음
사용 시점 애플리케이션이 트래픽을 받을 준비가 되었을 때, 외부 의존성 체크 애플리케이션이 응답하지 않거나, 장애 발생 시 복구 목적
주요 사용 사례 데이터베이스 연결 대기, 초기화 작업 중, 임시 장애 복구 메모리 누수, 데드락, 응답 없음 등의 상황에서 컨테이너 복구

정리

배포 상태 확인

kubectl describe pod {pod_name} 수행 시 Conditions 항목에서 True/False를 통하여 기본적인 상태를 알 수 있습니다. 

readinessProbe 란?

container가 traffic을 받을 준비가 되었는지를 확인하여 service endpint에 등록될지 여부를 결정

livenessProbe 란?

container 정상적으로 동작하는지를 확인하여 문제가 발생하면 container를 재시작합니다. 

 

728x90
반응형