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 # 파일 생성; 30초 대기; 파일 삭제; 10분 대기
livenessProbe:
exec: # 컨테이너 안에서 직접 명령어 실행
command:
- cat
- /tmp/healthy # cat /tmp/healthy 명령어 통해 healthy 파일 있는지 판단. 존재하면 정상, 아니면 비정상
initialDelaySeconds: 5 # 파드 생성 이후 5초뒤 liveness probe 실행
periodSeconds: 5 # 5초마다 라이브네스 프로브 실행
http-liveness.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: registry.k8s.io/liveness
args:
- /server # 컨테이너가 시작할 때 '/server' 명령어 실행
livenessProbe:
httpGet: # HTTP GET 요청을 통해 컨테이너 상태 확인
path: /healthz # '/healthz' 엔드포인트에서 200 OK 응답 반환하는 지 확인
port: 8080 # 라이브네스 프로브에서 요청보낼 포트
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3 # 파드 생성 후 3초 뒤 최초의 라이브네스 프로브 실행
periodSeconds: 3 # 3초마다 라이브네스 프로브 실행
tcp-liveness-readiness.yaml
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: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
레디니스 프로브(Readiness Probe):
- 레디니스 프로브는 파드가 준비되었는지(Ready) 여부를 확인하는 데 사용
- 파드가 정상적으로 실행되고 클라이언트 요청을 처리할 준비가 되었는지를 판단
- 서비스의 트래픽을 받을 수 있는 상태인지를 검사하고, 해당 파드가 레디 상태가 아니라면 서비스로 트래픽을 라우팅하지 않음. 이를 통해 파드가 레디 상태가 아닐 때에도 트래픽을 보내지 않고 서비스 중단을 방지할 수 있음
라이브니스 프로브(Liveness Probe):
- 라이브니스 프로브는 파드가 여전히 살아있는지(Alive) 여부를 확인하는 데 사용
- 파드가 정상적으로 작동하고 살아있는지를 주기적으로 확인하여, 파드가 정지하거나 비정상적으로 동작하는 상황을 탐지
- 라이브니스 프로브가 실패하면 쿠버네티스는 해당 파드를 재시작하여 다시 정상 상태로 유지하려고 시도
ports:
- name: liveness-port
containerPort: 8080
hostPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 1 # 프로브가 연속으로 1번 실패하면 파드 재시작
periodSeconds: 10 # 라이브니스 프로브를 10초마다 실행
startupProbe: # 파드가 초기화되는 동안의 상태를 모니터링. 주로 초기화에 오랜 시간이 걸리는 경우 사용
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 30 # 프로브가 연속을 30번 실패하면 해당 파드 비정상으로 판단, 이후엔 파드 종료됨
periodSeconds: 10 # 스타트업 프로브를 10초마다 실행
그냥 스타트업 프로브 없이 라이브네스 프로브의 initialDelaySeconds 길게 주어도 됨. 그러나 스타트업 프로브 사용하면 파드 초기화 끝나기 전에 파드 재시작 가능. 라이브네스 길게 주면 기다려야함