当下k8s算是比较火的一个内容,那么它到底是什么呢,它为什么会这么火呢,它解决的是什么问题呢.这篇文章就尝试着来讲讲,Kubernetes的本质.

当我们谈Kubernetes的时候,总是会想起来Docker.是的,如果想要知道Kubernetes解决的是什么问题,我们不可避免的再回到Docker上面,回到容器上面来.

在"开发-测试-发布"的流程中,真正承载着容器信息进行传递的,是容器镜像.所以,当Docker项目成功后不久,它就迅速走向"容器编排"的重要原因:作为一家云服务商或者基础设施提供商,我只要能够将用户提交的Docker镜像以容器的方式运行起来,就能成为容器生态圈上的一个承载点,从而将整个容器技术栈上的价值,沉淀在我的这个节点上.此外,只要从我这个承载点向Docker镜像制作者和使用者方向回溯,整条路径上的各个服务节点,比如监控,安全,网络,存储等等,都有可以发挥和盈利的地方.所以,这也是为什么云计算提供商如此热衷于容器技术的重要原因:我可以通过容器镜像,和潜在用户(开发者)直接关联起来.

基于以上,容器从一个开发者手里的小工具,一跃成为了云计算领域的绝对主角;而能够定义容器组织和管理规范的"容器编排"技术,则当仁不让的成为了当下最火热的技术.

那么,Kubernetes要解决的问题是什么?编排?调度?还是集群管理?

这个问题,到现在也没有固定的答案,因为在不同的发展阶段,Kubernetes需要着重解决的问题是不同的.对于大多数用户来说,有一点是确定的:现在我有了应用的容器镜像,请帮我在一个给定的集群上把这个应用运行起来.更进一步说,我现在有了一个能够应用的容器镜像,那么我还希望Kubernetes能够给我提供路由网关,监控,备份等一系列运维能力.

说到这里,我们就需要来讲讲Kubernetes的架构了.



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

计算节点上最核心的部分,是一个叫做kubelet的组件.在Kubernetes项目中,kubelet主要负责同容器运行时(比如Docker项目)打交道.而这个交互所依赖的,是一个称作CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作.这也是为什么,Kubernetes项目并不关心你部署的是什么容器运行时,使用的什么技术实现,只要你的容器运行时能够运行标准的容器镜像,它就可以通过实现CRI接入到Kubernetes项目当中.

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

运行在大规模集群中的各种任务之间,实际上存在着各种各样的关系,这些关系的处理,才是作业编排和管理系统最困难的地方.而这也是Kubernetes项目要着重解决的问题.

Kubernetes着重解决的问题,也比较好理解.在容器技术普及之前,传统虚拟机环境对各种关系的处理方法都是比较"粗粒度"的.如果你善于发现,你会经常看到很多功能并不相关的应用被一股脑儿的部署在同一台虚拟机中,只是因为它们之间偶尔会互相发起几个HTTP请求.更常见的情况就是,当一个应用被部署在虚拟机里之后,你还需要手动维护很多跟它协作的守护进程,用来处理它的日志搜集,灾难恢复等辅助工作.

但当容器技术出现后,你会发现,在"功能单位"的划分上,容器有着独一无二的"细粒度"的优势:因为容器的本质,只是一个进程而已.

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

在上文中说了,Kubernetes项目着重要处理的问题是,对于各种关系的处理.先来一张Kubernetes项目核心功能的"全景图":



在这幅图中,我们从容器这个最基础的概念触发,首先遇到了容器间"紧密协作"关系的难题,于是就扩展到了Pod;有了Pod之后,我们希望能一次启动多个应用的实例,此时就需要Deployment这个Pod的多实例管理器;而有了这样一组相同的Pod后,我们又需要通过一个固定的IP地址和端口以负载均衡的方式访问它,于是就有了Service.

讲了这么多,那么Kubernetes的本质是什么呢?它的本质是为用户提供一个具有普遍意义的容器编排工具.如果非要一个很形象的比喻的话,你可以把它理解为操作系统.

过去很多集群管理项目所擅长的都是把一个容器,按照某种规则,放置在某个最佳节点上运行起来,这种功能我们称为"调度".但Kubernetes项目所擅长的,是按照用户的意愿和整个系统的规则,完全自动化处理好容器之间的各种关系,这种功能,叫做编排.

但是Kubernetes为用户提供的不仅限于一个工具,它真正的价值,在于提供了一套基于容器构建分布式系统的基础依赖.

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

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

感谢您的阅读~

