Skip to main content

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가 시작됩니다
  • livenessProbe: 컨테이너가 정상적으로 작동 중인지 확인합니다
    • Failure 상태가 되면 컨테이너는 restartPolicy에 따라 처리됩니다
  • readinessProbe: 컨테이너가 요청을 처리할 준비가 되었는지 확인합니다
    • Failure 상태가 되면 Pod의 Ready 상태가 False로 변경됩니다
    • 연결된 Service의 Endpoint에서 제거됩니다
    • 문제 있는 애플리케이션에 접근을 사전에 차단해 줌으로써 문제가 전파되는 것을 방지할 수 있습니다

  • 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를 제거합니다.