云原生从字面意思上来看可以分成云和原生两个部分。云是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性和分布式优势。
在包括公有云,私有云,混合云等动态环境的构建和模块应用的能力。
云是把计算资源抽象出来,当用户使用云的时候,不需要关心底层硬件的细节,告诉云平台,需要跑多少个应用实例,要多少资源。
云原生是云的资源,衍生而来的,一种思想【类似敏捷开发是一种思想】,是技术、企业管理方法的集合。看云看两个层面,一个是云的提供商,回顾openStack本身就是一个命令,之后的生命周期是没有办法控制的。自动化是自己控制的,比如虚拟坏了,虚拟不可用了,很多公司都有自己的pass,需要把这些虚机组织起来,构建高可用的自动化作业,使得这个应用的高可用。
云原生是鼓励动态,全自动化的能力,一个虚拟机坏了,在云原生的技术栈,从云平台,自动换掉一个新的,整个集群是不变的。从应用接入的层面因为底层的自动化的支撑,应用接入仍然的高可用的,不受影响。整个技术栈是拥抱动态坏境的,环境随便动,在一定条件下不影响业务,云原生追求的目标,云平台本身是支持自动化体系的,在要接入的云平台,在设计之初而准备。
因为有了云原生,有了这个动态的环境,有了容器技术。依托容器技术封装,分发能力,云原生构建了DevOps平台,CICD更加容易。
在学习云原生的时候,其实就是在学习这些技术。
云原生非常的复杂,几百个项目,太大了,无从下手,下图选择了比较重要的组件。
非常难的,东西太多了,刚开始可能就是操作几条命令开始,kebectl,做些基本的操作,把应用跑起来。开始了解API的定义,后面隐藏的东西越来越大,自动化越高的平台,复杂度越大。
学习k8s感觉不难,但是深挖发现里面的资源越来越大了。目标就是希望能够挖到深处,真正了解背后的东西,背后去学习一定会有很多的挑战,可能有部分人没接触过容器,对云本身都不太熟悉,可能感觉到大量的概念。一个一个知识点的吸收,学的时候可能有些东西参不透,在坚持坚持就把握住核心了。云原生涉及到的知识面很广,不懂的概念不用急于求成,反复训练可强化理解。
*③ 持续学习是个反复的过程
清晰的思路和正确的学习方法,自我驱动非常重要。
分享我的学习经验给大家,少走弯路。
看官方文档,系统地学习。
搜中文文档,知乎,CSDN,简书都有比较高质量的文章,可以多看一些文档,并理解不同人的理解差异.中文世界Kubernetes非常活跃,不少文档质量超过英文。
但中文搬运转载问题比较严重,需要自己甄别。包括在github很多都是国人在提问。
先对大概的框架有认识,找到关键点。
由浅入深的理解,成为专家
掌控go语言编程能力【会一门编程语言学习很快】
从点到面
学习容器技术【cgroup、namespace;网络协议栈;文件系统】
专注核心掌控全局
深入理解k8s【API定义、控制器模式、核心组件】
大规模生产化
多集群、服务网格和多网络。
不管你是运维还是研发,其实DevOps已经把研发和运维都打通了,边界已经没有那么清晰,云原生一个开发和设计的时候,就要为云做准备。不管你是有无状态如何保证在云上高可用。
如果是本机i7,32g内存的话,可以使用虚拟机,如果没有虚拟机就使用云端,干什么事情都要有成本的,最低要求4核12g内存。磁盘30g。
因为墙的问题,可能镜像啦不下来,我会提供镜像仓库来供大家使用。
PS:云原生技术门槛比较高,意味职业的安全性比较高,自我突破的机会,实践出真知,多听,多学,多练。之前的专栏【从0开始学k8s】使用的centos,因为官方一直不支持centos了,这次专栏开始转战Ubuntu 来学习。
云原生的日常的工作,整个DevOps的流程,谈产品的架构,谈需求谈架构,做设计,写代码,写测试用例,搭建CICD的pipline,把你的产品发布到生产环境,走各个环节,各个测试环境,如:功能测试,集成测试,压力测试。各个测试环节走完就部署到生产环境。发布到生产环境,监控,运维,客户支持,bug修复,功能增强基本所有的工作,都要做。推进一个流程就会带来组织的改变,很多时候是不好推,推新技术也是一样,框架层面,别人负责的功能要往底层拉,DevOps可能伤害运维的权益,职责的变更,会有一些利益在里面,很可能这些变化导致一个部门搞没了,非常可能,有些时候很难推动的。webhook如何开发,控制器如何开发,CNI代码的分享,原理讲清楚。