반응형
1. 프로브 실행 순서
[라이브네스] -> [리디네스] -> [스타트업]
2. 라이브네스(Liveness) 프로브
라이브네스 - 애플리케이션이 응답 상태 확인
컨테이너의 상태를 주기적으로 확인하여, 컨테이너가 응답하지 않거나 비정상 상태인 경우, 쿠버네티스가 컨테이너를 자동으로 재시작하도록 돕고, 관리자가 직접 개입하지 않아도 애플리케이션의 가용성과 안정성을 유지할 수 있다.
2-1) 예제 1 - 파일로 체크
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
위 코드는 healthy라는 파일을 만들고, 삭제하는 기능의 컨테이너이다. 여기서 Pod의 상태를 확인하는 라이브네스(Liveness) 프로브 방법은 이 healthy라는 파일이 있는지 없는지로 설정했다.(성공 시 0 반환)
- initialDelaySeconds: 5
Pod가 실행되고, 5초 후부터 라이브네스 체크 - periodSeconds: 5
5초마다 점검
2-2) 예제 2 - HTTP Get 체크
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: registry.k8s.io/e2e-test-images/agnhost:2.40
args:
- liveness
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
GET으로 요청 했을 경우 응답 코드 400 미만은 정상(200대 - 정상, 300대 - 리다이렉션, 400대 - 클라이언트 오류, 500대 - 서버 오류) 그 외는 컨테이너를 재시작한다.
3. 레디네스(Readiness) 프로브
레디네스 - 애플리케이션이 완전한 초기화와 준비 상태를 마치고 실제 요청을 처리할 준비가 된 상태 확인
레디네스 프로브는 Pod가 요청을 처리할 준비가 되었는지 확인한다. 프로브가 실패하면 해당 파드는 서비스의 로드 밸런싱 대상에서 제외되어, 비정상적인 파드로 인해 요청 처리가 실패하는 것을 방지한다. 프로브가 다시 성공하면 파드는 로드 밸런싱 대상에 다시 포함된다.
3-1) 예제 1 - TCP 소켓 체크
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: 15
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
라이브네스 프로브를 TCP 소켓 통신으로 확인하면, 포트가 열려있기만 해도 응답 가능한 상태라고 판단하고, 레디네스 프로브는 애플리케이션이 완전하게 초기화되어서 외부 요청을 처리할 준비가 되었는지를 확인하게 된다.
4. 스타트업(Startup) 프로브
스타트업 프로브는 애플리케이션이 초기화되는 시간을 보장하기 위해 사용된다. 애플리케이션이 시작되기 전에 라이브니스와 레디네스 프로브가 작동하면, 초기화 시간 동안 컨테이너를 비정상으로 잘못 판단하여 재시작하는 등의 문제를 초래할 수 있다. 스타트업 프로브는 이를 방지하기 위해 초기화가 완료될 때까지 라이브니스와 레디네스 프로브를 비활성화하고, 애플리케이션 시작 후 정상적인 상태 확인 프로세스를 이어갈 수 있도록 한다
4-1) 예제 1 - HTTP GET 체크
ports:
- name: liveness-port
containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 1
periodSeconds: 10
startupProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 30
periodSeconds: 10
위 예제 처럼 스타트업(Startup) 프로브와 라이브네스(Liveness) 프로브가 HTTP GET으로 동작할 때, 스타트업 프로브가 애플리케이션의 초기화 과정이 완료되었는지 확인하기 전에 라이브네스 프로브가 동작하면, 초기화가 완료되지 않은 상태에서 응답이 비정상적으로 나올 수 있다. 이 경우 Kubernetes는 애플리케이션이 정상적으로 동작하지 않는다고 판단하고 컨테이너를 재시작할 수 있다.
따라서, 애플리케이션의 시작 시간이 오래 걸리는 경우, 스타트업 프로브를 사용하여 애플리케이션이 완전히 시작될 때까지 라이브네스 프로브가 동작하지 않도록 설정하는 것이 중요하다. 스타트업 프로브가 성공적으로 실행된 후에야 라이브네스 프로브가 동작하게 하여, 애플리케이션이 준비되지 않은 상태에서 불필요하게 재시작되는 문제를 방지할 수 있다.
- failureThreshold : 30
30번 검사 - periodSeconds : 10
10초 간격 수행 - 30번을 10초 간격으로 수행하기 때문에 총 300초 후에도 컨테이너가 정상 동작 하지 않는경우 종료(300초 동안 컨테이너가 실행되는 시간을 준다.)
반응형
'DevOps > Docker, K8s' 카테고리의 다른 글
[k8s] 쿠버네티스 레이블(Label) 설정 및 셀렉터(Selector) 방법 (0) | 2024.12.02 |
---|---|
[k8s] 포트(POD) 개념 및 디스크립터 yaml 생성 방법 (0) | 2024.11.26 |
[k8s] 미니큐브(MiniKube)로 쿠버네티스 설치 방법 (0) | 2024.11.18 |
[k8s] 쿠버네티스의 파드(Pod) 조회(상세조회) (0) | 2024.10.23 |
[k8s] 쿠버네티스에 컨테이너 배포 방법 (0) | 2024.10.22 |