설명
Deployment의 여러 파드가 노드 드레인 등 자발적 축출로 동시에 중단되면 복제본이 있어도 가용성이 떨어질 수 있습니다. PodDisruptionBudget(PDB)은 Eviction API를 사용하는 작업에 허용 중단 기준을 제공합니다.
PDB는 노드 장애나 직접 파드 삭제를 막지 않으며 Deployment 롤링 업데이트도 제한하지 않습니다. 업데이트 전략과 장애 분산은 별도로 구성해야 합니다.
잠재적 영향
- 유지보수 중 가용 복제본이 부족해 응답이 지연되거나 서비스가 중단될 수 있습니다.
- 과도한 제한은 노드 드레인이나 유지보수를 막을 수 있습니다.
해결 방법
- 같은 네임스페이스에서 실제 Deployment 파드를 선택하는 PDB를 정의하고 minAvailable 또는 maxUnavailable 중 하나를 가용성 요구에 맞게 설정하세요.
- readiness, 복제본 수와 교체 용량을 확인하고 드레인을 시험하세요. Deployment의 롤링 업데이트와 파드 분산 정책도 별도로 검토하세요.
예시
기존 이미지 버전은 유지보수되는 검증된 버전으로 바꾸세요. 이 예시는 복제본 세 개 중 최소 두 개가 가용 상태로 남도록 자발적 축출을 제한합니다.
변경 전
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
Deployment는 있지만 자발적 축출을 제한하는 PDB는 표시되어 있지 않습니다. 같은 네임스페이스의 기존 정책도 확인해야 합니다.
변경 후
yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
app=nginx 파드를 선택하는 PDB에 minAvailable: 2를 지정합니다. 모든 장애나 직접 삭제로부터 최소 가용성을 보장하는 것은 아닙니다.