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

hi·2023년 8월 1일
0

쿠버네티스

목록 보기
22/64
post-custom-banner

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 길게 주어도 됨. 그러나 스타트업 프로브 사용하면 파드 초기화 끝나기 전에 파드 재시작 가능. 라이브네스 길게 주면 기다려야함

post-custom-banner

0개의 댓글