[Kubernetes] 컨테이너 프로브 (Container Probe)

2023. 2. 11. 21:54·Cloud Engineering/Kubernetes ⚙️
목차
  1. 컨테이너 프로브 
  2. 프로브 핸들러 
  3.  
  4. 컨테이너 프로브 진단 결과
  5. 컨테이너 프로브 설정 예시 
  6. 참고자료
728x90

컨테이너 프로브 

실제 서비스를 운영하게 되면 쿠버네티스의 컨테이너를 배포해서 운영하게 될 것이다. 그런데 컨테이너가 정상적으로 동작하지 않으면 서비스에 장애가 발생할 것이므로, 컨테이너의 상태를 확인해야 할 것이다. 컨테이너 프로브는 컨테이너가 제대로 실행되고 있는지 진단한다.

컨테이너 프로브에는 세가지 종류가 있으며, 이를 Manifest File 작성 시에 설정해 줄 수 있다. 프로브는 컨테이너의 상태에 따라 startupProbe, readinessProbe, livenessProbe 순서로 동작한다. 프로브는 설정하지 않을 수도 있으며, 원하는 프로브들을 여러개 설정할 수 있다. 

1. startupProbe

컨테이너 내의 어플리케이션이 시작되었는지 확인한다. 
프로브들 중에서 가장 먼저 실행되는 프로브로, startupProbe에서 진단이 실패되면, 성공할 때까지 readinessProbe와 livenessProbe를 실행시키지 않는다. 즉, 어플리케이션이 모두 시작되기 이전에 다른 probe들에 의해서 방해받는 것을 방지하는 것이다. 예를들어서,  시작이 다 되지도 않은 컨테이너인데 liveness 진단이 실패로 되어 kubelet이 Pod을 kill할 수도 있다. 그렇지만 startupProbe 진단 성공 이전에 liveness와 readiness 진단을 하지 않는다면, 지연시간을 두고 시작되는 컨테이너들이 잘못 kill되는 것을 방지할 수 있다. 

2. readinessProbe

컨테이너 내의 어플리케이션이 생성되고 나서 컨테이너가 요청을 처리할 준비가 되었는지 확인한다. 
Pod은 컨테이너들이 모두 준비가 되었을 때 트래픽을 처리할 수 있는 상태 인것으로 확인된다. 
예를 들어서, readinessProbe는 백엔드 서비스를 진단할 때 사용될 수 있다. 진단이 실패이면, 트래픽을 처리할 수 없는 상태라는 것이므로 엔드포인트 컨트롤러는 Pod의 IP 주소를 엔드 포인트에서 제거한다. 
readinessProbe를 선언하지 않으면 기본 상태는 Success이다. 즉, 실패에 대한 진단을 하지 않을 것이다. 

3. livenessProbe

livenessProbe는 컨테이너가 정상적으로 동작 중인지 확인한다. kubelet은 livenessProbe를 사용해서 진단 결과 실패일 경우 restartPolicy에 따라서 재시작을 한다. livenessProbe를 선언하지 않으면 기본 상태는 Success 이다. 

 

프로브 핸들러 

kubelet은 프로브 핸들러를 호출하여 상태를 주기적으로 진단한다. 컨테이너 프로브를 설정할 때 어떤 프로브 핸들러를 사용할지 설정할 수 있으며, 여러개를 사용할 수 도 있다. 프로브 핸들러는 세가지 종류가 있다. 

HTTPGetAction 특정 경로에 HTTP  GET 요청을 시도하고 반환된 응답코드를 확인한다. 
TCPSocketAction 특정 TCP 포트를 연결하고 포트가 활성화 되어있는지 확인한다. 
ExecAction 컨테이너 내의 지정된 바이너리 명령을 실행하고 명령의 exit code를 확인한다. (0 이면 정상 종료, non-zero면 비정상 종료)

 

컨테이너 프로브 진단 결과

  1. Success : 진단 통과
  2. Failure : 실패
  3. Unknown : 진단 자체의 실패

 

컨테이너 프로브 설정 예시 

ManifestFile에 livenessProbe와 ExecAction 프로브 핸들러를 설정해주었다. 

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
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

kubectl create -f exec-liveness.yaml 명령어로 pod을 생성한다. 

35초가 지난 이후 어떻게 실행되었는지 kubectl describe pod liveness-exec 명령어로 확인해보면 다음과 같다. 

/tmp/healthy 디렉토리가 삭제되어서 정상적으로 컨테이너가 실행되지 않아서 livenessProbe가 진단 실패했다. 그래서 kubelet이 컨테이너를 kill했다가 다시 컨테이너가 재시작되어 다시 image를 pull 해오는 것을 확인할 수 있다. 


참고자료

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

 

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

 

728x90

'Cloud Engineering > Kubernetes ⚙️' 카테고리의 다른 글

[Kubernetes] DaemonSet (데몬셋)  (0) 2023.02.13
[Kubernetes] Replication Controller (레플리케이션 컨트롤러)  (0) 2023.02.11
[Kubernetes] Pod Lifecycle (Pod의 생명주기) 와 컨테이너의 상태  (0) 2023.02.11
[Kubernetes] Namespace 생성, 삭제, 확인하기  (0) 2023.02.09
[Kubernetes] Annotation 추가하기  (0) 2023.02.09
  1. 컨테이너 프로브 
  2. 프로브 핸들러 
  3.  
  4. 컨테이너 프로브 진단 결과
  5. 컨테이너 프로브 설정 예시 
  6. 참고자료
'Cloud Engineering/Kubernetes ⚙️' 카테고리의 다른 글
  • [Kubernetes] DaemonSet (데몬셋)
  • [Kubernetes] Replication Controller (레플리케이션 컨트롤러)
  • [Kubernetes] Pod Lifecycle (Pod의 생명주기) 와 컨테이너의 상태
  • [Kubernetes] Namespace 생성, 삭제, 확인하기
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • Kubernetes
  • docker
  • AWS
  • Swift
  • 클라우드
  • BFS
  • Databricks
  • 알고리즘
  • 운영체제
  • 파이썬
  • 데이터엔지니어
  • 스파크
  • Leetcode
  • linux
  • 프로그래머스
  • 데이터엔지니어링
  • 코딩테스트
  • dp
  • 리눅스
  • SPARK
  • 쿠버네티스
  • 빅데이터
  • 데이터브릭스
  • EC2
  • ansible
  • 백준
  • 백트래킹
  • 카카오코딩테스트
  • python
  • dfs

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[Kubernetes] 컨테이너 프로브 (Container Probe)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.