관리 메뉴

즐겁게, 코드

컨테이너야 잘 지내니? - 프로브 활용하기 본문

☁️ 클라우드/Kubernetes

컨테이너야 잘 지내니? - 프로브 활용하기

Chamming2 2022. 5. 15. 11:26

AWS에서는 대상의 상태를 확인하기 위해 Route53이나 ELB가 제공하는 상태 검사(Health Check) 를 활용할 수 있었는데요, 쿠버네티스에서는 이와 유사한 "프로브" 라는 기능을 통해 상태 검사를 수행할 수 있습니다.

 

이번 글에서는 컨테이너의 상태를 검사할 수 있는 3가지 프로브를 정리해보고자 합니다.

Liveness Probe

Liveness Probe는 컨테이너가 동작 중인지를 검사하는 역할로, 컨테이너 상에서 특정 동작을 수행하거나 엔드포인트로 네트워크 요청을 보냄으로써 해당 컨테이너가 정상적으로 기동중인지를 검사합니다.

  • HTTP 요청을 통해 상태를 검사하는 예시 (httpGet 사용) 
livenessProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 5
  periodSeconds: 5
  failureThreshold: 2
  • HTTP 요청이 불가한 네트워크 서버 등에서 tcp를 통해 상태를 검사하는 예시 (tcpSocket 사용)
livenessProbe:
  tcpSocket:
    port: 8888
  initialDelaySeconds: 5
  periodSeconds: 5
  failureThreshold: 2
  • 상태를 검사하기 위해 특정 exec 커맨드를 실행하는 예시  (exec)
만약 정상적으로 커맨드가 실행되어 0을 반환하면(return 0), 프로브는 컨테이너가 동작 중이라고 판단합니다.
livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5
  failureThreshold: 2

위의 3가지 검사 방식은 뒤에서 다룰 Readiness Probe와 Startup Probe에서도 적용할 수 있습니다.

Readiness Probe

Readiness Probe는 컨테이너가 요청을 처리할 준비가 되었는지 를 검사하기 위한 프로브입니다.

readinessProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 5
  periodSeconds: 5
  failureThreshold: 2

검사에 실패하면 해당 컨테이너를 파드에서 제거하는 Liveness Probe와는 달리, Readiness Probe는 검사에 실패하면 해당 컨테이너에 전해지는 요청을 차단합니다.

  • Liveness Probe와 함께 사용할 때 유의할 점으로는 Liveness Probe는 Readiness Probe의 실행을 기다리지 않고 병렬로 실행되므로, 만약 컨테이너가 요청을 처리할 준비가 되었는지를 먼저 검사하고 싶다면 Liveness Probe에 initialDelaySeconds 속성을 적절히 설정하는 등의 조치가 필요합니다.
  • 또한 프러덕션 환경에서 Readiness 상태를 검사하기 위한 엔드포인트에서는 항상 상태 코드 200을 리턴하도록 해야 합니다.
    쿠버네티스에서는 2xx 또는 3xx 대의 응답 상태 코드를 모두 Ready 상태로 분류하지만, 인그레스와 연결된 외부 로드밸런서는 200 외의 상태 코드를 Ready 상태로 분류하지 않을 수도 있기 때문입니다.

Startup Probe

Startup Probe는 컨테이너에서 어플리케이션이 시작되었는지를 검사하기 위한 프로브로, 주로 PHP 어플리케이션 등 초기 다운로드 & 실행에 오랜 시간이 걸리는 어플리케이션의 실행 상태를 검사할 때 유용합니다. 

startupProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 5
  periodSeconds: 5
  failureThreshold: 2

Startup Probe의 검사가 성공하기 전까지는 Liveness Probe와 Readiness Probe 가 모두 실행되지 않으며, 만약 검사에 실패하면 파드에서 컨테이너를 제거하고 파드의 restartPolicy에 따른 다음 동작을 수행합니다.

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