背景

Kubernetes中的调度是将待处理的pod绑定到节点的过程,由Kubernetes的一个名为kube-scheduler的组件执行。调度程序的决定,无论是否可以或不能调度容器,都由其可配置策略指导,该策略包括一组规则,称为谓词和优先级。调度程序的决定受到其在第一次调度时出现新pod时的Kubernetes集群视图的影响。由于Kubernetes集群非常动态且状态随时间而变化,因此可能需要将已经运行的pod移动到其他节点,原因如下:

  • 一些节点不足或过度使用。
  • 原始调度决策不再适用,因为在节点中添加或删除了污点或标签,不再满足pod / node亲和性要求。
  • 某些节点发生故障,其pod已移至其他节点。
  • 新节点将添加到群集中。

因此,可能会在群集中不太理想的节点上安排多个pod。Descheduler根据其政策,发现可以移动并移除它们的pod。请注意,在当前的实现中,descheduler不会安排更换被驱逐的pod,而是依赖于默认的调度程序。

Descheduler二次调度

GitHub地址:https://github.com/kubernetes-sigs/descheduler

下面是重要的配置

  • configmap.yaml
  1. ---
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: descheduler-policy-configmap
  6. namespace: kube-system
  7. data:
  8. policy.yaml: |
  9. apiVersion: "descheduler/v1alpha1"
  10. kind: "DeschedulerPolicy"
  11. strategies:
  12. "RemoveDuplicates":
  13. enabled: true
  14. "RemovePodsViolatingInterPodAntiAffinity":
  15. enabled: true
  16. "LowNodeUtilization":
  17. enabled: true
  18. params:
  19. nodeResourceUtilizationThresholds:
  20. thresholds:
  21. "cpu" :
  22. "memory":
  23. "pods":
  24. targetThresholds:
  25. "cpu" :
  26. "memory":
  27. "pods":

RemoveDuplicates策略

该策略发现未充分利用的节点,并且如果可能的话,从其他节点驱逐pod,希望在这些未充分利用的节点上安排被驱逐的pod的重新创建。此策略的参数配置在nodeResourceUtilizationThresholds

节点的利用率低是由可配置的阈值决定的thresholdsthresholds可以按百分比为cpu,内存和pod数量配置阈值 。如果节点的使用率低于所有(cpu,内存和pod数)的阈值,则该节点被视为未充分利用。目前,pods的请求资源需求被考虑用于计算节点资源利用率。

还有另一个可配置的阈值,targetThresholds用于计算可以驱逐pod的潜在节点。任何节点,所述阈值之间,thresholds并且targetThresholds被视为适当地利用,并且不考虑驱逐。阈值targetThresholds也可以按百分比配置为cpu,内存和pod数量。

简单的说:thresholds是没有达到资源使用的node视为资源使用率低可以分配, targetThresholds是已经满足这个条件的node资源紧张要把上面的pod迁移。

  • cronjob.yaml
  1. ---
  2. apiVersion: batch/v1beta1
  3. kind: CronJob
  4. metadata:
  5. name: descheduler-cronjob
  6. namespace: kube-system
  7. spec:
      #定时任务时间可调
  8. schedule: "*/10 * * * *"
  9. concurrencyPolicy: "Forbid"
  10. jobTemplate:
  11. spec:
  12. template:
  13. metadata:
  14. name: descheduler-pod
  15. spec:
  16. priorityClassName: system-cluster-critical
  17. containers:
  18. - name: descheduler
  19. image: aveshagarwal/descheduler
  20. #image: us.gcr.io/k8s-artifacts-prod/descheduler:v0.10.0
  21. volumeMounts:
  22. - mountPath: /policy-dir
  23. name: policy-volume
  24. command:
  25. - "/bin/descheduler"
  26. args:
  27. - "--policy-config-file"
  28. - "/policy-dir/policy.yaml"
  29. - "--v"
  30. - ""
  31. restartPolicy: "Never"
  32. serviceAccountName: descheduler-sa
  33. volumes:
  34. - name: policy-volume
  35. configMap:
  36. name: descheduler-policy-configmap
  • rbac.yaml
  1. ---
  2. kind: ClusterRole
  3. apiVersion: rbac.authorization.k8s.io/v1
  4. metadata:
  5. name: descheduler-cluster-role
  6. namespace: kube-system
  7. rules:
  8. - apiGroups: [""]
  9. resources: ["events"]
  10. verbs: ["create", "update"]
  11. - apiGroups: [""]
  12. resources: ["nodes"]
  13. verbs: ["get", "watch", "list"]
  14. - apiGroups: [""]
  15. resources: ["pods"]
  16. verbs: ["get", "watch", "list", "delete"]
  17. - apiGroups: [""]
  18. resources: ["pods/eviction"]
  19. verbs: ["create"]
  20. ---
  21. apiVersion: v1
  22. kind: ServiceAccount
  23. metadata:
  24. name: descheduler-sa
  25. namespace: kube-system
  26. ---
  27. apiVersion: rbac.authorization.k8s.io/v1
  28. kind: ClusterRoleBinding
  29. metadata:
  30. name: descheduler-cluster-role-binding
  31. namespace: kube-system
  32. roleRef:
  33. apiGroup: rbac.authorization.k8s.io
  34. kind: ClusterRole
  35. name: descheduler-cluster-role
  36. subjects:
  37. - name: descheduler-sa
  38. kind: ServiceAccount
  39. namespace: kube-system

