* 본 게시물은 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의와 강의 자료를 바탕으로 작성되었습니다.
이번 강의
- Probe의 동작과 설정에 따른 동작 차이를 알아보자
들어가기에 앞서
- Probe란?
Kubernetes가 Pod내의 Container에 대해 주기적으로 수행하는 진단(Health Check)
- 종류
- startupProbe
Container가 정상적으로 실행되었는 지 체크하고 성공하면 startupProbe 기능을 중단하고
livenessProbe와 readinessProbe를 실행 - livenessProbe
Container가 정상적으로 동작하고 있는 지 주기적으로 확인하고 실패하면 Pod를 재기동 - readinessProbe
Container가 트래픽을 받을 준비가 되었는 지 확인하고 성공하면 외부 트래픽을 받을 수 있는 상태로 만들고, 실패하면 요청이 성공할 때까지 외부 트래픽을 받지 못하도록 막음
- startupProbe
Probe 동작 과정

1. Container 실행 후, App이 초기화되는 단계에서부터 startupProbe가 진단을 시작한다.
때문에, 초기에 실패 횟수가 많을 수 있다. (failureThreshold를 낮게 설정하면, 재시작 빈도가 많아질 수 있음)
2. startupProbe 성공 후, livenessProbe와 readnessProbe가 실행되며 반복적으로 진단
(App이 동작되는 동안 진단이 계속되므로, 최대한 가볍게 체크할 수 있게 만들어야 함)
3. 장애 발생 시, 각 Probe의 failureThreshold에 따라 일정 횟수 누적되면 동작을 멈춤
일시적인 장애가 발생한다면?

1. readinessProbe와 livenessProbe의 failureThreshold가 같을때,
조금만 기다리면 App이 정상으로 돌아오는 상황인데, 재기동되면서 이전에 처리 중이던 작업들이 실패하게 됨
2. readinessProbe와 livenessProbe의 failureThreshold가 다를때,
외부 트래픽은 미리 막고 livenessProbe의 진단 주기를 적당히 길게 주는 것으로 재시동이 쉽게 일어나지 않게 할 수도 있음
[미션 2]
▶ 응용1 : startupProbe가 실패 되도록 설정해서 Pod가 무한 재기동 상태가 되도록 설정해 보세요.

- 대시보드 > 디플로이먼트 > startupProbe의 failureThreshold를 1로 수정하여 App 초기화 과정에서 실패가 무조건 1번은 발생해 계속 재시작됨
▶ 응용2 : 일시적 장애 상황(App 내부 부하 증가)가 시작 된 후, 30초 뒤에 트래픽이 중단되고, 3분 뒤에는 App이 재기동 되도록 설정해 보세요.
- 일시적 장애 상황에서 30초 뒤 트래픽을 중단 시키기 위해 readinessProbe를 10초마다 검사를 하되, 3번 실패 시 트래픽을 중단하도록 구성
- 3분 뒤에는 재기동이 되어야 하므로, livenessProbe는 30초마다 검사하며 6번의 응답 실패 시 재기동되도록 설정



- 일시적으로 부하 상황을 만들고 readinessProbe가 3번 실패하고, 외부 API를 호출했을 때 요청이 실패한다.

- 부하가 시작된 시각인 16시 54분에서 3분이 지났을 때, livenessProbe가 마지막으로 실패하고 재기동하는 것을 확인했다.
▶ 응용3 : Secret 파일(/usr/src/myapp/datasource/postgresql-info.yaml)이 존재하는지 체크하는 readinessProbe를 만들어 보세요.
### 기존 readinessProbe 설정 ###
readinessProbe:
httpGet:
path: /readiness
port: 8080
scheme: HTTP
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
### 수정된 readinessProbe 설정 ###
readinessProbe:
exec:
command:
- cat
- /usr/src/myapp/datasource/postgresql-info.yaml
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
'Tech > Kubernetes(K8s)' 카테고리의 다른 글
잘못된 정보가 있다면 말씀해주세요!