← 학습 카테고리

Learn

Kubernetes

24개 모듈 · 현재 9번째

Kubernetes 모듈 9/24 k8s-learn-09

PodDisruptionBudget — 자발적 축출에 '이 밑으로는 안 된다' 선을 긋는다

Kubernetes PodDisruptionBudget 및 Graceful Termination 공식 문서 종합 (웹 리서치, 2026) — Kubernetes 공식 문서(concepts/workloads/pods/pod-lifecycle, concepts/workloads/pods/disruptions) Kubernetes 공식문서 Pod Disruption Budgets

이 모듈을 다 읽으면

  • PDB가 자발적 축출(voluntary disruption)만 막고 비자발적 장애는 막지 못한다는 것을 설명할 수 있다
  • minAvailable/maxUnavailable 중 하나만 지정한다는 것과, ALLOWED DISRUPTIONS가 0이면 축출이 막히는 원리를 설명할 수 있다

k8s-learn-05에서 다룬 '노드 압박으로 인한 강제 축출'과 달리, 이 모듈은 노드 드레인(유지보수)처럼 관리자가 의도적으로 시작하는 '자발적' 축출에 하한선을 긋는 PDB를 정리한다.

자발적 축출에만 적용되는 가용성 계약

PodDisruptionBudget(PDB)은 자발적 축출(voluntary disruption)에 대해 사용자가 설정하는 가용성 계약이다 — kubectl drain이 Eviction API를 통해 보내는 축출 요청이 대표적인 자발적 축출이다. 중요한 것은 PDB가 '모든' 장애로부터 보호해주는 게 아니라는 점이다 — 노드 하드웨어 장애나 커널 패닉 같은 비자발적(involuntary) 장애는 PDB의 보호 범위 밖이다. 즉 PDB는 '관리자가 의도적으로 시작하는 유지보수성 축출'을 완만하게 만드는 장치이지, 모든 종류의 가용성을 보장하는 만능 장치가 아니다.

핵심 포인트

  • PDB는 kubectl drain 같은 자발적 축출(Eviction API를 통한 요청)에 대해서만 적용되는 가용성 계약
  • 노드 하드웨어 장애 등 비자발적 장애는 PDB 보호 범위 밖 — '모든 가용성 보장'이 아니라 '의도적 유지보수 축출을 완만하게 만드는' 장치

minAvailable과 maxUnavailable — 둘 중 하나만 쓴다

minAvailable은 축출 후에도 남아있어야 할 최소 가용 Pod 수(절대값 또는 퍼센트)를 지정하고, maxUnavailable은 축출로 인해 사용 불가능해도 되는 최대 Pod 수(마찬가지로 절대값 또는 퍼센트)를 지정한다. 이 둘은 같은 것을 반대 방향에서 표현한 것이라 하나의 PDB에는 둘 중 하나만 지정한다. Eviction API는 실제 축출 요청을 승인할지 판단할 때 'ALLOWED DISRUPTIONS'라는 값을 확인하는데, 이 값이 0이면 그 시점엔 어떤 자발적 축출도 진행될 수 없다 — 예를 들어 maxUnavailable을 0으로 설정하거나 minAvailable을 replica 수와 같게(즉 100%) 설정하면 사실상 '축출을 아예 허용하지 않는' 설정이 되어, 그 Pod가 떠 있는 노드를 드레인하는 것 자체가 막힐 수 있다.

핵심 포인트

  • minAvailable(축출 후 남아야 할 최소 가용 수) / maxUnavailable(축출로 사용불가여도 되는 최대 수) — 둘 중 하나만 지정
  • Eviction API가 확인하는 ALLOWED DISRUPTIONS가 0이면 자발적 축출 불가 — maxUnavailable=0이나 minAvailable=100%(replica 수와 동일)로 잘못 설정하면 노드 드레인 자체가 막힐 수 있음