BetterManEddy

导航

 

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

背景:

当所处集群由于驱逐或者其它原因,导致集群在一段时间内就可能会出现不均衡的状态,这就需要人为或者借助工具去调度pod促使集群达到一个平衡的状态;

概念:

​ DeScheduler 是Kubernetes 原生社区 实现的一个基于 node 真实负载进行重调度的插件。在​​kubernetes​​​集群中安装该插件后,该插件会和​​ Kube-scheduler ​​协同生效,实时监控集群中高负载节点并驱逐低优先级 Pod,该插件依赖 Prometheus 监控组件以及相关规则配置;

Descheduler 的策略是可配置的,包括可以启用或禁用的策略。默认情况下,所有策略均已启用。

nodeSelector:

​evictLocalStoragePods​:

ignorePvcPods:

​maxNoOfPodsToEvictPerNode:

​maxNoOfPodsToEvictPerNamespace​:

​evictFailedBarePods:

apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
nodeSelector: prod=dev
evictFailedBarePods: false
evictLocalStoragePods: true
evictSystemCriticalPods: true
maxNoOfPodsToEvictPerNode: 40
ignorePvcPods: false
strategies:
  ...

策略举例:

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
apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
  "RemoveDuplicates":
     enabled: true
  "RemovePodsViolatingInterPodAntiAffinity":
     enabled: true
  "LowNodeUtilization":
     enabled: true
     params:
       nodeResourceUtilizationThresholds:
         thresholds:
           "cpu" : 20
           "memory": 20
           "pods": 20
         targetThresholds:
           "cpu" : 50
           "memory": 50
           "pods": 5

 

节点资源消耗由 Pod 的请求和限制决定,而不是实际使用量。选择这种方法是为了保持与 kube-scheduler 的一致性,kube-scheduler 遵循将 pod 调度到节点上的相同设计。这意味着 Kubelet(或类似命令​​kubectl top​​)报告的资源使用情况可能与计算的消耗不同,因为这些组件报告了实际使用指标。descheduler 是通过合计 Node 上 Pod 的 Request 值来计算使用情况的,故这种方式可能并不太适合真实场景。如果能直接拿 metrics-server 或者 Prometheus 中的数据,会更有意义,因为很多情况下 Request、Limit 设置都不准确;

posted on 2022-12-06 15:55  BetterManEddy  阅读(444)  评论(0)    收藏  举报