StatefulSet PodDisruptionBudget 구성 점검

상태 저장 애플리케이션이 허용할 수 있는 자발적 중단 수를 정하세요.

설명

StatefulSet의 여러 파드가 노드 드레인 등 자발적 축출로 동시에 중단되면 서비스 가용성이나 복제 정족수에 영향을 줄 수 있습니다. PodDisruptionBudget(PDB)은 Eviction API를 사용하는 중단에서 가용 파드 수의 기준을 제공합니다.

PDB는 노드 장애를 막거나 모든 파드 삭제를 제한하지 않습니다. StatefulSet 자체의 롤링 업데이트도 별도 전략으로 관리해야 합니다.

잠재적 영향

  • 유지보수 중 서비스나 복제 정족수를 유지하지 못할 수 있습니다.
  • 너무 엄격한 PDB는 노드 드레인과 유지보수를 진행하지 못하게 할 수 있습니다.

해결 방법

  • 동일 네임스페이스에서 실제 StatefulSet 파드를 선택하는 PDB를 정의하고 max_unavailable 또는 min_available 중 하나를 서비스·정족수 요구에 맞게 지정하세요.
  • 정상 레플리카 수, readiness와 교체 용량을 확인하고 드레인을 시험하세요. PDB 외에도 장애 분산과 롤링 업데이트 전략을 관리하세요.

예시

파드 template과 Headless Service 등은 생략한 기존 발췌입니다. 현재 API에는 kubernetes_pod_disruption_budget_v1을 사용하세요. 두 레플리카에서 max_unavailable 20%는 올림되어 한 파드의 중단을 허용하므로 정족수 요구에 맞는지 확인해야 합니다.

변경 전

hcl
resource "kubernetes_stateful_set" "example" {
  metadata {
    name = "prometheus"
  }

  spec {
    replicas = 2

    selector {
      match_labels = {
        app = "prometheus"
      }
    }

    service_name = "prometheus"
  }
}

변경 후

hcl
resource "kubernetes_stateful_set" "example" {
  metadata {
    name = "prometheus"
  }

  spec {
    replicas = 2

    selector {
      match_labels = {
        app = "prometheus"
      }
    }

    service_name = "prometheus"
  }
}

resource "kubernetes_pod_disruption_budget" "example" {
  metadata {
    name = "prometheus-pdb"
  }

  spec {
    max_unavailable = "20%"

    selector {
      match_labels = {
        app = "prometheus"
      }
    }
  }
}

설명:

  • 변경 전: PDB 없이 두 레플리카를 구성합니다. 허용 중단 범위를 별도로 정해야 합니다.
  • 변경 후: app=prometheus인 파드를 선택하는 PDB를 추가합니다. 생략된 파드 라벨도 일치해야 하며 모든 중단을 막는 설정은 아닙니다.

참조