쿠버네티스 헬스 체크(Kubernetes Health Check)

Health Check의 사용 목적?

  • 시스템, 서비스 또는 애플리케이션의 상태를 확인합니다.
  • 가용성(정상적으로 사용이 가능한 정도)을 모니터링합니다.
  • Load Balancer 사용 시에 Health Check를 통해 서버의 상태를 확인하고 정상적인 서버에만 트래픽을 전달할 수 있습니다.

K8S에서의 Health Check

  • 애플리케이션에 이상이 생겨도 Pod은 계속 작동할 수 있다.
  • 이를 감지하고 해결하기 위해 Health Check를 사용한다
  • Container에서 명령으로 실행이 가능하다.
  • HTTP를 사용해 주기적으로 URL을 확인할 수 있다.

Liveness Probe

  • Liveness Probe는 컨테이너 내부의 애플리케이션이 여전히 실행 중인지를 확인하는 데 사용됩니다. 컨테이너가 비정상적인 상태에 빠진 경우, Liveness Probe는 해당 컨테이너를 재시작하거나 다른 조치를 취할 수 있도록 Kubernetes에 알립니다. 일반적으로 Liveness Probe는 HTTP 요청, TCP 연결, 실행 가능한 명령 등을 통해 애플리케이션의 상태를 확인합니다.

Readiness Probe

  • Readiness Probe는 컨테이너가 클라이언트의 요청을 처리할 준비가 되었는지를 확인하는 데 사용됩니다. 컨테이너가 초기화 또는 로드되는 동안 애플리케이션이 완전히 실행 준비되기 전에 요청을 처리하는 것을 방지하기 위해 사용됩니다. Readiness Probe가 실패하는 경우, 해당 컨테이너는 트래픽의 대상에서 제외될 수 있습니다. 일반적으로 Readiness Probe는 Liveness Probe와 유사한 방식으로 애플리케이션의 상태를 확인합니다.

구성 방식

  • HTTP Probe: HTTP GET 요청을 특정 경로 또는 포트로 보내고, 특정 응답 코드 또는 응답 본문을 확인합니다.
  • TCP Probe: 특정 포트로 TCP 연결을 시도합니다. 연결이 성공하면 컨테이너가 정상 작동 중이라고 판단됩니다.
  • Exec Probe: 컨테이너 내에서 실행 가능한 명령을 실행하고, 명령의 종료 코드를 확인합니다.
  • 스크립트 Probe: 컨테이너 내에서 사용자 정의 스크립트를 실행하고, 결과를 확인합니다.

각 Probe가 가지는 속성

  • 초기 지연 시간 (initial delay): 컨테이너가 시작된 후 Probe를 시작하기까지 대기하는 시간입니다.
  • 주기 (period): Probe를 실행하는 주기입니다.
  • 타임아웃 시간 (timeout): Probe의 응답을 기다리는 시간입니다.
  • 실패 임계값 (failure threshold): Probe가 연속으로 실패한 경우 컨테이너를 비정상적인 상태로 간주합니다.
  • 성공 임계값 (success threshold): Probe가 연속으로 성공한 경우 컨테이너를 정상적인 상태로 간주합니다.

작성 예제

apiVersion: apps/v1
kind: Deployment
metadata:
  name: health-check-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: health-check-test-container
        image: me/health-check-test-container
        ports:
        - name: test-port
          containerPort: 3000
        livenessProbe:
          httpGet:
            path: /
            port: nodejs-port
          initialDelaySeconds: 15
          timeoutSeconds: 30
        readinessProbe:
          httpGet:
            path: /
            port: test-port
          initialDelaySeconds: 15
          timeoutSeconds: 30



Comments:

comments powered by Disqus

results matching ""

    No results matching ""