[k8s]谈谈 k8s 的本质

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 当下 k8s 算是比较火的一个内容,那么它到底是什么呢,它为什么会这么火呢,它解决的是什么问题呢.当我们谈 k8s 的时候,总是会想起来 Docker .是的,如果想要知道 k8s 解决的是什么问题,我们不可避免的再回到 Docker 上面,回到容器上面来.

当下 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>专栏文章之后的一些见解,有偏颇之处,还望指出.

欢迎加入我们的知识星球,一起成长,交流经验。加入方式,长按下方二维码噢

最后,我想重复一句话:选择和一群优秀的人一起成长,你成长的速度绝对会不一样!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
移动开发 前端开发 JavaScript
|
6月前
|
存储 算法 程序员
从1024开始,我们漫谈编程的本质
从1024开始,我们漫谈编程的本质
56 0
|
算法 程序员
谈谈我对于关键思考的理解
之前看过杨振宁的一个采访,说他最大的成就,不是获得了诺贝尔奖的研究,而是之前的一个普通理论的研究:他坚信事物是遵循一定规律的,不是大家认为的不可捉摸,花了7年时间,陆陆续续,终于找到了一个很好的解释,并且幸运的是,这个研究结果可以覆盖非常多的场景。
240 8
谈谈我对于关键思考的理解
|
安全 Linux 程序员
Linux环境编程必须搞懂的几个概念
Linux环境对于初学者来说,必须深刻理解重点概念才能更好的编写代码,实现业务功能,下面就几个重要的及常用的知识点进行说明。搞懂这几个概念后以免在将来的编码出现混淆。
20826 0
Linux环境编程必须搞懂的几个概念
|
运维 Cloud Native Devops
结合个人经历谈谈如何理解CALMS模型
结合个人经历谈谈如何理解CALMS模型
253 0
结合个人经历谈谈如何理解CALMS模型
|
编解码 缓存 NoSQL
7点 讲明白地图切片的概念与原理
7点 讲明白地图切片的概念与原理
482 0
|
编解码 缓存 NoSQL
7 段话说明 地图切片的概念与原理
7 段话说明 地图切片的概念与原理
215 0
|
存储 自然语言处理 数据管理
谈谈什么是数据?
当前,数据成为了一个广为人知的词,以至于我们中的许多人可能从未想过它的确切定义。
|
存储 算法
谈谈动态规划的本质
今天这篇文章,让我们深入动态规划,一窥动态规划的本质。
193 0
读《技术的本质》思考之二
递归你熟悉吗?脱离了代码呢?
119 0