0%

最近在给前端做概览接口,发现之前设计的excution之类的API比较难做这个概览,在走读apiserver的代码时发现之前了解的beego相关的知识已经不足以支撑自己做一些重构或者特性了,主要是面对多个controller的时候没有找到一个比较好的方法去设计接口来聚合,因此趁此机会好好走读一下beego的代码,当前业务中使用的都是beego 1.12.2的代码,因此本文也以这个版本作为基线(虽然beego 2.0已经发布有一段时日了)。

1、 前言

在分析beego的代码之前,我们需要先了解beego到底做了什么,根据beego的官方介绍

beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。

阅读全文 »

1、整体框架

在了解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 算法还包括一个新的机制来允许集群成员的动态改变,它利用重叠的大多数来保证安全性。

阅读全文 »

由于众所周知的原因,下载一些官方地址的容器镜像速度比较慢,这种时候可以使用阿里云的镜像加速器来帮助提升获取Docker官方镜像的速度。

1、获取镜像加速器的地址

登录阿里云容器镜像服务的console页面,选择”镜像加速器”,在这个界面上就能看到自己账号的镜像加速地址了。

阅读全文 »

1、项目概况

项目地址:https://github.com/kubernetes-sigs/metrics-server

k8s集群中,如果你想要去做弹性伸缩,或者想要使用kubectl top命令,那么metric-server是你绕不开的组件。metric-server主要用来通过aggregate api向其它组件提供集群中的podnodecpumemory的监控指标,弹性伸缩中的podautoscaler就是通过调用这个接口来查看pod的当前资源使用量来进行pod的扩缩容的。

需要注意的是:

  • metric-server提供的是实时的指标(实际是最近一次采集的数据,保存在内存中),并没有数据库来存储
  • 这些数据指标并非由metric-server本身采集,而是由每个节点上的cadvisor采集,metric-server只是发请求给cadvisor并将metric格式的数据转换成aggregate api
  • 由于需要通过aggregate api来提供接口,需要集群中的kube-apiserver开启该功能(开启方法可以参考官方社区的文档)
阅读全文 »

Pod 水平自动伸缩(Horizontal Pod Autoscaler)是k8s的kube-controller-manager中已经集成的一个controller,主要功能是根据pod当前的资源使用率来对deploy/rs自动扩缩容。详细介绍可以参考社区的官方文档

对于Pod 水平自动伸缩而言,最重要的就是其扩缩容的算法,社区原生的算法主要就是根据当前实例个数、当前metric指标和hpa中设置的期望指标来计算的,具体可以看2.2章节。

期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]

阅读全文 »