쿠버네티스 Pod의 restartPolicy & Deployment

도람·2025년 11월 23일
post-thumbnail

restartPolicy

restartPolicy는 파드(Pod)의 사양(spec) 중 하나로, 컨테이너가 종료되었을 때 쿠버네티스가 어떻게 동작할지를 정의하는 옵션이다.


restartPolicy 종류 정리

공식문서 기준으로 가능한 값은 다음 세가지이다.

의미
Always컨테이너가 어떤 이유로 종료되든지 항상 재시작한다.
OnFailure컨테이너가 오류(exit code ≠ 0)로 종료될 경우에만 재시작한다.
Never컨테이너가 종료되더라도 자동으로 재시작하지 않는다.

파드 예시 YAML

apiVersion: v1
kind: Pod
metadata:
  name: hello-pod
spec:
  restartPolicy: OnFailure   # ← 여기
  containers:
    - name: hello-container
      image: busybox

여기서 restartPolicy는 spec 바로 아래에 들어간다.
컨테이너와는 동급 레벨이 아니라, 더 상위의 설정이다.


Deployment는 왜 항상 Always여야 할까?

Deployment는 “운영 중인 애플리케이션”을 유지해주는 컨트롤러다.
즉, 서비스가 죽으면 안 되고 언제든지 자동 복구되어야 한다.

그래서 Deployment 템플릿 안에 들어가는 파드 스펙은 무조건 restartPolicy: Always이다.
공식 문서에도 Deployment는 restartPolicy를 Always로 강제한다고 되어있다.

deployment에서 항상 always여야 하는 이유


1) 서비스 가용성 유지
애플리케이션은 중단되면 안 되므로
컨테이너가 죽으면 자동으로 다시 올라와야 한다.

2) ReplicaSet + Deployment 구조의 기본 전제
Deployment는 “항상 파드가 살아있다”는 것을 보장하는 컨트롤러다.
OnFailure나 Never면 이 보장이 깨진다.

3) 정상 종료(exit 0)도 재시작해야 한다
애플리케이션이 정상 종료되더라도 서비스는 지속되어야 한다.
따라서 정상 종료 여부와 관계없이 항상 재시작하는 Always가 필요하다.

따라서 공식 문서에도 Deployment는 restartPolicy를 Always로 강제한다고 되어있다.



참고문서:
[쿠버네티스 공식 홈페이지 - Pod Lifecycle]
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
[datree - Ensure deployment-like resource is using a valid restart policy]
https://hub.datree.io/built-in-rules/ensure-valid-restart-policy?utm_source=chatgpt.com

profile
정도를 걷는 엔지니어

0개의 댓글