반응형
Kubernetes의 Pod Disruption Budget(PDB)는 클러스터 관리자가 의도적으로 클러스터를 변경하거나 장애가 발생했을 때, 애플리케이션의 가용성을 보호하기 위해 설정하는 제어 정책입니다. PDB는 특정 시점에 삭제되거나 중단될 수 있는 Pod의 최대 수를 제한하여 애플리케이션이 서비스 중단 없이 지속적으로 운영될 수 있도록 보장합니다.
PDB의 목적
- 가용성 유지:
- 유지 관리 작업(노드 업그레이드, 스케일 다운 등) 또는 장애 상황에서도 애플리케이션의 최소 가용성을 보장합니다.
- 예: 전체 Pod이 동시에 종료되지 않도록 방지.
- 안정성 확보:
- Pod의 강제 중단으로 인해 서비스에 영향을 미치지 않도록 보호합니다.
- 특히 StatefulSet과 같은 애플리케이션에서 유용합니다.
PDB의 주요 구성 요소
PDB는 아래 두 가지 기준 중 하나를 설정하여 Pod 중단에 대한 허용치를 정의합니다:
- minAvailable:
- Pod 중 최소한 몇 개는 항상 사용 가능해야 하는지를 설정합니다.
- 예를 들어, 5개의 Pod 중 minAvailable: 3으로 설정하면, 동시에 중단될 수 있는 Pod는 최대 2개입니다.
- maxUnavailable:
- Pod 중 동시에 중단될 수 있는 최대 개수를 설정합니다.
- 예를 들어, 5개의 Pod 중 maxUnavailable: 1으로 설정하면, 동시에 중단될 수 있는 Pod는 최대 1개입니다.
PDB의 예시
아래는 PDB를 정의하는 YAML 파일의 예시입니다:
1. minAvailable을 사용하는 경우
yaml
코드 복사
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: example-pdb spec: minAvailable: 2 # 최소 2개의 Pod이 항상 동작해야 함 selector: matchLabels: app: my-app
- 설명:
- 레이블 app: my-app을 가진 Pod 중 최소 2개는 항상 가용 상태를 유지해야 합니다.
- 따라서 동시에 중단될 수 있는 Pod는 N - minAvailable로 계산됩니다.
2. maxUnavailable을 사용하는 경우
yaml
코드 복사
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: example-pdb spec: maxUnavailable: 1 # 최대 1개의 Pod만 중단될 수 있음 selector: matchLabels: app: my-app
- 설명:
- 레이블 app: my-app을 가진 Pod 중 최대 1개만 중단될 수 있습니다.
- 이는 전체 Pod 수에 관계없이 동시에 중단 가능한 Pod의 절대 수를 제한합니다.
PDB의 작동 방식
PDB는 Kubernetes의 **Voluntary Disruptions(자발적 중단)**에만 영향을 미칩니다.
자발적 중단에는 다음이 포함됩니다:
- 클러스터 관리 작업:
- 노드 업그레이드
- 노드 유지 보수 (Drain 작업)
- Pod 관리 작업:
- Deployment의 업데이트 (Rolling Update 등)
- ReplicaSet 스케일 다운
PDB가 영향을 미치지 않는 상황:
- 비자발적 중단:
- Pod이 OOM(Out of Memory)으로 종료됨
- 노드 장애로 인해 Pod이 종료됨
- 클러스터 수준의 심각한 장애 발생
PDB는 자발적 중단 상황에서만 Pod의 최소 가용성을 보장합니다.
사용 사례
- Stateful 애플리케이션:
- 데이터베이스, Kafka, Zookeeper 등과 같은 상태 저장 애플리케이션에서 클러스터 관리 작업 중 서비스 중단을 방지하기 위해 사용됩니다.
- Stateless 애플리케이션:
- 웹 서버나 API 서버 등, 다수의 복제본이 존재하는 애플리케이션의 일부 가용성을 유지하기 위해 사용됩니다.
- CI/CD 파이프라인 보호:
- CI/CD 작업 중 Pod의 동시 중단을 제한하여 빌드 또는 배포 파이프라인의 안정성을 높일 수 있습니다.
PDB 설정 시 고려 사항
- 적절한 minAvailable 또는 maxUnavailable 값 설정:
- 복제본 수를 기준으로 값을 조정해야 하며, 잘못된 설정은 서비스 가용성에 부정적인 영향을 미칠 수 있습니다.
- 애플리케이션 아키텍처 파악:
- 애플리케이션이 가용성을 유지하는 데 필요한 최소 Pod 수를 파악해야 합니다.
- 노드와 리소스 확인:
- 클러스터의 리소스 제약과 Pod의 스케줄링 가능성을 고려해야 합니다.
예: PDB가 minAvailable: 5로 설정되었지만, 리소스 부족으로 Pod 5개가 동시에 실행될 수 없다면 설정이 무효화될 수 있습니다.
- 클러스터의 리소스 제약과 Pod의 스케줄링 가능성을 고려해야 합니다.
PDB의 한계
- PDB는 비자발적 중단 상황에서는 동작하지 않으므로, 장애 복구를 위해 추가적인 전략(예: 노드 복원 계획, 데이터 복제)을 마련해야 합니다.
- PDB는 강제적인 보장이 아니라 스케줄러의 제약 조건으로 동작합니다.
클러스터가 과부하 상태라면 PDB가 설정되었더라도 일부 Pod의 가용성을 보장하지 못할 수 있습니다.
요약:
Pod Disruption Budget은 Kubernetes 클러스터에서 애플리케이션의 가용성을 보장하기 위한 중요한 설정입니다. 주로 클러스터 관리 작업 중 Pod의 의도적인 중단을 제어하며, 설정된 정책에 따라 Pod의 최소 가용 수 또는 최대 중단 수를 제한합니다. PDB는 안정적인 클러스터 운영을 위해 StatefulSet, ReplicaSet, Deployment 등 다양한 워크로드에 적용할 수 있는 강력한 도구입니다.
반응형
'K8S' 카테고리의 다른 글
[kubernetes] Backoff pulling image에러 원인과 해결책 (1) | 2024.12.09 |
---|---|
[kubernetes] 에러 Unable to connect to the server: tls: failed to verify certificate: (0) | 2024.12.08 |
helm plugin 수동 설치 - windows (0) | 2024.11.25 |
daemonset, deployment, statefulset 비교 정리 (0) | 2024.11.10 |
Istio 의 컴포넌트 (0) | 2024.11.09 |
댓글