ㅡ.ㅡ

[K8S Resource] Descheduler 본문

ETC

[K8S Resource] Descheduler

ekwkqk12 2023. 10. 22. 14:16

사용자가 정의한 정책에 따라 리소스 사용량, 우선순위, 예약 제약 조건 등을 고려하여 Pod를 재배치하거나 종료하여 클러스터의 자원 활용을 최적화하고 안정성과 성능을 향상시키는 도구

deschedulerPolicy

Pod를 리스케줄링할 정책을 담당한다.

  • evictSystemCriticalPods
    크리티컬 파드(priorityClassName이 system-cluster-critical 또는 system-node-critical)는 미 삭제, true 설정시 삭제 가능(aws-node와 같은 파드가 삭제될 수 있음)
  • evictFailedBarePods
    재 생성되지 않는 파드(Deployment, StatefulSet, Job을 제외한 단일 pod 등)는 미 삭제, true 설정시 삭제 가능
  • evictLocalStoragePods
    로컬 스토리지가 있는 파드는 미 삭제, true 설정시 삭제 가능
  • ignorePvcPods
    pvc가 할당된 파드는 미 삭제, true 설정시 삭제 가능
  • strategies
    • RemoveDuplicates
      노드에 동일 파드가 있을 시 재 배치
    • LowNodeUtilization
      활용도가 높은 노드 내 파드를 제거하여 활용도가 낮은 노드로 재 배치
    • RemovePodsViolatingNodeTaints
      taint가 업데이트되거나 변경되었을때 일치하지 않는 파드 재배치
    • RemovePodsViolatingInterPodAntiAffinity
      Anti-Affinity 규칙을 위반하는 파드 재배치
    • PodLifeTime
      특정 상태에 지정한 시간만큼 머물어 있는 파드 재배치

Helm Chart

helm repo add descheduler https://kubernetes-sigs.github.io/descheduler/

Values.yaml

schedule: "*/5 * * * *"
successfulJobsHistoryLimit: 2
failedJobsHistoryLimit: 1
​
cmdOptions:
  v: 3
  client-connection-qps: 60
  client-connection-burst: 100
​
deschedulerPolicy:
  evictFailedBarePods: true
  evictLocalStoragePods: true
  ignorePvcPods: true
  nodeFit: true
  strategies:
    RemoveDuplicates:
      enabled: true
    RemovePodsHavingTooManyRestarts:
      enabled: true
      params:
        podsHavingTooManyRestarts:
          podRestartThreshold: 50
          includingInitContainers: true
    RemovePodsViolatingNodeTaints:
      enabled: true
    RemovePodsViolatingNodeAffinity:
      enabled: true
      params:
        nodeAffinityType:
        - requiredDuringSchedulingIgnoredDuringExecution
    RemovePodsViolatingInterPodAntiAffinity:
      enabled: true
    RemovePodsViolatingTopologySpreadConstraint:
      enabled: true
      params:
        includeSoftConstraints: false
    LowNodeUtilization:
      enabled: true
      params:
        nodeResourceUtilizationThresholds:
          # thresholds ~ targetThresholds는 적정하게 사용되는 노드로 구분됨
          # 백분율 기준 해당 값 미만 활용도 낮은 노드(and조건)
          thresholds:
            cpu: 40
            memory: 40
            pods: 45
          # 백분율 기준 해당 값 미만 활용도 낮은 노드(or조건)
          targetThresholds:
            cpu: 80
            memory: 80
            pods: 80
    PodLifeTime:
      enabled: true
      params:
        podLifeTime:
          maxPodLifeTimeSeconds: 86400
          states:
          - "Pending"
          - "PodInitializing"

재배치된 파드

활용도 높/낮은 노드 체크

Reference

'ETC' 카테고리의 다른 글

[K8S Resource] ClusterAutoScaler  (0) 2023.10.22
[K8S Resource] Goldilocks  (0) 2023.10.22
[AWS] EFS  (0) 2021.10.21
[Kubernetes Management] Rancher  (0) 2021.09.29
[Kubernetes Package Manager] Helm  (0) 2020.12.15