| 导语 上一篇文章我们讲解了什么是kubernetes(K8S) ,你对K8S的概念目前已经有个初步的了解。很多同学估计想开始着手学习了,这篇文章我们来了解下K8S的一些必备基础是什么。
支撑K8S集群的操作系统基本上是Linux(1.14开始支持windows),而且内核版本是要在3.8以上(建议3.10以上)。因此,学习K8S必须要会Linux操作。另外初级的linux水平是不够的,至少要有2-3年的linux系统运维经验,在出现系统层问题的时候你能一定程度的定位和排障。这里K8S支持多种Linux的发行版本,也许你会问用CentOS还是Ubuntu?个人建议还是使用CentOS,理论上来说服务器领域CentOS稳定性会比Ubuntu强很多,毕竟CentOS基于Redhat,有红帽这么强大的开源技术公司做后盾总比后边是社区的Ubuntu可靠些。
没有Linux系统运维经验的同学如果你想学习K8S会有点艰难,建议先加强Linux的了解。可以的话,可以参加下红帽的系列认证,能拿到RHCA的话是最好不过了。目前网上也有很多Linux的学习视频,学习路线图也很清晰和丰富,建议从7.x版本的开始学习。
K8S集群除了系统层面的维护网络这块也是需要了解的。根据本人多年的运维经验,网络层面出现的问题次数一般比系统层面的会多一些。另外,K8S底层是虚拟化技术,这块又包含网络虚拟化。网络本身就很抽象了,如果是网络虚拟化就更加抽象。现在搞云计算虚拟化运维的人员也是经常被网络问题搞得比较头疼,这里不仅仅需要你懂传统的网络知识,同时也需要你掌握虚拟化层网络连接通信。不过,网络这块如果比较弱,不直接影响你开始的K8S入门学习,不过在日后的K8S集群维护,网络排障和网络调优是必不可少的,因为K8S的底层网络用了大量的网络虚拟化。如果你有兴趣加强学习这块,建议按照 “传统网络技术学习 --> 虚拟化技术学习 --> 网络虚拟化SDN技术学习” 这样的路线行走。
网络虚拟化这项技术学习周期会比较长,在云计算运维领域里,这是一个单独的方向。学习K8S可以不必在这块玩得很精通(前提参考你的工作性质),但是基本的概念和知识点还是需要掌握的。
跟网络虚拟化一样,K8S集群底层存储也需要用到虚拟化技术(当然排除有钱的公司直接用商业的集中式存储),这里通常会用到开源的ceph技术。存储虚拟化的运维相对网络虚拟化会简单一些,但是它的重要性非常高(毕竟数据无价)。通常K8S集群设计方案会跑在稳定的IAAS层之上,IAAS层会采用OpenStack、vmware vSphere等平台建设。IAAS层本身就会用到成熟的存储和网络虚拟化技术,因此K8S直接复用就行。不过在一家体量不大的公司里,IAAS层也是需要你或者同个部门维护,毕竟上层会受到下一层的影响。
学习K8S需要一定的存储运维经验,保证数据的稳定性,是一个运维人员最基本的要求。
安全这个话题比较大,而且在IT的任何时期都非常重要。云时代的来临更加让安全受到重视。想想用户在云平台里大规模使用云主机,如果没有安全的保障那么跑在云上的应用很容易受到攻击。K8S提供了PAAS层的解决方案,那么如何保证PAAS层的安全?这里也是个很值得研究的问题。下面这张图是来自CNCF的一个统计数据,表示的是用户在使用K8S的时候,哪一技术领域最让用户担心和受到挑战:
很明显,Security安全这块是TOP1。安全问题是"道高一尺魔高一丈" 的问题,有时候并不是完完全全靠技术就能搞定。这里通常要做到“技术 + 流程 + 意识 + 法律 ” 等多方面手段共同完成。另外要提到一点的是,容器技术本身就在安全性有很大的挑战,它的隔离性问题一直是饱受诟病。不过,最新的Kata 还有Podman 的推出都在尝试着解决这个问题。
安全领域是一个方向,我们在学习K8S的时候不了解安全不影响你学习K8S本身,它其实就像一个套在K8S外层的护盾。但是在日后维护没有安全方面的意识,搭建的平台将有很高的风险。K8S之前也是经常爆有安全漏洞,这些安全信息我们需要及时了解,然后快速找到有效的补丁进行解决。
前几年自动化运维让各种脚本语言大火了一下,特别是Python语言。一位运维工程师如果不会一门编程语言,你很难有竞争力。当前很多平台本身环境也复杂,重复循环做的事情也很多,不整理归纳做自动化处理工作量会很大。K8S集群的维护也是少不了自动化的,底层的部署、配置修改、资源管理等等。K8S是go语言编写的。go语言跟python一样,目前也是非常火爆。这门语言具有高并发性能,使用学习也简单。如果你要深入了解K8S,源码的阅读是少不了的。
不管是学习python也好还是go语言也好,会开发语言能完成一些手动无法完成的事。同时,学习编程语言能让自己更加有竞争力。而且 K8S本身的一些使用方法、设计模式都具有很重的运维开发思维,也就是大家常说的devops。想要高大上的做运维工作,开发能力必须要有!
K8S是容器资源管理平台,它里面不仅仅可以支持docker,其他的容器技术比如CoreOS的Rocket以及最新的Podman都是可以支持的。类似OpenStack不仅仅可以管理KVM也可以管理Xen、管理vmware。学习OpenStack我们要了解KVM虚拟化技术,同理学习K8S必然要学会Docker、Rocket等容器技术。
目前K8S这块主要集成的是Docker,网上对docker描述的文章和书籍都非常多。本人也写了10篇关于docker入门的知识文章,大家有兴趣可以在专栏向前翻找。
这里主要是强调下YAML语言的学习。K8S里面大量用到了YAML,通过定义YAML文件达到配置和管理K8S里各种资源的目的。我们前面学到过K8S里面有多种控制器,那么这些控制器如何操作资源(比如Pod),那么就需要通过YAML文件。用户在YAML文件定义各种参数,然后让控制器去执行。
另外,除了YAML的学习,咱们也需要掌握一些优秀的配置管理思维。K8S能助力CI/CD,一些版本控制、变更发布都需要有一套完善的标准化体系。面对大型的PAAS资源平台,除了运维能力的要求,一些配置流程管理工作也是需要做到位的。运维能力决定平台的稳定性,配置管理决定的是平台的标准化、流程化。一些过往的大事故,我们也经常有听说过是因为自动化配置出错导致的。
云原生(Cloud Native)这个概念最近在网上提得很多,容器微服务火了之后经常见到这个词。红帽对云原生是这么解释的:云原生落地得靠云原生应用,而云原生应用就是独立的小规模松散耦合服务的集合,旨在提供被大家都认可的业务价值,例如快速融合用户反馈和需求以实现持续改进。简而言之,通过云原生应用开发,您可以快速构建新应用,优化现有应用并将这些应用组合在一起,其目标是以最快的速度满足用户的需求。
个人理解 云原生(Cloud Native),咱们可以拆分下, Cloud Native = 云 + Native。
云:云计算、上云
Native:这里的 native 应该理解为 “原生方法” ,Native Method。 而这个原生方法主要由devops、微服务、容器、持续交付四种理论和方法来实现。网上有关于云原生的结构图:
云原生里四大方面包含了CI/CD、微服务、容器等技术,这三个很直接跟docker和K8S都有关系。所以,学习好K8S也是为新一代的架构方法打下基础。未来,用到K8S的地方会越来越多,云原生直接给出了一个大的方向,具有很强的指导意义。
总结:以上从八个方面大概讲述了下学习K8S之前需要做的一些准备。有些出发点更多是从本人经验得出的,难免有纰漏,大家可以适当参考。不过总体来讲,未来下个10年是属于容器的时代,学习K8S势在必行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。