谈谈 k8s 的本质

作者阿里云代理 文章分类 分类:linux图文教程 阅读次数 已被围观 957

当下 k8s 算是比较火的一个内容,那么它究竟是什么呢,它为什么会这么火呢,它处理的是什么问题呢.

当咱们谈 k8s 的时分,总是会想起来 Docker .是的,假如想要知道 k8s 处理的是什么问题,咱们不可避免的再回到 Docker 上面,回到容器上面来.

在"开发-测试-发布"的流程中,真实承载着容器信息进行传递的,是容器镜像.所以,当 Docker 项目成功后不久,它就敏捷走向"容器编列"的重要原因:作为一家云服务商或者根底设施供给商,我只要能够将用户提交的 Docker 镜像以容器的方法运转起来,就能成为容器生态圈上的一个承载点,从而将整个容器技能栈上的价值,沉积在我的这个节点上.此外,只要从我这个承载点向 Docker 镜像制作者和使用者方向回溯,整条途径上的各个服务节点,比方监控,安全,网络,存储等等,都有能够发挥和盈利的当地.

所以,这也是为什么云核算供给商如此热衷于容器技能的重要原因:我能够经过容器镜像,和潜在用户(开发者)直接关联起来.

根据以上,容器从一个开发者手里的小东西,一跃成为了云核算范畴的肯定主角;而能够定义容器安排和办理规范的"容器编列"技能,则见义勇为的成为了当下最炽热的技能.

那么, k8s 要处理的问题是什么?编列?调度?还是集群办理?

这个问题,到现在也没有固定的答案,由于在不同的发展阶段, k8s 需求侧重处理的问题是不一样的.关于大多数用户来说,有一点是确定的:现在我有了使用的容器镜像,请帮我在一个给定的集群上把这个使用运转起来.更进一步说,我现在有了一个能够使用的容器镜像,那么我还期望 k8s 能够给我供给路由网关,监控,备份等一系列运维能力. 提到这儿,咱们就需求来讲讲 k8s 的架构了.

54.jpg

从上图中咱们能够看到, k8s 项目的架构,由 Master 和 Node 两种节点组成. Master 节点(即控制节点),由三个严密协作的独立组件组合而成,它们分别是担任 API 服务的 kube-apiserver ,担任调度的 kube-scheduler ,以及担任容器编列的 kube-controllermanager .而整个集群的耐久化数据,则由 kube-apiserver 处理后保存在 Etcd 中.

核算节点上最中心的部分,是一个叫做 kubelet 的组件.在 k8s 项目中, kubelet 主要担任同容器运转时(比方 Docker 项目)打交道.而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface) 的远程调用接口,这个接口定义了容器运转时的各项中心操作.这也是为什么, k8s 项目并不关怀你布置的是什么容器在运转,使用的什么技能实现,只要你的容器运转时能够运转规范的容器镜像,它就能够经过实现 CRI 接入到 k8s 项目当中.

正是由于如此, k8s 项目没有像同时期的各种"容器云"项目那样,把 Docker 作为整个架构的中心,而仅仅把它作为最底层的一个容器运转时实现.

运转在大规模集群中的各种使命之间,实际上存在着各种各样的联系,这些联系的处理,才是作业编列和办理体系最困难的当地.而这也是 k8s 项目要侧重处理的问题.

k8s 侧重处理的问题,也比较好了解.在容器技能遍及之前,传统虚拟机环境对各种联系的处理方法都是比较"粗粒度"的.假如你长于发现,你会经常看到许多功用并不相关的使用被一股脑儿的布置在同一台虚拟机中,仅仅由于它们之间偶尔会相互发起几个 HTTP 请求.更常见的情况便是,当一个使用被布置在虚拟机里之后,你还需求手动保护许多跟它协作的看护进程,用来处理它的日志搜集,灾难恢复等辅佐作业.

但当容器技能呈现后,你会发现,在"功用单位"的划分上,容器有着独一无二的"细粒度"的优势:由于容器的本质,便是一个进程罢了.

这样的意思便是说,只要你愿意,那些原来拥挤在同一个虚拟机里的各个使用,组件,看护进程,都能够被分别做成镜像,然后运转在一个个专属容器中.它们之间互不干涉,具有各自的资源配额,能够被调度在整个集群里的任何一台机器上.这也是"微服务"思维能够落地的前提条件.

在上文中说了, k8s 项目侧重要处理的问题是,关于各种联系的处理.先来一张 k8s 项目中心功用的"全景图":

55.jpg

在这幅图中,咱们从容器这个最根底的概念触发,首先遇到了容器间"严密协作"联系的难题,于是就扩展到了 Pod ;有了 Pod 之后,咱们期望能一次启动多个使用的实例,此刻就需求 Deployment 这个 Pod 的多实例办理器;而有了这样一组相同的 Pod 后,咱们又需求经过一个固定的 IP 地址和端口以负载均衡的方法拜访它,于是就有了 Service .

讲了这么多,那么 k8s 的本质是什么呢? 它的本质是为用户供给一个具有普遍意义的容器编列东西.假如非要一个很形象的比喻的话,你能够把它了解为操作体系.

过去许多集群办理项目所拿手的都是把一个容器,依照某种规矩,放置在某个最佳节点上运转起来,这种功用咱们称为"调度".但 k8s 项目所拿手的,是依照用户的志愿和整个体系的规矩,完全自动化处理好容器之间的各种联系,这种功用,叫做编列.

但是 k8s 为用户供给的不仅限于一个东西,它真实的价值,在于供给了一套根据容器构建分布式体系的根底依赖.

最后,上一张导图吧,算是对以上内容的一个总结(是不是看到导图就觉得好了解一些):

56.jpg

以上内容来自我学习<深化剖析Kubernetes>专栏文章之后的一些见地,有偏颇之处,还望指出.

欢迎参加咱们的常识星球,一同生长,交流经验。参加方法,长按下方二维码噢

最后,我想重复一句话:挑选和一群优秀的人一同生长,你生长的速度肯定会不一样!


本公司销售:阿里云新/老客户,只要购买阿里云,即可享受折上折优惠!>

我有话说: