본문 바로가기
K8S

[Kubernetes] PDB 란?

by Rainbound-IT 2024. 12. 2.
반응형

 

 

Kubernetes의 Pod Disruption Budget(PDB)는 클러스터 관리자가 의도적으로 클러스터를 변경하거나 장애가 발생했을 때, 애플리케이션의 가용성을 보호하기 위해 설정하는 제어 정책입니다. PDB는 특정 시점에 삭제되거나 중단될 수 있는 Pod의 최대 수를 제한하여 애플리케이션이 서비스 중단 없이 지속적으로 운영될 수 있도록 보장합니다.


PDB의 목적

  1. 가용성 유지:
    • 유지 관리 작업(노드 업그레이드, 스케일 다운 등) 또는 장애 상황에서도 애플리케이션의 최소 가용성을 보장합니다.
    • 예: 전체 Pod이 동시에 종료되지 않도록 방지.
  2. 안정성 확보:
    • Pod의 강제 중단으로 인해 서비스에 영향을 미치지 않도록 보호합니다.
    • 특히 StatefulSet과 같은 애플리케이션에서 유용합니다.

PDB의 주요 구성 요소

PDB는 아래 두 가지 기준 중 하나를 설정하여 Pod 중단에 대한 허용치를 정의합니다:

  1. minAvailable:
    • Pod 중 최소한 몇 개는 항상 사용 가능해야 하는지를 설정합니다.
    • 예를 들어, 5개의 Pod 중 minAvailable: 3으로 설정하면, 동시에 중단될 수 있는 Pod는 최대 2개입니다.
  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의 최소 가용성을 보장합니다.


사용 사례

  1. Stateful 애플리케이션:
    • 데이터베이스, Kafka, Zookeeper 등과 같은 상태 저장 애플리케이션에서 클러스터 관리 작업 중 서비스 중단을 방지하기 위해 사용됩니다.
  2. Stateless 애플리케이션:
    • 웹 서버나 API 서버 등, 다수의 복제본이 존재하는 애플리케이션의 일부 가용성을 유지하기 위해 사용됩니다.
  3. CI/CD 파이프라인 보호:
    • CI/CD 작업 중 Pod의 동시 중단을 제한하여 빌드 또는 배포 파이프라인의 안정성을 높일 수 있습니다.

PDB 설정 시 고려 사항

  1. 적절한 minAvailable 또는 maxUnavailable 값 설정:
    • 복제본 수를 기준으로 값을 조정해야 하며, 잘못된 설정은 서비스 가용성에 부정적인 영향을 미칠 수 있습니다.
  2. 애플리케이션 아키텍처 파악:
    • 애플리케이션이 가용성을 유지하는 데 필요한 최소 Pod 수를 파악해야 합니다.
  3. 노드와 리소스 확인:
    • 클러스터의 리소스 제약과 Pod의 스케줄링 가능성을 고려해야 합니다.
      예: PDB가 minAvailable: 5로 설정되었지만, 리소스 부족으로 Pod 5개가 동시에 실행될 수 없다면 설정이 무효화될 수 있습니다.

PDB의 한계

  • PDB는 비자발적 중단 상황에서는 동작하지 않으므로, 장애 복구를 위해 추가적인 전략(예: 노드 복원 계획, 데이터 복제)을 마련해야 합니다.
  • PDB는 강제적인 보장이 아니라 스케줄러의 제약 조건으로 동작합니다.
    클러스터가 과부하 상태라면 PDB가 설정되었더라도 일부 Pod의 가용성을 보장하지 못할 수 있습니다.

요약:
Pod Disruption Budget은 Kubernetes 클러스터에서 애플리케이션의 가용성을 보장하기 위한 중요한 설정입니다. 주로 클러스터 관리 작업 중 Pod의 의도적인 중단을 제어하며, 설정된 정책에 따라 Pod의 최소 가용 수 또는 최대 중단 수를 제한합니다. PDB는 안정적인 클러스터 운영을 위해 StatefulSet, ReplicaSet, Deployment 등 다양한 워크로드에 적용할 수 있는 강력한 도구입니다.

반응형

댓글