[Kubernetes]谈谈Kubernetes的本质的更多相关文章

  1. [Kubernetes]关于 Kubernetes ,你想要的,都在这儿了

    陆陆续续,关于 Kubernetes 写了有 20+ 篇文章了. 今天这篇文章来一个整合,从实践到理论,可以按需查看(我是按照博客发表时间来排序的,如果后续有想要更新的内容,也会及时更新到这篇文章中) ...

  2. linux(centos8):kubeadm单机安装kubernetes(kubernetes 1.18.3)

    一,kubernetes安装的准备工作: 1,准备工作的各步骤请参见: https://www.cnblogs.com/architectforest/p/13141743.html   2,  ma ...

  3. 从0到1使用Kubernetes系列——Kubernetes入门

    基本概念 Docker 是什么 Docker 起初是 dotCloud 公司创始人 Solomon Hykes 在法国的时候发起的一项公司内部项目,Docker 是基于 dotCloud 公司多年云服 ...

  4. [Kubernetes]谈谈容器跨主机网络

    继上篇文章:[Kubernetes]浅谈容器网络,自己给自己挖的坑,这篇文章来谈谈容器跨主机网络. 要理解容器"跨主通信"的原理,就要来谈谈 Flannel 这个项目. Flann ...

  5. 谈谈 Kubernetes Operator

    简介 你可能听过Kubernetes中Operator的概念,Operator可以帮助我们扩展Kubernetes功能,包括管理任何有状态应用程序.我们看到了它被用于有状态基础设施应用程序的许多可能性 ...

  6. docker for mac 安装 kubernetes、kubernetes dashboard

    安装参考地址(按照此文档,安装成功):https://yq.aliyun.com/articles/508460 官方说明:https://kubernetes.io/docs/tasks/acces ...

  7. 【Kubernetes】Kubernetes删除namespace后持续terminating状态

    删除isti和foo的配置文件之后,namespace持续terminating状态,此时也无法再创建istio-system的namespace namespace "istio-syst ...

  8. 【Kubernetes】Kubernetes的Service外部访问方式:NodePort和LoadBalancer

    Kubernetes的Pod的寿命是有限的,它们不会复活,因此尽管每个Pod都有自己的IP地址,但是这些IP地址是不可靠的,会随着Pod的消亡而消失. 这就带来一个问题,如果一些Pod的集合(称之为b ...

  9. [Kubernetes]编排其实很简单

    什么是编排 Kubernetes中,我们总是在说一个概念:编排. 在[Kubernetes]谈谈Kubernetes的本质这篇文章中,关于"编排"的概念介绍了一下:过去很多集群管理 ...

随机推荐

  1. python新式类与旧式类

    python2.X是经典类[旧式类]: 是以深度优先[] 但是在Python2.x中,默认都是经典类,只有显式继承了object才是新式类,即:class Person(object):pass 新式 ...

  2. 为奋战在HIS创新路上的医院信息科赋能

    为奋战在HIS创新路上的医院信息科赋能 南京都昌信息科技有限公司 袁永福 2017-7 ◆◆前言 近日,上海瑞金医院向我司表示:“我院从2000年开始自主开发医院信息系统,走出了一条可持续的信息化发展 ...

  3. 更改电脑名称后, Cnario无法播放画面和声音, 开机后停留在桌面, Cnario Player软件界面的停止按钮为蓝色可选状态

    症状描述 Cnario Player正常工作期间, 更改了电脑的Windows系统计算机名称(不是登录Windows的用户名), 重启后, 新计算机名生效. 此时Cnario自动启动, 但没有进入播放 ...

  4. PHP artisan migrate 报错显示 could not find driver ,怎么办?

    记录下自己的错误 一. 1.原因是没有pdo扩展导致的, 2.解决办法:打开php.ini,然后去掉以下两行代码之前的分号(:)即可.如下: extension=php_pdo_firebird.dl ...

  5. Filter过滤要登录的页面(重要)

    一.为什么要写过滤器,过滤页面? 本人做了一个网站,目前还在开发.做过滤器的目的就是为了要过滤一些页面必需要用户登录之后才能看,主页什么的可以随便看,一旦涉及到要发布或评论什么信息,就必须要过滤用户的 ...

  6. [模板] k短路

    简介 Dijkstra最短路+A*搜索. 先逆向求所有点到终点的最短路 \(dis[i]\). 定义估价函数 \(f[i] = d[i] + dis[i]\) , 其中 \(d[i]\) 表示当前起点 ...

  7. [模板] 平衡树: Splay, 非旋Treap, 替罪羊树

    简介 二叉搜索树, 可以维护一个集合/序列, 同时维护节点的 \(size\), 因此可以支持 insert(v), delete(v), kth(p,k), rank(v)等操作. 另外, prev ...

  8. Sumdiv POJ 1845

    http://poj.org/problem?id=1845 题目 Time Limit: 1000MS   Memory Limit: 30000K Description Consider two ...

  9. Kindle官方广告“自封”泡面盖

    动点科技获悉:亚马逊出品的电子书阅读器 kindle 在最新投放天猫平台上的 banner 栏醒目位置投放了一组广告,令人大跌眼镜的是图片使用了 kindle 放在一桶泡面上的形式,怕你看不懂用意的官 ...

  10. [十二省联考2019]字符串问题——后缀自动机+parent树优化建图+拓扑序DP+倍增

    题目链接: [十二省联考2019]字符串问题 首先考虑最暴力的做法就是对于每个$B$串存一下它是哪些$A$串的前缀,然后按每组支配关系连边,做一遍拓扑序DP即可. 但即使忽略判断前缀的时间,光是连边的 ...