티스토리 뷰
https://github.com/kubernetes-sigs/descheduler
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에만 작동된다
'클라우드 > 쿠버네티스' 카테고리의 다른 글
linkerd-viz 배포시 기배포된 prometheus, grafana사용하기 (0) | 2022.05.24 |
---|---|
Service Mesh 도입 테스트(linkerd) (0) | 2022.05.24 |
ingress-alb 사용시 한개의 alb로 여러 네임스페이스 적용 (0) | 2022.05.24 |
alb ingress redirect관련 manifest 변경 (0) | 2022.05.24 |
gitops 암호화(sealed-secrets이용한 secret 암호화) (0) | 2022.05.24 |