可以在官方文档中找到对于scheduler的大致描述:
https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
大意就是,kube-schedulor是默认的scheduler并且是控制平面的一部分,如果需要的话,可以自己编写
替换。对于每一个需要被分配的pod,调度器都会为他们选择一个最优的容器去运行,但是每一个容器对于资源有不同的约束条件,所以需要在现有的node上通过调度器的指定条件去赛选出符合条件的node。满足条件的pod就称为可行节点(feasible node),如果没有合适的节点,pod会一直不可调度直到调度器找到合适的位置时。
确实,首先要做的就是大致浏览下三个主要文件。
调度器找到可行的节点然后运行一些列的方法去给可行的节点评分,然后选择一个分数最高的节点去放置pod,然后schedulor在称为bind的过程中给API server发送信息。
调度的决策包括个人和集体资源需求,硬件/软件/策略约束,亲和力和反亲和力规范等等。
schedulor对于节点的选择主要进行两个步骤:
1.赛选
2.评分
赛选是为了找到合适的节点,比如PodFitsResources候选节点是否有足够的可用资源去满足pod指定的需求,这一部完成之后,node list 就会包含所有合适的节点,通常情况下,这里不只一个,如果为空,则pod为unschedulable,
接着是score step,调度器为每一个node rank,然后选择一个最好的节点。然后将pod放置到score最高的节点上,如果有节点分数相同,那么解随机选择一个。
并切还有两种额外的方法去配置赛选与评分的规则
1 [Scheduling Policies](https://kubernetes.io/docs/reference/scheduling/policies) 通过调度策略,您可以配置谓词进行过滤,配置优先级进行评分。
2: [Scheduling Profiles](https://kubernetes.io/docs/reference/scheduling/config/#profiles) 调度配置文件允许您配置实现不同调度阶段的插件,包括:QueueSort、Filter、Score、Bind、Reserve、Permit等。您还可以配置kube调度器以运行不同的配置文件
这道这个大致的描述之后,就可以继续看代码啦。
- 文章翻译
- Large-scale cluster management at Google with Borg
- Borg Omega and kubernetes
- scaling kubernetes to 7500 nodes
- bpf 的过去,未来与现在
- Demystifying Istio Circuit Breaking
- 知识图谱
- skill level up graph
- 一、运维常用技能
- 1.0 Vim (编辑器)
- 1.1 Nginx & Tengine(Web服务)
- 基础
- 1.2 zabbix
- 定义
- 登录和配置用户
- 1.3 RabbitMQ(消息队列)
- 原理
- RabbitMQ(安装)
- 1.4虚拟化技术
- KVM
- 1.5 Tomcat(Web中间件)
- 1.6Jenkins
- pipline
- 1.7 Docker
- network
- 1.8 Keepalived(负载均衡高可用)
- 1.9 Memcache(分布式缓存)
- 1.10 Zookeeper(分布式协调系统)
- 1.11 GitLab(版本控制)
- 1.12 Jenkins(运维自动化)
- 1.13 WAF(Web防火墙)
- 1.14 HAproxy负载均衡
- 1.15 NFS(文件传输)
- 1.16 Vim(编辑器)
- 1.17 Cobbler(自动化部署)
- 二、常用数据库
- 2.1 MySQL(关系型数据库)
- mysql主从复制
- 2.2 Mongodb(数据分析)
- 2.3 Redis(非关系数据库)
- 三、自动化运维工具
- 3.1 Cobbler(系统自动化部署)
- 3.2 Ansible(自动化部署)
- 3.3 Puppet(自动化部署)
- 3.4 SaltStack(自动化运维)
- 四、存储
- 4.1 GFS(文件型存储)
- 4.2 Ceph(后端存储)
- 五、运维监控工具
- 5.1 云镜
- 5.2 ELK
- 六、运维云平台
- 6.1 Kubernetes
- 6.2 OpenStack
- 介绍
- 安装
- 七、Devops运维
- 7.1 理念
- 7.2 Devops运维实战
- 八、编程语言
- 8.1 Shell
- 书籍《Wicked Cool Shell Scripts》
- 8.2 Python
- 8.3 C
- 8.4 Java
- leecode算法与数据结构
- 九、杂记
- 高优先级技能
- 知识点
- JD搜集
- 明显的短板
- 1.0 Python
- 1.1 Kubernetes
- 1.18.2 《kubernetes in action》
- 遗漏知识点
- 1.18.3 GCP、azure、aliyun
- Azure文档
- 1.18.5 《program with kubernetes》
- Istio
- HELM
- 《Kubernetes best practice》
- Kubernetes源码学习
- Scheduler源码
- 调度器入口
- 调度器框架
- Node筛选算法
- Node优先级算法
- pod抢占调度
- 入口
- 主要代码结构
- new
- 文章翻译
- Flannel
- 从二进制集群搭建
- 信息收集
- docker优化
- 1.2 shell
- 面试题
- grep awk sed 常见用法
- shell实践
- 1.3 Data structure(数据结构)
- Calico
- Aliyun文档以及重点模块
- git
- 大数据组件
- 前端,后端,web框架
- cgroup,namespace
- 内核
- Linux搜集
- crontab
- centos7常用优化配置
- centos Mariadb
- eBPF
- ebpf的前世今生
- Linux性能问题排查与分析
- 性能分析搜集
- 性能分析常用10条
- 网络性能优化
- 文本处理命令
- sql
- Iptables
- python面试题
- iptables
- iptables详细
- zabbix面试题,proj
- prometheus
- web中间件
- nginx
- Haproxy
- grep sed awk
- Linux常用命令
- 云平台
- 书籍Linux应用技巧
- kafka
- kafka面试题
- ETCD
- Jenkins
- 3天补充的点
- K8s源码
- K8s
- k8s实操
- etcd
- test
- BPF
- PSFTP使用
- StackOverflow问答精选
- 问题
- 我对于学习思考
- 修改ssh超时时间
- 课程目录
- 运维与运维开发
- The Person
- 个人杂谈
- mysql主从复制
- 对于工作的认识与思考