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

网友投稿 879 2022-11-27

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

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

一、Kubernetes 简介

几个核心概念

PodPVC/PV/StorageClassDeploymentStatefulsetNode

Kubernetes架构

ETCD

持久化数据中心维护集群中所有数据的有序性和一致性事件机制同步数据变更

APIServer

对所有组件提供 API 接口负责 admission,鉴权等功能提供后端 etcd 数据 cacher,降低 ETCD 压力结合 ETCD,提供 List-Watch 机制

Controller-manager

提供一系列控制器,负责维护各种对象的生命周期 比如: Node controller, PV controller, Deployment controller, StatefulSet controller 等

Kubelet

Kube-proxy

网络代理,负责维护节点网络规则,接管 Pod 出入流量

二、Kubernetes 资源管理

资源种类

计算

原生: CPU,memory,等;可通过 Device plugin 方式支持的非原生: numa,socket...

存储类

原生:

临时存储: Ephemeral storage,EmptyDir 等持久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS...

可以通过 CSI 方式扩展支持其他存储

资源上报

计算资源上报:

cAdvisor -> Kubelet -> NodeAgent -> Device plugin -> Kubelet -> Node

存储资源上报:

临时存储:

cAdvisor -> Kubelet -> Node

持久化存储:

托管到存储提供商管理

资源分配

计算资源分配:

Kubelet -> cgroup manager -> cpu, memory...Kubelet -> device manager -> extended resources

存储资源分配:

Controller manager -> provisioner -> attacher -> mounter

资源状态维护

计算资源状态维护:

kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources

存储资源维护

PV controller -> PV/PVC

资源回收

计算资源回收:

Kubelet -> cgroup manager -> cpu, memory...Kubelet -> device manager -> extended resources

存储资源回收:

Controller manager -> unmounter -> detacher -> deleter

三、Kubernetes 调度

约束描述

资源申请:

request、limit

其他约束:

affinity/anti-affinityLabel selectorTaint & tolerationImage localityBin-packing/Load balancing...

调度流程

调度框架

主要分为几个步骤:

过滤

Pre-Filter: 进行一些全局的准备工作,防止流程中多次重复计算;Filter: 基于 Pod 的约束,进行 Pod -> Node 的匹配工作;Post-Filter: 如果没有一个合适的节点,则进行一些抢占行为(驱逐低优任务),看是否能找到合适节点;

打分

基于前面的过滤节点,对合适的节点进行打分,按照分值高低进行排序;如果前面没有合适的节点,则直接调度失败;

任务分配

Reserve: 在调度器 cache 里面缓存调度结果,为了解决异步 API 操作带来的时延问题;Permit: 扩展接口,可以在这里支持一些扩展语音,比如: Gang 等;

结果有三类: 失败,成功,等待

失败: 直接返回调度失败结果;成功: 直接通过;等待: 则异步等待,不阻塞其他流程;

Pre-Bind: 任务运行前的一些准备操作,比如: 动态创建 Volume 等;Bind: 把 Pod 绑定到 Node,即: 给应用分配运行节点;

四、小结

Kubernetes 运行 MySql + WordPress 示例

​​kubernetes.io/zh-cn/docs/…​​

Kubernetes 与 Yarn 的一些不同点:

基本单位:

Yarn: Container;Kubernetes: Pod;

资源管理的扩展能力:

Yarn: 没提供 Plugin 机制,侵入性较大;Kubernetes: plugin 机制扩展,侵入性小;

调度模式:

Yarn: Node -> TaskKubernetes: Task -> Node

系统设计

Yarn: 节点缓存,无核心中心化存储;Kubernetes: 中心化存储;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HDFS 高可用和高扩展机制分析|青训营笔记
下一篇:时隔4个月我面试字节又挂了|总结与展望
相关文章

 发表评论

暂时没有评论,来抢沙发吧~