【k8s连载系列】2. k8s整体架构

# 一、Kubernetes的整体架构
学习k8s , 最终目的是为了部署应用 , 部署一个完整的k8s, 就要知道k8s的组成 。k8s主要包含两大部分: 中间包含三个绿色包的是master服务器. 下面是node节点.
在这里提前说一下etcd,etcd是k8s集群的一个数据库存储服务器 。它采用了RAFT算法来选举主节点 ,  所以,要求我们的master节点个数必须是3,5,7 ,  9这样的奇数,也就是大于1的奇数个 。3个节点可以保证1次高可用,5个节点可以保证两次高可用 , 7个节点可以保证3次高可用 。以此类推 。也就是3个节点最多可以死一次 。5个节点最多可以死2次 。node节点的个数不限制 。
<img src="http://img.zhejianglong.com/231019/202J62Y8-0.png" alt="img" style="zoom:50%;" />
上图是k8s的简单架构图 。可以看到有如下几个部分:
- master节点:左上角的最大快区域,是我们整个k8s的核心 。上面说的大于1的奇数个节点 , 说的就是这里 。- node节点:- etcd存储端:用来存储k8s中的数据的,主要采用Raft算法 。- internet网络层:- firewall防火墙:- web UI:- kubectl:
# 二、Master节点
master节点在整个服务中起着至关重要的作用
master中主要有三个部分的内容:scheduler,控制器 , api server 。
## 1、Api Server
api server是所有服务请求访问统一的入口(所有请求的统一的入口) 。如果想要给k8s下达命令,不管是什么类型的命令,都需要发送给api servier 。
Api Server 本身是一个HTTP Server , 也就是一个web服务器 , 它是无状态的 。它的所有数据都会写入到Etcd 。如果你想要管Api Server要数据,它本身是没有的,他会去Etcd里面查询 , 然后返回给你 。
从上图可以看出. Master中scheduler需要和api server交互, rc要和api server交互, kubectl(客户端)也要和api sever交互, web UI也要和api server交互, etcd也要和api server交互. apiserver是非常繁忙的.
api server采用的是无状态http请求,所以,他不会记录任何数据,所有数据都存储在etcd上 。
Kubernetes API 服务器的主要实现是 kube-apiserver 。kube-apiserver 设计上考虑了水平伸缩,也就是说,我们可以通过部署多个实例进行伸缩 。你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量 。
## 2、Scheduler 任务调度器
scheduler是k8s本身的一个调度器 , 这个调度器可以存在多个组成高可用 。
scheduler是任务调度器, 负责调度任务, 选择合适的节点来执行任务. 当用户下达资源请求的时候,任务调度器会把任务分配给后端的多个node节点上,要基于一定的原则,**公平的**,快速的分发 。也就是说,保证每个节点都有事做 , 不要浪费资源 , 做到资源利用最大化 。所以,scheduler调度区非常关键,**他是保证整个集群资源利用高不高的核心组件 。**
举个例子,一个任务来了, 要部署一个应用,到底应该部署在哪个节点上呢? 这个过程就是通过scheduler进行任务调度的 。有的机器繁忙,有的机器空闲,scheduler会找一台空闲的机器进行部署 。通过scheduler进行任务调度分发至不同的node.
scheduler会将任务交给api server, 由api server将任务写入到etcd, 也就是说scheduler不会直接和etcd交互 。
## 3、controller-manager 控制器管理器
controller-manager: 控制器, 处理集群中常规后台任务,一个资源对应一个控制器 。假如集群中有的pod已经死了,控制管理器就会处理将其删除或者救活 。集群中的扩容,维稳都是有控制管理器来实现的 。相当于是集群的管家 。
举例来说,有一个订单服务 , 我们要部署这个服务 , 首先是交给任务调度器,任务调度器调用api server,将信息保存到etcd,etcd会创建一个controller-manager来专门管理这个订单服务 。通常来说,一个资源对应一个控制器 。
## 4、kubectl
命令行管理工具 。这个工具我们可以安装在任何节点上 。通常,我们将其安装在master节点上 。可以安装在安卓手机上,苹果手机上,windows电脑上,只要能够通过网络连接到api server , 就能下发请求 。
## 5、Web UI
Web UI是一套可操作的界面 。Dashboard是 Kubernetes 集群的通用的、基于 Web 的用户界面 。它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除 。
这个仪表盘不是给开发者使用的,开发者通常还是使用命令行,命令行是最全的 。
# 三、etcd数据存储
?先来说说etcd数据库的背景 。我们熟悉的docker是docker公司开发的,其实在docker公司吧docker做大之前,还有一个公司也在默默的付出,就是Core OS公司,知道这家公司的人不多,但这个公司的技术背景是非常强悍的 。docker公司和Core OS公司关系非常好,可以说技术是半共享状态 。docker里面很多技术也是core OS公司贡献的 。但是最终的结果是docker公司走红,一飞升天了,但是core OS公司没有几个人知道 , 但是core OS公司也获得了强大的技术背景的实例 。core OS公司也想崛起 , 还开发了一款容器,但很显然,没法和docker比,于是core OS公司ua拿了一个策略,加入到了k8s的生态构建 。core OS为k8s构建了很多组件,etcd就是core OS公司开发并且维护的,采用golang语言编写 。etcd是k8s的总存储,由core OS公司负责,由此可见技术能力是很强的 。

推荐阅读