Pod 수명 주기
Probe
kubelet에 의해 주기적으로 수행되는 진단 작업을 Probe라고 합니다. 진단 작업 수행을 위해 미리 구현된 핸들러가 있습니다.
spec:
restartPolicy: Always # Always|OnFailure|Never
containers:
- # ...
# startupProbe|livenessProbe|readinessProbe
livenessProbe:
# exec|httpGet|tcpSocket|grpc
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 0 # 처음 probe를 시작하기 전 대기 시간
periodSeconds: 10 # probe를 실행하는 주기
successThreshold: 1 # Success로 판단하기 위한 최소 성공 횟수
failureThreshold: 3 # Failure로 판단하기 위한 최소 실패 횟수
timeoutSeconds: 1 # probe를 실행하는 시간 제한
kubectl explain pod.spec.containers.startupProbe --recursive
startupProbe: 컨테이너 내의 애플리케이션이 시작되었는지 확인합니다- Failure 상태가 되면 컨테이너는
restartPolicy에 따라 처리됩니다 - Success 상태가 된 후에
livenessProbe,readinessProbe가 시작됩니다
- Failure 상태가 되면 컨테이너는
livenessProbe: 컨테이너가 정상적으로 작동 중인지 확인합니다- Failure 상태가 되면 컨테이너는
restartPolicy에 따라 처리됩니다
- Failure 상태가 되면 컨테이너는
readinessProbe: 컨테이너가 요청을 처리할 준비가 되었는지 확인합니다- Failure 상태가 되면 Pod의
Ready상태가False로 변경됩니다 - 연결된 Service의 Endpoint에서 제거됩니다
- 문제 있는 애플리케이션에 접근을 사전에 차단해 줌으로써 문제가 전파되는 것을 방지할 수 있습니다
- Failure 상태가 되면 Pod의
exec- 주어진 커맨드 수행 후
return code == 0이면 진단 성공입니다. command: []
- 주어진 커맨드 수행 후
httpGet- GET 요청 수행 후
200 <= status code < 400이면 진단 성공입니다. scheme: HTTP|HTTPShost: <host>port: <port>path: <path>
- GET 요청 수행 후
tcpSocket- 지정된 포트에 TCP 연결이 성공하면 진단 성공입니다.
host: <host>port: <port>
grpc- gRPC health check 서비스를 호출하여
SERVING상태이면 진단 성공입니다. - gRPC GitHub / docs / GRPC Health Checking Protocol
port: <port>service: <service>
- gRPC health check 서비스를 호출하여
initialDelaySeconds: 0periodSeconds: 10successThreshold: 1failureThreshold: 3timeoutSeconds: 1
Termination
- 종료 시작
- Pod
.spec.preStop훅이 정의된 경우 해당 훅을 실행합니다.- 컨테이너 이미지에
STOPSIGNAL이 있는 경우 이 신호를, 없는 경우SIGTERM을 컨테이너의 기본 프로세스에 전송합니다.- Pod 내의 컨테이너들은 랜덤한 순서로 신호를 받습니다.
- 종료가 시작된 후
.spec.terminationGracePeriodSeconds이 지나면SIGKILL을 컨테이너의 기본 프로세스에 전송합니다.
- Service
- 종료가 시작된 Pod의 Endpoint를 제거합니다.
- Pod