kubectl apply -f 执行上面三个文件,查看日志如有满足再次调度条件的 会重新发起二次调度均衡node资源。

kubernetes资源均衡器Descheduler的更多相关文章

  1. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

  2. 使用kubesql进行kubernetes资源查询

    kubesql kubesql(https://github.com/xuxinkun/kubesql)是我最近开发的一个使用sql查询kubernetes资源的工具.诸如node,pod等kuber ...

  3. 新手学习FFmpeg - 如何编写Kubernetes资源文件

    Kubernetes API的使用方式 Kubernetes API属于声明式API编程, 它和常用的命令式编程有一些区别. 通俗的说,命令式编程是第一人称,我要做什么,我要怎么做. 操作系统最喜欢这 ...

  4. 深入理解 Kubernetes 资源限制:CPU

    原文地址:https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernet ...

  5. kubefuse 让Kubernetes 资源成为fuse 文件系统

    kubefuse 是基于fuse 开发的文件系统,我们可以像访问文件系统一样访问Kubernetes 资源,使用python开发 支持以下特性: 可以使用方便的linux tools: ls. vim ...

  6. 深入理解Kubernetes资源限制:CPU

    写在前面 在上一篇关于Kubernetes资源限制的文章我们讨论了如何通过ResourceRequirements设置Pod中容器内存限制,以及容器运行时是如何利用Linux Cgroups实现这些限 ...

  7. Kubernetes资源与对象简述

    资料 k8s基本对象概念 背景 资源和对象   Kubernetes 中的所有内容都被抽象为"资源",如 Pod.Service.Node 等都是资源."对象" ...

  8. Kubernetes as Database: 使用kubesql查询kubernetes资源

    写在前面 kubectl虽然查询单个的kubernetes资源或者列表都已经比较方便,但是进行更为多个资源的联合查询(比如pod和node),以及查询结果的二次处理方面却是kubectl无法胜任的.所 ...

  9. kubernetes资源优化

    kubernetes资源优化方向 系统参数限制 设置系统内核参数: vm.overcommit_memory = 0 vm.swappiness = 0 sysctl -p #生效 内核参数overc ...

随机推荐

  1. 关于Backus-Naur Form巴克斯诺尔范式和扩展巴克斯范式的知识点和相关词语中英文对照

    巴克斯诺尔范式的相关词语中英文对照和知识点 syntax 语法 强调的是编程语言的组形式,例如一个句子中会包含表达式.陈述还有各种单元等等 semantics 语义 强调的是这个编程语言的实际含义,例 ...

  2. Chisel3 - util - ReadyValid

    https://mp.weixin.qq.com/s/g7Q9ChxHbAQGkbMmOymh-g   ReadyValid通信接口.通信的双方为数据的生产者(Producer)和消费者(Consum ...

  3. 居然还有人这样解说mybatis运行原理

    目录 Mybatis基本认识 动态代理 JDK实现 CGLIB动态代理 总结 反射 Configuration对象作用 映射器结构 sqlsession执行流程(源码跟踪) Executor Stat ...

  4. Java实现 LeetCode 754 到达终点数字(暴力+反向)

    754. 到达终点数字 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),可以走 n 步. 返回到达终点需要的最小移动次数 ...

  5. Java实现 稀疏矩阵乘积

    稀疏矩阵乘积 描述 给定两个N × N的稀疏矩阵A和B,其中矩阵A有P个元素非0,矩阵B有Q个元素非0.请计算两个矩阵的乘积C = A × B并且输出C中所有非0的元素. 输入 第一行包含三个整数N, ...

  6. Java中System的详细用法

    System.arraycopy System.arraycopy的函数原型是: public static void arraycopy(Object src, int srcPos, Object ...

  7. java实现第六届蓝桥杯五星填数

    五星填数 如[图1.png]的五星图案节点填上数字:1~12,除去7和11. 要求每条直线上数字和相等. 如图就是恰当的填法. 请你利用计算机搜索所有可能的填法有多少种. 注意:旋转或镜像后相同的算同 ...

  8. 面试三轮我倒在了一道sql题上——sql性能优化

    一.前言 最近小农在找工作,因为今年疫情的特殊原因,导致工作不是特别好找,所以一旦有面试电话,如果可以,都会去试一试,刚好接到一个面试邀请,感觉公司还不错,于是就确定了面试时间,准备了一下就去面试了. ...

  9. SmokePing 快速搭建

    SmokePing介绍 smokeping是来监控IDC机房网络质量情况,可以从监控图上的延时与丢包情况分辨出机房的网络是否稳定,是否为多线,是否为BGP机房以及到各城市的三个运行商网络各是什么情况. ...

  10. 如何在宝塔上的Nginx实现负载均衡

    创建一个指向服务器本身的localhost站点(127.0.0.1)和一个指向服务器的站点,域名和IP都可以.  I.对域名站点配置: upstream myproj { server 127.0.0 ...