[쿠버네티스 워크로드] 라이브네스, 레디네스, 스타트업 프로브 소개

IMKUNYOUNG·2023년 8월 1일
0

쿠버네티스

목록 보기
22/64

Liveness Probe

  • 파드 상태 확인하고 비정상 상태인 경우 파드를 재시작
  • 서비스 중단 시간 최소화하고 안정적인 서비스 운영을 위해 사용

Readiness Probe

  • 포드가 Ready 상태에 있는지 확인하고 정상 서비스 시작
  • 포드가 Ready 상태가 아니라면 로드밸런싱 (라우팅) x

Startup Probe

  • 애플리케이션의 시작 시기 확인하여 가용성 높임
  • Liveness와 Readiness의 기능 비활성화


라이브네스 커맨드 설정 (파일 존재 여부 확인)

  • 리눅스 환경에서 커맨드 실행 성공 시 컨테이너 유지
  • 실패하면 컨테이너 재시작

exec-liveness.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec # 파드 이름
spec:
  containers:
  - name: liveness # 컨테이너 이름
    image: registry.k8s.io/busybox # 경량 리눅스 시스템 도구
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600 # 파일 생성; 30초 대기; 파일 삭제; 10분 대기
    livenessProbe:
      exec: # 컨테이너 안에서 직접 명령어 실행
        command:
        - cat
        - /tmp/healthy # cat /tmp/healthy 명령어 통해 healthy 파일 있는지 판단. 존재하면 정상, 아니면 비정상
      initialDelaySeconds: 5 # 파드 생성 이후 5초뒤 liveness probe 실행
      periodSeconds: 5 # 5초마다 라이브네스 프로브 실행


라이브네스 웹 설정 (http 요청 확인)

  • 서버 응답 코드가 200이상 400미만이면 파드 유지
  • 아니면 파드 재시작

http-liveness.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: registry.k8s.io/liveness
    args:
    - /server # 컨테이너가 시작할 때 '/server' 명령어 실행
    livenessProbe:
      httpGet: # HTTP GET 요청을 통해 컨테이너 상태 확인
        path: /healthz # '/healthz' 엔드포인트에서 200 OK 응답 반환하는 지 확인
        port: 8080 # 라이브네스 프로브에서 요청보낼 포트
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3 # 파드 생성 후 3초 뒤 최초의 라이브네스 프로브 실행
      periodSeconds: 3 # 3초마다 라이브네스 프로브 실행


라이브네스, 레디네스 프로브 구성

Readiness TCP 설정

  • 준비 프로브는 8080 포트 검사
  • 5초 후부터 검사 시작
  • 검사 주기는 10초

Liveness TCP 설정

  • 활성화 프로브는 8080 포트 검사
  • 15초 후부터 검사 시작
  • 검사 주기는 20초

tcp-liveness-readiness.yaml

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: registry.k8s.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

레디니스 프로브(Readiness Probe):

  • 레디니스 프로브는 파드가 준비되었는지(Ready) 여부를 확인하는 데 사용
  • 파드가 정상적으로 실행되고 클라이언트 요청을 처리할 준비가 되었는지를 판단
  • 서비스의 트래픽을 받을 수 있는 상태인지를 검사하고, 해당 파드가 레디 상태가 아니라면 서비스로 트래픽을 라우팅하지 않음. 이를 통해 파드가 레디 상태가 아닐 때에도 트래픽을 보내지 않고 서비스 중단을 방지할 수 있음

라이브니스 프로브(Liveness Probe):

  • 라이브니스 프로브는 파드가 여전히 살아있는지(Alive) 여부를 확인하는 데 사용
  • 파드가 정상적으로 작동하고 살아있는지를 주기적으로 확인하여, 파드가 정지하거나 비정상적으로 동작하는 상황을 탐지
  • 라이브니스 프로브가 실패하면 쿠버네티스는 해당 파드를 재시작하여 다시 정상 상태로 유지하려고 시도


Statup Probe

  • 시작할 때까지 검사를 수행
  • http 요청을 통해 검사
  • 30번을 검사하며 10초 간격으로 수행
  • 300(30*10)초 후에도 파드가 정상 동작하지 않는 경우는 종료
  • 300초 동안 파드가 정상 실행되는 시간을 벌어줌
ports:
- name: liveness-port
  containerPort: 8080
  hostPort: 8080

livenessProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 1 # 프로브가 연속으로 1번 실패하면 파드 재시작
  periodSeconds: 10 # 라이브니스 프로브를 10초마다 실행

startupProbe: # 파드가 초기화되는 동안의 상태를 모니터링. 주로 초기화에 오랜 시간이 걸리는 경우 사용
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30 # 프로브가 연속을 30번 실패하면 해당 파드 비정상으로 판단, 이후엔 파드 종료됨
  periodSeconds: 10 # 스타트업 프로브를 10초마다 실행

그냥 스타트업 프로브 없이 라이브네스 프로브의 initialDelaySeconds 길게 주어도 됨. 그러나 스타트업 프로브 사용하면 파드 초기화 끝나기 전에 파드 재시작 가능. 라이브네스 길게 주면 기다려야함

0개의 댓글