本文主要基于清华大学课程陈渝老师的操作系统课程总结而来。
B站视频的地址为:https://www.bilibili.com/video/BV1uW411f72n
课件地址为:https://github.com/dramforever/os-lectures-build/releases。
同时部分文字和图片参考以下文章:
本文主要基于清华大学课程陈渝老师的操作系统课程总结而来。
B站视频的地址为:https://www.bilibili.com/video/BV1uW411f72n
课件地址为:https://github.com/dramforever/os-lectures-build/releases。
同时部分文字和图片参考以下文章:
最近在给前端做概览接口,发现之前设计的excution之类的API比较难做这个概览,在走读apiserver的代码时发现之前了解的beego相关的知识已经不足以支撑自己做一些重构或者特性了,主要是面对多个controller的时候没有找到一个比较好的方法去设计接口来聚合,因此趁此机会好好走读一下beego的代码,当前业务中使用的都是beego 1.12.2的代码,因此本文也以这个版本作为基线(虽然beego 2.0已经发布有一段时日了)。
在分析beego的代码之前,我们需要先了解beego到底做了什么,根据beego的官方介绍:
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
在了解volcano的结构之前,我们需要先知道为什么要有volcano,它到底解决了哪些kube-scheduler无法解决的问题。要回答这个问题,我们需要先了解kube-scheduler的调度机制,我们知道,kube-scheduler是以pod为单位来进行调度的,除了通过亲和性来做一些pod之间的关系处理之外,并没有任何pod间的关联机制。举一个例子,在AI等训练的场景,是需要一批pod同时工作的,而且这些pod要么一起调度成功,要么一起调度失败,部分调度成功部分调度失败会导致整个任务最重还是失败的,而且调度成功的那些pod还浪费了资源,这种要么一起成功要么一起失败的场景是kube-scheduler无法解决的,所以才催生了volcano以及volcano的前身kube-batch的诞生。
本文转载自GitHub项目:https://github.com/maemual/raft-zh_cn,是raft协议论文的中文翻译。
Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可理解性,Raft 将一致性算法分解成了几个关键模块,例如领导人选举、日志复制和安全性。同时它通过实施一个更强的一致性来减少需要考虑的状态的数量。从一个用户研究的结果可以证明,对于学生而言,Raft 算法比 Paxos 算法更加容易学习。Raft 算法还包括一个新的机制来允许集群成员的动态改变,它利用重叠的大多数来保证安全性。
项目地址:https://github.com/kubernetes-sigs/metrics-server
在k8s
集群中,如果你想要去做弹性伸缩,或者想要使用kubectl top
命令,那么metric-server
是你绕不开的组件。metric-server
主要用来通过aggregate api
向其它组件提供集群中的pod
和node
的cpu
和memory
的监控指标,弹性伸缩中的podautoscaler
就是通过调用这个接口来查看pod的当前资源使用量来进行pod的扩缩容的。
需要注意的是:
metric-server
提供的是实时的指标(实际是最近一次采集的数据,保存在内存中),并没有数据库来存储metric-server
本身采集,而是由每个节点上的cadvisor
采集,metric-server
只是发请求给cadvisor
并将metric
格式的数据转换成aggregate api
aggregate api
来提供接口,需要集群中的kube-apiserver
开启该功能(开启方法可以参考官方社区的文档)项目地址:https://github.com/prometheus/node_exporter
node_exporter
本质是prometheus
项目衍生出来的众多exporter中的一个,主要用于收集*NIX内核的节点上硬件和操作系统的各种数据,并暴露/metrics
接口以供其他组件(如prometheus)采集。该组件收集的监控指标可以直接参考github代码库的README.md
,在此就不多做赘述。