[k8] Karpenter Disruption 정책 정리

Woong·2025년 8월 21일
0

Docker, k8s

목록 보기
25/26

개요

  • karpenter 에서 node 가 언제 종료(disruption) 될지 정의하는 정책

  • 중단 프로세스

    • 중단 가능한 노드 (disruptable node) 가 있는지 식별하고, 없을 경우 중단 시작
      • 종료할 수 없는 pod (karpenter.sh/do-not-disrupt 세팅) 가 있을 경우 패스
    • node 에 karpenter.sh/disrupted:NoSchedule taint 추가
      • pod 가 스케줄링되는 것을 방지
    • 교체할 node 준비
      • node 가 ready 상태가 되지 못하고 fail 되면 taint 제거 후 원복
    • node 종료 후 Termination Controller 가 node 셧다운
    • Termination Controller: node 종료 조건을 모니터링 후 pod eviction(축출), node, NodeClaim 삭제

consolidationPolicy

  • pod 에 따른 node 축소, 통합 (consolidation) 정책을 지정
    • WhenEmpty : node에 워크로드가 없을 때만 제거
    • WhenEmptyOrUnderutilized : node 리소스 활용률 낮을 때 통합
      • 단, pod가 재스케줄될 수 있어 Disruption 발생 가능 (terminated 되고 다른 node 로 이동되는 상황)

consolidateAfter

  • node 가 consolidation 조건을 충족했을 때, 시도할 때까지 대기 시간
    • default 0s
    • ex ) consolidateAfter: 30s 설정시, node가 비거나 활용률 낮아진 상태가 30초 유지되면 통합 실행

expireAfter

  • node 에 대한 최대 life cycle 제한

    • node 가 사용중이더라도, expireAfter 로 지정한 시간이 지나면 교체
    • 오래 켜둔 노드의 성능 저하, 보안 패치 문제 방지
    • 구버전에서는 ttlSecondsUntilExpired 였으나 deprecated
  • ex)

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    budgets:
    - nodes: "20%"
      reasons:
      - "Empty"
      - "Drifted"
    - nodes: "5"
    - nodes: "0"
      schedule: "@daily"
      duration: 10m
      reasons:
      - "Underutilized"

reference

0개의 댓글