深入理解 K8S 资源管理和调度| 青训营笔记

129 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第10天,学习了【深入理解 K8S 资源管理和调度】的内容,重点是了解了K8S的架构、机制和资源管理调度流程。

k8s简介

定义

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
目的:管理容器应用和服务
作用:声明式配置和自动化

概念

  1. pod 最小应用概念 --> deployment/statefulset pod的封装
    deployment/statefulset代表一组pod

  2. volume 存储空间 --> PVC/PV --> storageclass 自动化
    PV 具体为一块存储
    PVC 是用户对存储的申请,PVC 和 PV 一一对应,是绑定关系

  3. node 机器的概念

设计准则

  1. 声明式:给理想状态,系统自己配置
  2. 控制循环:control不停循环
  3. 组件化
  4. 向下兼容

架构

  1. 控制面
    etcd:一致性存储的KV store;持久化数据中心,保存K8S所有集群数据的后台数据库
    APIServer:对节点提供API;etcd数据cache;提供list-watch机制
    controller-Manager:各种对象的调度器
  2. 节点
    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

比较yarnk8s
基本单位containerpod
调度模式节点找应用应用找节点
设计模式节点缓存中心存储