kubernetes的思考

初识k8s

kubernetes,从接触到今年6月接触到现在有3个月了,严格来说是断断续续的接触,没有一直持续学习。在未接触之前,这个技术对我来说,有点像传说,运维同行对此评价普遍是比较难懂,概念庞大,应用落地困难这类评价较多,看到大概的评价,我暂时是不打算学习这块的,精力更多的是放在学习加固基础上,最近对知识的复盘,对很多技术有不同的思考,这里说一下我对k8s的思考。

学习k8s简单吗

后续接触docker这个容器技术,个人认为是介于应用程序和操作系统之间的一个虚拟层,有点类似软件设计里面的“虚拟层”意思,接触过的都知道,docker命令非常多,平时使用和真正在生产落地可不是简单的能用就可以的,所以编排技术的产生随之而来,实际上这里有一个疑问,管理一个复杂的技术本身会是简单的?接触k8s之后,觉得一点都不简单

什么是k8s

关于k8s的介绍,这里摘自官网的主页的介绍,以下为官网原文

kubernetes是一个开源系统,用于容器化应用的自动部署、扩缩和管理。Kubernetes 将构成应用的容器按逻辑单位进行分组以便于管理和发现。 Kubernetes 基于谷歌公司在运行生产负载上的 15 年经验打造,并融合了来自社区的最佳建议与实践。
基于一定的规则原理,谷歌公司每周能够运行数十亿的容器;通过遵循相同的设计, Kubernetes 能够在保持现有运维团队规模的前提下完成集群的弹性伸缩。
作为一个开源系统,Kubernetes 使您能够自由地获得内部云、混合云或公有云基础设施所提供的便利, 并根据需要轻松地迁移工作负载。

看了上面介绍的你,对这个技术是不是有一种好奇,这么牛皮,这么多特点,好像无所不能。。。
如果去搜索引擎找k8s介绍这类文章,铺天盖地的这种介绍,各种特点神话的技术,很认同的一句话“多度的包装容易让技术本身披上一层迷雾”,在k8s上,不知道在座的第一次看到k8s介绍是否会有同感,我是有这种感觉。

k8s到底是什么

在回答这个问题之前,先来看看下面wiki对计算机的定义

电子计算机(亦称电脑)是利用数字电子技术,根据一系列指令指示并且自动执行任意算术或逻辑操作串行的设备。通用计算机因有能遵循被称为“程序”的一般操作集的能力而使得它们能够执行极其广泛的任务

这段话和平时接触的计算机概念,在大意上大家都接触过,在这里我把计算机的处理任务的能力整体上称为“计算力”,用来代表一台计算机的整体处理能力,接下来回顾前文k8s官网的介绍。
首先看看第一段话,“用于容器化应用的自动部署、扩缩和管理”,再看这句话,“自动部署”这个词应该是很早之前就有的,应用部署规模大了之后,不可能人工部署,效率、正确性各种方面都不合适,所以说自动化部署也可以看成是一种“偷懒”下的产物
接下来看看“管理”,这也不难理解,毕竟规模体系大了之后,人工管理都是需要像更高效的平台化管理发展的(其实也有点“偷懒”的味道)
最后来看看中间的的介绍词“扩缩”,这两个字简单,但里面包含的意思可不简单,“扩缩”指的是扩容和收缩,请认真思考一下。。。
先来看看常见的扩容,一般情况下,一套稳定正常流畅使用的系统是不会做这个操作的,只有当业务规模增加,处理能力超出现有的生产处理能力,才会做的升级措施,简单来说,就是增加计算力。再详细看看,假设一台服务器的计算力用数字100表示,对于一个生产架构来说,无论做了多少优化,都不可能发挥所有服务器的100%性能,这一点相信你们也是认同,总会有一些性能空闲多的服务器。那么问题来了,
容器技术在kubernetes管理下的计算力可以超过现有的 人工/平台 管理服务器的计算力总和吗?
对于这个问题,我无法完完全全回答,只能说从接触k8s到现在,思考了有一段时间,从几个角度回答这个问题。第一看性能,性能是最好的对比,先来看看k8s管理的容器技术docker,docker是一种虚拟化技术,各位可以网上搜索一下docker的性能和常见的虚拟机性能对比,大概可以知道整体上的docker是超过虚拟机性能的,但是,我前面说过了,docker是一种虚拟层技术,无论设计多么的优秀完美,docker能和裸金属服务器下运行软件应用性能媲美吗?我觉得这个答案无疑是不能的,无论整体上还是局部对比上,那么回过头来看,k8s管理下也不能超过裸金属服务器的总性能,理论上至少会有损耗,追求完美是好的,但是更多时候软件的架构上需要考虑缺点是否可以接受
第二点,看看k8s的扩容上,这一点技术在当前开源管理技术来说是非常优秀的设计,充分发挥服务器的性能。试想一下平时的扩容是怎么操作的,简单的是人工操作,高级点是把人工操作的部署集成到平台化,智能点是结合监控,测试等等综合因素触发自动扩容条件进行自动扩容。连我都能想到这个点(菜鸟.jpg),那么自动扩容技术至少不是k8s首创。
第三点,看看管理上,k8s提供了一种平台化管理技术,那么对于自建管理平台的公司来说,自建的管理平台,至少是符合公司,团队的,至于哪个好,那就各人的感受了
第四点,规模上看,目前各种自动化技术管理技术,开源的非自建的,都有各的好,这一点上k8s也没有绝对优势
以上四个点回答前面的提问,理论上应用部署在k8s是可以更加好的发挥服务器的整体性能,往极限来想就是发挥全部性能,但是如果一个公司的服务器,本身就已经发挥了接近极限了,那么k8s并不能带来发挥计算力上的优势,这种情况只有加钱买服务器增加计算力才能解决问题。至于收缩,这个操作比较少见,意思就是反过来了,不需要那么多计算力,流量峰值过后才需要的操作

