쿠버네티스의 Pod Disruption Budget (PDB)
PodDisruptionBudget(PDB)는 쿠버네티스에서 워크로드의 가용성을 보장하면서도 클러스터에서 안전한 스케일링이나 유지보수 작업을 수행할 수 있도록 도와주는 메커니즘임.
주로 애플리케이션의 고가용성을 유지하면서 Pod를 중단시키는 작업을 제어하는 데 사용됨.
PDB의 주요 목적
1. 중단 제한
PDB는 장애 발생 시 클러스터 관리자가 수동으로 Pod를 중단하거나 노드 스케일링, 업데이트와 같은 작업 중 Pod의 중단이 일정 수준 이하로 유지되도록 보장함.
이는 애플리케이션의 서비스 중단을 방지하기 위한 것임.
2. 자동화된 워크플로 제어
노드 업그레이드(예: kubelet 업그레이드), 클러스터 유지보수(예: Cordon/Drain 작업) 및 노드 자동 스케일링 같은 자동화된 작업이 PDB를 존중하여 수행됨.
3. 애플리케이션의 고가용성 보장
특정 애플리케이션의 최소 가용 Pod 수를 보장함으로써, 해당 애플리케이션이 안정적인 서비스를 제공하도록 함.
PodDisruptionBudget의 구성 요소
1. minAvailable
특정 워크로드에서 중단 없이 유지되어야 하는 Pod의 최소 개수를 정의함.
값은 정수 또는 퍼센트로 지정할 수 있음.
정수: 최소 유지해야 할 Pod 개수 (예: minAvailable: 2).
퍼센트: Pod의 총 개수에 대한 비율 (예: minAvailable: "50%").
2. maxUnavailable
특정 워크로드에서 동시에 중단 가능한 Pod의 최대 개수를 정의함.
값은 정수 또는 퍼센트로 지정 가능함.
정수: 최대 중단 가능 Pod 개수 (예: maxUnavailable: 1).
퍼센트: Pod 총 개수에 대한 비율 (예: maxUnavailable: "25%").
3. selector
PDB가 적용될 Pod의 범위를 결정하는 레이블 셀렉터임.
특정 워크로드를 대상으로 PDB를 정의하기 위해 필수로 사용됨.
PDB 동작 방식
1. 노드 드레인 (Node Drain)
관리자가 노드를 드레인하면, 해당 노드의 모든 Pod가 축출(eviction)됨.
이 과정에서 PDB는 설정된 조건(minAvailable 또는 maxUnavailable)을 확인하고, 조건을 만족하지 않으면 Pod의 축출을 막음.
2. Pod 축출(Eviction)
강제 종료가 아닌 정상적인 축출 작업에서만 PDB가 동작함.
kubectl drain 또는 kubectl delete pod --force와 같은 명령으로 강제 삭제를 시도하면, PDB가 이를 막을 수 없음.
3. 자동 스케일링(Cluster Autoscaler)
노드 축소 시, PDB는 최소 가용성을 보장하며 스케일링을 조정함.
PDB 생성 예제
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-app-pdb
spec:
minAvailable: 2 # 최소 2개의 Pod는 항상 실행되어야 함
selector:
matchLabels:
app: my-app # PDB가 적용될 대상 Pod
app: my-app 레이블이 있는 Pod 중 최소 2개는 항상 가용해야 함.
이를 벗어나는 중단은 허용되지 않음.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-app-pdb-max
spec:
maxUnavailable: 1 # 최대 1개의 Pod만 동시에 중단 가능
selector:
matchLabels:
app: my-app
동시에 중단 가능한 Pod의 개수를 1개로 제한함.
PDB 활용 시 고려사항
1. 적절한 값 설정
minAvailable과 maxUnavailable 중 하나만 설정할 수 있음.
잘못된 값 설정은 클러스터 유지보수 작업을 방해할 수 있음.
2. Pod 개수 변화
minAvailable이나 maxUnavailable 값은 Pod 수에 따라 동적으로 조정될 수 있도록 퍼센트를 사용하는 것이 유리할 때가 있음.
3. DaemonSet
DaemonSet Pod는 PDB가 적용되지 않으며, 항상 노드당 하나의 Pod가 있어야 하는 특성을 가짐.
4. 강제 종료
kubectl delete pod --force는 PDB를 우회하기 때문에, 강제 삭제는 신중히 사용해야 함.
5. 워크로드 배포 방식
PDB는 주로 StatefulSet, Deployment와 같이 여러 Pod로 구성된 워크로드에서 유용함.
PDB와 워크로드 연계
1. Deployment와 함께 사용
Deployment에 의해 관리되는 Pod를 대상으로 PDB를 설정하면, 롤링 업데이트 중에도 가용성이 유지되도록 보장할 수 있음.
2. StatefulSet과 함께 사용
StatefulSet은 Pod의 상태를 유지하면서 순차적으로 업데이트를 수행하기 때문에, PDB를 사용하여 상태 손실을 방지할 수 있음.
PDB 정리
PodDisruptionBudget은 쿠버네티스에서 워크로드의 가용성과 안정성을 유지하면서도 관리 작업이 원활히 이루어지도록 하는 필수 도구임.
PDB는 복잡한 클러스터 환경에서 애플리케이션의 고가용성을 보장하며, 클러스터 관리자가 중단 작업을 수행하는 데 있어 중요한 제어 장치로 활용됨.
PDB를 올바르게 설정하면 서비스 품질을 유지하며 클러스터를 효율적으로 운영할 수 있음.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] Ingress Controller (0) | 2024.12.27 |
---|---|
[Kubernetes] Airflow Github Oauth 연동시 Github 설정 (0) | 2024.12.27 |
[Kubernetes] Airflow의 Executor 종류 (1) | 2024.12.26 |
[Kubernetes] k8s, PGBouncer 개념 (0) | 2024.12.26 |
[Kubernetes] 쿠버네티스 인그레스의 PathType (0) | 2024.12.26 |