一、简介

Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。

听起来非常简单,但有很多要考虑的问题:

  • 公平:如何保证每个节点都能被分配资源
  • 资源高效利用:集群所有资源最大化被使用
  • 效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作
  • 灵活:允许用户根据自己的需求控制调度的逻辑

Sheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName 为空的 pod,

对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上。

二、调度过程

1. 调度分为几个部分:

  • 首先是过滤掉不满足条件的节点,这个过程称为 predicate ;
  • 然后对通过的节点按照优先级排序,这个是 priority ;
  • 最后从中选择优先级最高的节点。如果中间任何一步骤有错误,就直接返回错误。

2. Predicate 有一系列的算法可以使用:

  • PodFitsResources :节点上剩余的资源是否大于 pod 请求的资源
  • PodFitsHost :如果 pod 指定了 NodeName,检查节点名称是否和 NodeName 匹配
  • PodFitsHostPorts :节点上已经使用的 port 是否和 pod 申请的 port 冲突
  • PodSelectorMatches :过滤掉和 pod 指定的 label 不匹配的节点
  • NoDiskConflict :已经 mount 的 volume 和 pod 指定的 volume 不冲突,除非它们都是只读

如果在 predicate 过程中没有合适的节点,pod 会一直在 pending 状态,不断重试调度,直到有节点满足条件。

经过这个步骤,如果有多个节点满足条件,就继续 priorities 过程: 按照优先级大小对节点排序

3.  priorities 过程

优先级由一系列键值对组成,键是该优先级项的名称,值是它的权重(该项的重要性)。

这些优先级选项包括:

  • LeastRequestedPriority :通过计算 CPU 和 Memory 的使用率来决定权重,使用率越低权重越高。换句话说,这个优先级指标倾向于资源使用比例更低的节点
  • BalancedResourceAllocation :节点上 CPU 和 Memory 使用率越接近,权重越高。这个应该和上面的LeastRequestedPriority一起使用,不应该单独使用
  • ImageLocalityPriority :倾向于已经有要使用镜像的节点,镜像总大小值越大,权重越高

通过算法对所有的优先级项目和权重进行计算,得出最终的结果

三、自定义调度器

除了 kubernetes 自带的调度器,你也可以编写自己的调度器。通过 spec:schedulername 参数指定调度器的名字,可以为 pod 选择某个调度器进行调度。比如下面的 pod 选择 my-scheduler 进行调度,而不是默认的default-scheduler :

apiVersion: v1
kind: Pod
metadata:name: annotation-second-schedulerlabels:name: multischeduler-example
spec:schedulername: my-schedulercontainers:- name: pod-with-second-annotation-containerimage: gcr.io/google_containers/pause:2.0

内容来自https://study.163.com/course/courseMain.htm?courseId=1209568805

kubernetes视频教程笔记 (25)-集群调度-调度过程说明相关推荐

  1. kubernetes集群内调度与负载均衡

    kubernetes负载均衡包括集群外负载均衡和集群内负载均衡,专业术语叫南北流量和东西流量,本文主要讲述集群内负载均衡(东西流量).本文第一部分会讲述kubernetes组件总览,第二部分会讲述ku ...

  2. 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard

    目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...

  3. Kubernetes(K8s)集群安装部署

    Kubernetes(K8s)集群安装 Kubernetes(K8s)集群安装 1 .基本环境配置 1.1.Kubernetes集群规划 1.2.基础环境配置(所有节点) 1.2.1.Host文件修改 ...

  4. kubernetes 入门实践-搭建集群

    ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(一个人的真正伟大之处就在于他能够认识到自己的渺小 -- 保罗) ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤ 上一篇:kubernetes 入门实践-核心概念 下 ...

  5. 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群

    文章目录 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群 一 背景 二 环境及架构图 2.1 软件环境 2.2 服务器规划 2.3 节点或组件功能简介 2.4 Kubernet ...

  6. 搭建Kubernetes(k8s)集群(cka考试环境)

    搭建Kubernetes(k8s)集群 基础介绍 containerd简介 Docker vs containerd K8S为什么要放弃使用Docker作为容器运行时,而使用containerd呢? ...

  7. [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address ……

    [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address -- 参考文章: (1)[异常笔记] zookeeper集群启 ...

  8. 容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet

    容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet 1 Before you begin 2 重新配置集群活动节点上的 Kubelet 2.1 基本工作流程概览 2.2 ...

  9. 容器编排技术 -- Kubernetes从零开始搭建自定义集群

    容器编排技术 -- Kubernetes从零开始搭建自定义集群 1 设计和准备 1.1 学习 1.2 Cloud Provider 1.3 节点 1.4 网络 1.4.1 网络连接 1.4.2 网络策 ...

  10. 使用Kubeadm搭建Kubernetes(1.12.2)集群

    Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...

最新文章

  1. 当你使用微信和 QQ 的时候,请不要忘记 ICQ 这个伟大的公司!
  2. python垃圾分类源代码_Python学习:怕乱丢垃圾罚款?使用 Python 轻松完成垃圾分类...
  3. python 画图 内存-用python 10min手写一个简易的实时内存监控系统
  4. internetreadfile读取数据长度为0_Datax3.0的安装和基本使用
  5. Ubuntu Server 16.04 LTS上使用Docker部署Tomcat修改为80端口
  6. Neo4j Backup:在Mark Needham上存储副本和一致性检查
  7. python thread模块_【Python@Thread】thread模块
  8. c语言 string.h部分常用函数的实现
  9. 服务器搭建网站完整教程(宝塔面板+wordpress) 快速搭建网站 一键部署
  10. C#中判断字符是否为中文
  11. 线性代数及其应用(第三版)1.7节习题解答
  12. 梦幻西游打宝图脚本制作教程
  13. pytorch加载模型指定GPU卡号报错或者指定失败
  14. 数字信号和模拟信号的区别
  15. 互联网时代没有囊括进来的流量,在产业互联网时代全部都被囊括进来
  16. BUUCTF WEB PIAPIAPIA1
  17. excel表格怎么调整行高和列宽_WPS图文教程:表格使用小技巧
  18. 进程、线程、协程、管程
  19. 中秋节ppt模板推荐
  20. C语言:递归解决年龄问题(精细版)

热门文章

  1. GRUB 和 GRUB2 的区别
  2. 设计模式练习:Composite模式
  3. 完全独立与IIS的后门
  4. Hive实践(hive0.12)
  5. request.getAttribute()和request.getParameter()两个方法的区别
  6. 【记录】C++中的位域
  7. 关于apache的重启
  8. 寻找发帖水王java_编程之美–寻找发帖水王 | Acm之家
  9. python语言数字类型字节_Python中 各种数字类型的判别(numerica, digital, decimal)
  10. 拓端tecdat|R语言数据可视化分析案例:探索BRFSS数据