接下来看看第二段话,“谷歌公司每周能够运行数十亿的容器”,这句话意味着部署数十亿个容器(业务规模难以想象.jpg),这里一直有一个疑问,其他的大厂或者大规模的管理平台怎么做的?为嘛k8s出来纷纷站队,自建的管理平台应该也不差才对,希望有朋友看到回答这个疑问。站在业务层面来看,如果一个业务不是经常更新部署,那么k8s在部署优势上的优点也不能给业务带来改进,这里顺带提一下有状态应用,据我所知,有状态应用一个特点就是产生数据,平时数据的存放多是在操作系统的文件系统上,文件系统经过长时间的发展,是经得起考验的,这方面事故较少,所以关注不多。但是呢,这种操作系统上的文件系统是在单机上的,那么自然会有相应的分布式文件系统技术产生,至于性能和稳定性方面,我觉得和纯操作系统的文件系统是差一些的,特别是稳定性,平时不出事都好说,一出事,那就真的呵呵了,很多公司最重要的就是数据,其他的什么软件,代码靠边站(数据就是霸气.jpg),有状态上k8s真的要特别小心,如果有专门负责存储的工程师负责,有这个技术实力,那就另当别论,毕竟专业人做专业事,没接触这块方向不做评论。

最后一段话,认真看就说,方便集合不同环境下的服务器性能,方便但高效吗?这个是否高效无法回答,毕竟不同的环境,运营商、网络等等影响因素太多,综合起来的性能不好说
经过对k8s官网介绍解读,相信你会对k8s也有自己的思考,欢迎留言交流

k8s给架构带来什么

技术是为业务服务的,无论一个技术多么牛皮,对生产架构不能带来优点和改进都是耍流氓,这一点,大家各自有看法,我这里说说我的看法。第一按照软件应用状态角度看,对于无状态应用,k8s的容器管理确实一大利器,效率上带来很大的提高;至于有状态应用,个人比较倾向于稳定性方面考虑,有状态应用在高并发场景下本身很容易出问题,而存储无小事,不应该增加其他的风险,况且k8s产生的背景不是要统一有状态应用和无状态应用软件的运行。
第二看看管理效率上,这一点现有的管理平台不少,管理效率上应该不会差很多
第三点,服务器整体性能角度看,这一点目前来说,确实是利器,虽然会有一些损失,但是可以接受,所以整体上还是很强

以上就是我目前对k8s的思考,其中疑问和观点较多,欢迎留言交流

posted @ 2019-09-12 09:55  浪子尘心  阅读(415)  评论(0编辑  收藏  举报