Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

디지안의 개발일지

[실습] Pod 생성시 Probe 설정하기 본문

Kubernates

[실습] Pod 생성시 Probe 설정하기

안덕기 2021. 12. 17. 22:59

Probe의 종류

쿠버네티스에서는 애플리케이션의 안정성을 보장하기 위한 장치 중에 하나로 Probe 기능을 제공한다. 

  • Liveness Probe : 컨테이너가 살아있는지 확인하고 문제가 생겼을 때 복구(다시 시작) 하는 역할을 한다.
  • Readiness Probe : Pod가 정상적으로 뜨면 서비스를 기능을 활성화한다. 서비스 기능이 활성화되면 외부 클라이언트가 해당 Pod로 요청을 보낼 수 있다.
  • Startup Probe : 애플리케이션의 활성화 상태를 확인하여 Liveness, Readiness 기능을 활성화 / 비활성화 할지 결정한다.

Liveness 예제

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe: # pod가 살아있는지 점검해준다.
      exec:
        command: # cat /tmp/healthy 명령어가 수행되면 0 아니면 다른 값을 반환한다.
        - cat 
        - /tmp/healthy
      initialDelaySeconds: 5 # Pod 실행되고나서 5초 뒤부터 liveness를 확인한다.
      periodSeconds: 5 # 5초 마다 점검하겠다

liveness Probe는 pod가 애플리케이션이 정상적으로 실행됬는지 확인하는 역할을 한다. 위에서는 command

cat /tmp/healthy를 통해서 애플리케이션이 잘 실행되는지 확인한다. 이 때 Pod가 실행되고 나서 initialDelaySecods 후에 확인을 하고 만약 애플리케이션이 실행이 안됬다면 Pod를 삭제하고 다시 시작한다. 그리고 실행이 되면 5초 마다 실행해서 점검을 한다.

 

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet: # http의 GET 요청으로 사용
        path: /healthz # GET으로 사용할 path
        port: 8080 # Port 정보
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

위는 command를 http로 요청하는 경우다. http의 경우 HTTP 코드가 200 ~ 400 상태 코드 사이의 값을 반환하면 정상으로 보고 HTTP 상태코드가 400 ~ 500인 경우 오류로 보고 Pod를 삭제한다.

 

Readiness Probe 예제

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

tcpSocket이 열려있는지 확인하고 서비스 기능을 활성화한다.

 

Startup Probe 예제

livenessProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 1
  periodSeconds: 10

startupProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10

Readiness와 Liveness를 체크하기 전에 애플리케이션이 정상적으로 동작하는지 확인한다.

 

참고 자료

 

Configure Liveness, Readiness and Startup Probes

This page shows how to configure liveness, readiness and startup probes for containers. The kubelet uses liveness probes to know when to restart a container. For example, liveness probes could catch a deadlock, where an application is running, but unable t

kubernetes.io

 

Why do I need 3 different kind of probes in kubernetes: startupProbe, readinessProbe, livenessProbe

Why do I need 3 different kind of probes in kubernetes: startupProbe readinessProbe livenessProbe There are some questions (k8s - livenessProbe vs readinessProbe, Setting up a readiness, liveness...

stackoverflow.com

 

'Kubernates' 카테고리의 다른 글

k8s에 JMeter 배포하기  (0) 2022.03.07