Kubernetes를 사용하면 컨테이너 오케스트레이션을 해주어서 셀프힐링도 자동으로 해주니까 편한점도 많지만 서비스를 안정적으로 운영하기 위해서 꽤 많은 작업이 필요하다는 것을 느끼고 이게 꽤 쉽지 않다는 생각을 하게 됩니다.
가볍게 운영할 때는 큰 문제가 없지만 가용성을 높히기 위해서라면 pod이 여러 노드 여러 존에 걸쳐서 고르게 분산되어야 하고 롤아웃 배포나 다른 작업으로 업데이트를 할 때도 이러한 분산이 잘 유지되어야 합니다. 다양한 설정으로 Kubernetes가 지원하고 있긴 하지만 제약이 있는 부분도 있고 새로운 기능도 계속 들어오고 있습니다.
PodDisruptionBudget이라고 하는 PDB는 Pod의 이러한 안정성을 확보하기 위한 기능입니다.
의도한 작업 혹은 예상하지 못한 문제로 Pod은 중단 될 수 있어야 하는데 PDB를 사용하면 항상 사용할 수 있어야 하는 최소 리플리카 수(min available)과 사용불가능 할 수 있는 최대 리플리카 수(max unavailable)을 지정할 수 있고 이 규칙을 위반하게 되면 해당 작업을 멈추게 해서 Pod의 최소 안정성을 보장하게 됩니다.
하지만 PDB의 동작을 제대로 알고 있지 못하면 반대로 의도한 작업을 차단하거나 지연시킬 수도 있으므로 어떤 때 차단하고 어떤 때는 잘 동작하는지 잘 파악하고 사용해야 합니다.
https://medium.com/@bregman.arie/elevating-your-kubernetes-clusters-resilience-pod-disruption-budget-43979a1cf104