这是我参与「第四届青训营 」笔记创作活动的的第10天,学习了【深入理解 K8S 资源管理和调度】的内容,重点是了解了K8S的架构、机制和资源管理调度流程。
k8s简介
定义
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
目的:管理容器应用和服务
作用:声明式配置和自动化
概念
-
pod 最小应用概念 --> deployment/statefulset pod的封装
deployment/statefulset代表一组pod -
volume 存储空间 --> PVC/PV --> storageclass 自动化
PV 具体为一块存储
PVC 是用户对存储的申请,PVC 和 PV 一一对应,是绑定关系 -
node 机器的概念
设计准则
- 声明式:给理想状态,系统自己配置
- 控制循环:control不停循环
- 组件化
- 向下兼容
架构
- 控制面
etcd:一致性存储的KV store;持久化数据中心,保存K8S所有集群数据的后台数据库
APIServer:对节点提供API;etcd数据cache;提供list-watch机制
controller-Manager:各种对象的调度器 - 节点
kubelet:负责容器周期维护
kproxy:网络代理
机制:list-watch
list-watch本质上还是client端监听k8s资源变化并作出相应处理的生产者消费者框架。
在整个k8s内部集群中,etcd负责存储集群数据信息,apiserver作为统一的入口,任何数据都必须经过apiserver。参考# 深入理解k8s中的list-watch机制
全量list+增量更新watch。list就是获取静态的所有数据,而watch则是只关心发生了变化的那部分。
资源管理
计算&&存储两类资源
1.上报
graph LR
A[cAdvisor采集器] --> D
B[DeviceMannager自定义采集器] --> D
D[node satus setter] --> E[Node API]
2.分配
存储:
graph LR
subgraph controllermanager
A[PV controller] --> B[attach controller]
end
subgraph kubelet
B[attach controller] --> C[volume manager]
C --> D[mouter]
end
3.资源回收 PVC要在Pod被销毁前处理
调度
调度流程
graph LR
A[开始] --> B[过滤 寻找满足需求的node]
B[过滤 寻找满足需求的node] --满足--> C[node打分]
C[node打分] --> D[node排序]
D[node排序] --> E[最适合node]
B[过滤 寻找满足需求的node] --不满足--> F[抢占]
E --> G[结束]
F --成功--> G
F --不成功--> H[回到调度队列]
优化
调度质量 调度性能 鱼和熊掌不能兼得
yarn vs k8s
| 比较 | yarn | k8s |
|---|---|---|
| 基本单位 | container | pod |
| 调度模式 | 节点找应用 | 应用找节点 |
| 设计模式 | 节点缓存 | 中心存储 |