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의
ExecAction(exec)
: 주어진 커맨드 수행 후return code == 0
이면 성공TCPSocketAction(tcpSocket)
: 지정 port가 활성화 되어 있다면 성공HTTPGetAction(httpGet)
: 지정<host>:<port><path>
에 GET 요청 수행 후200 <= status code < 400
이면 성공- 진단 성공 또는 probe가 없을 시
Success
, 실패 시Failure
, 진단 자체가 실패하는 경우Unknown
으로 표시됩니다.
Termination
- 종료 시작
- Pod
.spec.preStop
훅이 정의된 경우 해당 훅을 실행합니다.- 컨테이너 이미지에
STOPSIGNAL
이 있는 경우 이 신호를, 없는 경우SIGTERM
을 컨테이너의 기본 프로세스에 전송합니다.- Pod 내의 컨테이너들은 랜덤한 순서로 신호를 받습니다.
- 종료가 시작된 후
.spec.terminationGracePeriodSeconds
이 지나면SIGKILL
을 컨테이너의 기본 프로세스에 전송합니다.
- Service
- 종료가 시작된 Pod의 Endpoint를 제거합니다.
- Pod