Kubernetes

[k8s] 중단과 PodDisruptionBudget

비번변경 2025. 5. 7. 11:46

개요

최근 오랜만에 쿠버네티스 관련 작업을 담당하게 되었는데, pdb라는 리소스를 새로 알게 되었다. 확인해보니 가용성, pod 중단 등과 관련이 있는 개념인 것 같다. 관련해서 알아두는 게 좋을 것 같아 정리해둔다.

 

 

중단

Pod는 사람 또는 컨트롤러가 파괴하거나 불가피한 하드웨어/시스템 소프트웨어 오류가 발생한 경우가 아니라면 사라지지 않는다. 이 때 사람 또는 컨트롤러가 파괴한 경우를 자발적 중단이라고 하고, 오류로 인한 불가피한 중단을 비자발적 중단이라고 한다.

각 중단이 발생할 수 있는 상황의 예시는 다음과 같다.

자발적 중단 비자발적 중단
Deployment 제거 물리 머신 하드웨어 오류
다른 Pod를 관리하는 컨트롤러 제거 클러스터 관리자 실수에 의한 VM 삭제
Deployment 템플릿 업데이트 클라우드 공급자 또는 하이퍼바이저 오류로 인한  VM 장애
Pod 직접 삭제 커널 패닉
복구 또는 업그레이드, 클러스터 스케일 축소를 위한 노드 Drain 클러스터 네트워크 파티션의 발생으로 클러스터에서 노드 삭제
를 위한 노드 Drain 노드 리소스 부족

 

 

PodDisruptionBudget

PodDisruptionBudget은 자발적 중단이 발생하는 경우에도 고가용성을 확보하기 위한 목적으로 사용한다.

PodDisruptionBudget은 자발적 중단으로 일시에 중단되는 애플리케이션 복제 Pod의 수를 제한한다. 다시 말해, 애플리케이션 복제본의 수가 사용자가 지정한 개수보다 줄어들지 않게 한다. 

특히 kubectl drain 명령어를 사용하면 노드를 서비스 중단으로 표시하며 노드의 모든 Pod를 제거하려고 한다. 하지만 PodDisruptionBudget에 의해 Pod 제거 요청이 거부될 수 있다.

 

 

예시

문장으로만 설명하니 와닿지 않는 것 같아 그림과 함께 살펴본다.

 

예로 들어 아래와 같이 Pod 배치가 되어 있는 클러스터가 있다고 하자.

이 때 Node A를 drain하면 svc 1의 모든 Pod가 동시에 삭제된다. 즉, svc 1의 서비스가 중단된다.

 

이 때 PodDisruptionBudget을 사용해 svc 1에 대해 최소 1개의 Pod를 유지하게끔 설정한다면, 다음과 같은 순서로 노드가 재배치된다.

즉, 서비스 중단 없이 노드를 drain할 수 있게 된다.

 

 

참고 문서

https://kubernetes.io/ko/docs/concepts/workloads/pods/disruptions/

PodDisruptionBudget을 이용한 Pod 재배치

https://bcho.tistory.com/1305

https://westlife0615.tistory.com/545

https://kmaster.tistory.com/84

728x90