这是我参与「第四届青训营 」笔记创作活动的第3天
深入理解 K8S 资源管理和调度
小提问:如何部署你的WordPress应用(Mysql) ?
-
登录服务器,手动安装各种依赖,然后部署二进制
-
自己编译,打包镜像,手动启动容器
-
容器
-
docker官网 www.docker.com/resources/w…
01.Kubernetes简介
1.1定义
-
Kubernetes is a portable, extensible, open source platform for managing containerized workloadsand services, that facilitates both declarative configuration and automation.
-
特点
- 便捷,可扩展,开源
-
目的
- 管理容器应用和服务
-
作用
- 声明式配置和自动化
-
核心概念
- Pod
- Deployment/StatefulSet
- Volume/PVC/PV/StorageClass
- Node
- 运行
- Deployment中有两个pod
- pod可扩展到pvc
- pvc和sc连接
pod样例
Volume/PVC/PV/StorageClass
-
Volume
-
StorageClass
-
PVC
-
Deployment
-
StatefulSet
- Node
docker 处为系统镜像
1.2设计准则
- Declarative > imperative: State your desired results, let the system actuate 只需告知理想状态
- Control loops: Observe, rectify, repeat 状态维护
- Simple > Complex: Try to do as little as possible 追求简单
- Modularity: Components, interfaces,& plugins 模块化
- Legacy compatible: Meet users where they are, requiring apps to change is a non-- starter 上下兼容
- Open > Closed: Open Source,standards, REST,JSON, etc. 开放原则
1.3 Kubernetes 架构
- ETCD:
- 持久化数据中心
- 维护集群中所有数据的有序性和—致性
- 事件机制同步数据变更
- APIServer:
- 对所有组件提供API接负责admission,鉴权等功能
- 提供后端etcd数据cacher,降低ETCD压力
- 结合ETCD,提供List-Watch机制
- Controller-Manager:
- 提供—系列控制器,负责维护各种对象的生命周期比如: Node controller,PV,controller, Deployment controller ,StatefulSet controller等
- Scheduler:
- 负责应用实例的调度,把Pod绑定到合适的Node
- Kubelet:
- 基于Pod声明,真正开始启动容器,
- 负责容器生命周期维护
- Kube-proxy:
- 网络代理,负责维护节点网络规则,接管
- Pod出入流量
1.4Kubernetes 核心通信机制 - List-Watch
- Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。
- 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。APIServer 经过 API 调用,权限控制,调用资源和存储资源的过程,实际上还没有真正开始部署应用。这里需要 Controller Manager、Scheduler 和 kubelet 的协助才能完成整个部署过程。
- 在 Kubernetes 中,所有部署的信息都会写到 etcd 中保存。实际上 etcd 在存储部署信息的时候,会发送 Create事件给 APIServer,而 APIServer 会通过监听(Watch)etcd发过来的事件。其他组件也会监听(Watch)APIServer 发出来的事件。
1.5Kubernetes 核心功能
- 服务发现和负载均衡
- 存储编排
- 自动发布,回滚
- 自愈
- 秘钥,配置管理
- 资源管理,应用编排调度
02.资源管理
资源种类
- CPU, Memory ,HugePages, GPU...
- Socket, Numa,NIC...
- Ephemeral Storage,NFS,GlusterFS.RBD,Cinder...
- ByteDance Storage(FS, Block)...
2.1资源上报
kubelet采集器
2.2资源分配
计算资源
2.3资源分配
存储卷
2.4状态维护
2.5资源回收
计算资源和存储卷联系。 当用户不再使用其存储卷时,他们可以从API中将 PVC 对象删除,从而允许该资源被回收再利用。PersistentVolume 对象的回收策略告诉集群,当其被从申领中释放时如何处理该数据卷。 目前,数据卷可以被 Retained(保留)、Recycled(回收)或 Deleted(删除)。
03.调度
- CPU 资源;
- memory;
- ephemeral-storage 临时存储;
- 通用的扩展资源,比如GPU。
调度流程
04.优化实践
- 非原生资源的精细化管理能力
- 动态资源接入,管理能力
- 调度功能和性能
- 调度质量
功能增强
- Gang
- Job level affinity
- 微拓扑调度
- 资源预留,占位
- 重调度
- 丰富的排队策略
调度质量
- 实时负载均衡
- 资源碎片
- 应用亲和,反亲和力
Kubernetes 和Yarn的一些不同
- 基本单位
- Pod&Container
- 资源管理
- 资源种类
- 扩展能力
- 调度模式
- Task ->Node
- Node ->Task
- 系统涉及 中心存储&节点缓存