티스토리 뷰

https://github.com/kubernetes-sigs/descheduler

 

GitHub - kubernetes-sigs/descheduler: Descheduler for Kubernetes

Descheduler for Kubernetes. Contribute to kubernetes-sigs/descheduler development by creating an account on GitHub.

github.com

 

Kubernetes Scheduler의 한계점을 약간 보완해주는 프로젝트

Pod의 상태를 확인하여 조건에 성립하는 Pod를 Eviction하여 원하는 상태로 만듬

Eviction이후의 동작은 Scheduler가 수행하므로 원하는대로 동작이 안될수도 있다

Job,Cronjob,Deployment 등으로 배포 할 수 있음

조건은 아래와 같다

Policy and Strategies

    RemoveDuplicates
    LowNodeUtilization
    HighNodeUtilization
    RemovePodsViolatingInterPodAntiAffinity
    RemovePodsViolatingNodeAffinity
    RemovePodsViolatingNodeTaints
    RemovePodsViolatingTopologySpreadConstraint
    RemovePodsHavingTooManyRestarts
    PodLifeTime
    RemoveFailedPods

유용한것만 설명

RemoveDuplicates

동일한 노드의 파드가 있는지 확인하여 해당 파드를 삭제한다

RS/statefuleset등의 파드가 동일노드에 있을시 해당 파드를 축출하여 다른 노드로 배치되게 만듬

LowNodeUtilization

사용량이 낮은 노드 발견시 다른 노드의 pod를 삭제하여 해당 노드로의 재배치를 유도시킴

아래의 설정값들을 이용하여 수행한다

apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
  "LowNodeUtilization":
     enabled: true
     params:
       nodeResourceUtilizationThresholds:
         thresholds:
           "cpu" : 20
           "memory": 20
           "pods": 20
         targetThresholds:
           "cpu" : 50
           "memory": 50
           "pods": 50

nodeResourceUtilizationThresholds값 미만이면 해당 노드의 사용률이 낮은것으로 간주하고 디스케쥴러가 작동되며

tagetThresholds를 초과한 노드가 대상이 된다

HighNodeUtilization

LowNode와 비슷하나 이것은 사용량이 적은 노드의 Pod를 축출시켜 Node ScaleDown을 유발한다

아래의 설정으로 사용한다

apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
  "HighNodeUtilization":
     enabled: true
     params:
       nodeResourceUtilizationThresholds:
         thresholds:
           "cpu" : 20
           "memory": 20
           "pods": 20

위 설정된 자원값 미만으로 사용중인 Node의 Pod는 축출된다

RemovePodsViolatingInterPodAntiAffinity

이름그대로 PodAnfiAffinity 위반한 Pod를 체크하여 축출 시킴

affinity가 hard일 경우에는 아예 스케쥴링 되지 않지만 soft의 경우 해당 조건의 노드가 없으면 조건에 맞지 않는 노드에도 스케쥴링 될수 있다

이러한 Pod들을 축출시켜 affinity를 충족하는 다른 노드로 재배치를 유도시킴

RemovePodsViolatingNodeAffinity

위와 동일하나 NodeAffinity를 체크함

RemovePodsHavingTooManyRestarts

Restart횟수가 많은 파드를 체크하여 축출함

apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
  "RemovePodsHavingTooManyRestarts":
     enabled: true
     params:
       podsHavingTooManyRestarts:
         podRestartThreshold: 100
         includingInitContainers: true

restart 횟수를 지정할수 있으며 init컨테이너의 횟수를 같이 계산 할수도 있다

보통 restart가 많이 되는 원인은 node에 있으므로 해당 pod를 축출하여 다른노드로 배치하여 문제 해결을 유도 시킴

PodLifeTime

LifeTime을 정해놓고 해당 시간을 초과하는 pod를 재배치 시킴

apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
  "PodLifeTime":
     enabled: true
     params:
       podLifeTime:
         maxPodLifeTimeSeconds: 86400
         podStatusPhases:
         - "Pending"

러닝과 펜딩상태의 Pod에만 작동된다

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함