Nodejs

 

Kubernetes Probe  튜토리얼


1. Probe란 무엇인가?

쿠버네티스에서 Pod은 단순히 컨테이너를 띄우는 것에 그치지 않고, 지속적으로 "건강 상태"를 모니터링합니다. 이때 사용하는 것이 Probe(프로브)입니다.

  • Liveness Probe: 컨테이너가 "살아 있는지" 확인합니다. 만약 실패하면 쿠버네티스는 해당 컨테이너를 재시작시킵니다.

  • Readiness Probe: 컨테이너가 "서비스 요청을 받을 준비가 되었는지" 확인합니다. 준비되지 않았다면 트래픽을 보내지 않습니다.

 비유하자면:

  • Liveness는 "심장 박동 체크" → 살아있나?

  • Readiness는 "출근 준비 체크" → 일할 준비됐나?

 

2. Liveness Probe 실습

먼저 liveness_probe.yml을 살펴봅시다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 5
            periodSeconds: 5

여기서 중요한 부분은 livenessProbe 입니다.

  • httpGet: / 경로로 80포트에 요청을 보냄

  • initialDelaySeconds: 5 → 컨테이너 시작 후 5초 뒤부터 체크 시작

  • periodSeconds: 5 → 5초마다 한번씩 체크

실행 결과 (일부):

WSL2-Ubuntu24:kubernetes$ kubectl apply -f liveness_probe.yml
deployment.apps/nginx-deployment created

WSL2-Ubuntu24:kubernetes$ kubectl describe deployment nginx
...
Liveness:      http-get http://:80/ delay=5s timeout=1s period=5s #success=1 #failure=3
...

이제 만약 컨테이너가 / 요청에 응답하지 않는다면, 쿠버네티스가 자동으로 재시작시켜줍니다. 즉, 서비스가 "죽은 척" 하고 있어도 알아서 회복시켜주는 거죠.

 

 

3. Readiness Probe 실습

이번엔 readiness_probe.yml을 보겠습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80
          readinessProbe:
            httpGet:
              path: /not-ready
              port: 80
            initialDelaySeconds: 5
            periodSeconds: 5

여기서 readinessProbe가 /not-ready 경로를 체크하도록 되어 있습니다. 당연히 nginx 기본 설정에는 /not-ready가 없으니 실패합니다.

실행 결과 (일부):

WSL2-Ubuntu24:kubernetes$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-64cf76d6d9-l5vp7   0/1     Running   0          55s

보시다시피 Pod은 Running 상태지만 READY는 0/1 입니다. 즉, 컨테이너는 살아있지만 요청을 받을 준비는 안 됐다고 판단하는 것이죠.

✅ 이런 식으로 readinessProbe는 실제 서비스 엔드포인트 준비 상태를 체크하는 데 유용합니다. DB 연결이나 초기 캐시 로딩처럼, 컨테이너가 켜졌다고 바로 서비스할 수 없는 경우가 많거든요.


 

4. 실행 결과 정리

  • Liveness Probe: 응답이 없으면 Pod 재시작 → 서비스가 죽어도 자동 회복

  • Readiness Probe: 응답이 없으면 트래픽 제외 → 준비 안 된 Pod은 요청을 받지 않음

 

 

5. 응용 포인트

  • 실제 서비스에서는 /healthz, /readyz 같은 전용 엔드포인트를 만들어 probe가 체크하도록 합니다.

  • DB 연결, 마이그레이션, 캐시 로딩 등 "준비 작업"이 끝날 때까지 readinessProbe가 트래픽을 막아줍니다.

  • LivenessProbe와 ReadinessProbe를 함께 써야 안정적인 운영이 가능합니다. (살아있지만 준비 안 된 Pod, 준비됐지만 죽은 Pod 구분)

 

 

이 전체 내용 요약

  1. Liveness Probe는 컨테이너의 생존 여부를 체크하고, 실패 시 자동 재시작합니다.

  2. Readiness Probe는 컨테이너가 요청을 받을 준비가 되었는지 체크하고, 준비되지 않으면 트래픽에서 제외합니다.

  3. 두 Probe를 함께 활용하면 안정적이고 자동 회복 가능한 Kubernetes 애플리케이션을 만들 수 있습니다.

 

 

 

 

about author

PHRASE

Level 60  라이트

명성을 얻은 예술가는 그 때문에 괴로워한다. 따라서 그들의 처녀작이 때로는 최고다. -베토벤

댓글 ( 0)

댓글 남기기

작성