컨테이너 생성과 실제 서비스 준비는 약간의 차이 존재 -> 컨테이너가 생성되어도 빌드중이면 사용 못할테니
ex) Spring Boot APP을 빌드하는 동안 서비스 접속 불가능 -> 컨테이너는 생성되었지만, 서비스 준비는 안됨
도커에서 컨테이너끼리 health check
를 할 수 있는 것 처럼
쿠버네티스도 컨테이너가 생성되고 서비스가 준비되었다는 것을 체크하는 옵션 제공
컨테이너가 정상적으로 동작하는지 체크하고 정상
적으로 동작하기 않는다면 컨테이너를 재시작
정상 상태
체크하는 방식은 httpGet
, tcpSocket
, exec
존재
apiVersion: v1
kind: Pod
metadata:
name: echo-lp
labels:
app: echo
spec:
containers:
- name: app
image: [이미지 이름]
livenessProbe:
httpGet:
path: /not/exist
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 2 # Default 1
periodSeconds: 5 # Defaults 10
failureThreshold: 1 # Defaults 3
컨테이너가 준비되었는지 체크하고 정상
적으로 준비되지 않았다면 Pod으로 들어오는 요청 제외
apiVersion: v1
kind: Pod
metadata:
name: echo-rp
labels:
app: echo
spec:
containers:
- name: app
image: [이미지 이름]
readinessProbe:
httpGet:
path: /not/exist
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 2 # Default 1
periodSeconds: 5 # Defaults 10
failureThreshold: 1 # Defaults 3
두가지 모두 사용하는 것이 일반적이다.
apiVersion: v1
kind: Pod
metadata:
name: echo-health
labels:
app: echo
spec:
containers:
- name: app
image: [이미지 이름]
livenessProbe:
httpGet:
path: /
port: 3000
readinessProbe:
httpGet:
path: /
port: 3000