云原生概念解析:如何掌握学习技巧?

发表时间: 2022-09-27 09:21

云原生从字面意思上来看可以分成云和原生两个部分。云是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性和分布式优势。

什么是云原生(一)

  • ① 介绍

在包括公有云,私有云,混合云等动态环境的构建和模块应用的能力。

云是把计算资源抽象出来,当用户使用云的时候,不需要关心底层硬件的细节,告诉云平台,需要跑多少个应用实例,要多少资源。

云原生是云的资源,衍生而来的,一种思想【类似敏捷开发是一种思想】,是技术、企业管理方法的集合。看云看两个层面,一个是云的提供商,回顾openStack本身就是一个命令,之后的生命周期是没有办法控制的。自动化是自己控制的,比如虚拟坏了,虚拟不可用了,很多公司都有自己的pass,需要把这些虚机组织起来,构建高可用的自动化作业,使得这个应用的高可用。

云原生是鼓励动态,全自动化的能力,一个虚拟机坏了,在云原生的技术栈,从云平台,自动换掉一个新的,整个集群是不变的。从应用接入的层面因为底层的自动化的支撑,应用接入仍然的高可用的,不受影响。整个技术栈是拥抱动态坏境的,环境随便动,在一定条件下不影响业务,云原生追求的目标,云平台本身是支持自动化体系的,在要接入的云平台,在设计之初而准备。

  • ② 技术层面
  1. 应用程序从设计之初就为在云上运行而做好准备。
  2. 云平台基于自动化体系。
  • ③ 流程层面

因为有了云原生,有了这个动态的环境,有了容器技术。依托容器技术封装,分发能力,云原生构建了DevOps平台,CICD更加容易。

  • ④ 基于多种手段

在学习云原生的时候,其实就是在学习这些技术。

  1. 应用容器化封装。docker封装的技术,虽然是linux下的老技术,但是它做了封装,导致整个应用的部署和分发方式全部变了。
  2. 服务网格。istio 它本身已经超过了k8s,服务和服务调用应该怎么走的,一种是走集中式负载均衡,或者springcloud点对点的。服务网格是微服务的创新,服务和服务调用的时候,每个服务之间有个Istio sidecar,本地化的分布部署均衡器,所有的网络调用都要经过sidecard to sidecard带来很多可能,可观察性:日志、指标、链路追踪,从管理和协议上做协议的升级,安全保证,认证授权。 完全由服务网格托管起来了。
  3. 不可变的基础架构。原来在一个虚拟机里面,给用户,用户登录更改配置,改配置会带来很多问题,多人修改,没有人能说明,到底该了哪些配置,当虚拟机坏了,所有手工的操作是不可追溯的,新的虚拟机换它的节点可能应用无法正常的工作。但是你根本不知道什么原因。在云原生因为有了容器化的封装,讲究一个不可变的架构,操作系统是在容器内运行,容器本身有不可变的特性的,当运行容器实例坏了,换了一个新的实力,新老实例是完全一样的,应用的替换非常方面。
  4. 声明式API。以前都是互动方式,你敲完命令,等待结果,命令顺序跟执行结果是有关系,无法追溯。声明式API,把要管理的对象都抽象成一个一个API,API本身是云原生技术栈练习厂商,变成一个一个标准。将来云的世界,这些API都是标准,例如管理的节点如何描述,管理的作业如何描述,发布一个服务怎么表述,我发一个命令给k8s,k8s都将我设定的命令保存起来了。任何的API的调用都可以源代码存在git上。基础架构及代码。一切都是代码。把所管理的云原生世界,一切的对象,都当成代码。代码的版本放在代码仓库里面,做到可追溯。
  • ⑤ 云原生的意义
  1. 提升系统的适应性、可管理型、可观察性。
  2. 使工程师能以最小成本进行频繁和可预测的系统变更。
  3. 提升速度和效率,主力业务成长,缩短12M(Idea to Market)。
  • ⑥ 云原生核心项目预览

云原生非常的复杂,几百个项目,太大了,无从下手,下图选择了比较重要的组件。

学习云原生遇到的挑战(二)

  • ① 内容太多

非常难的,东西太多了,刚开始可能就是操作几条命令开始,kebectl,做些基本的操作,把应用跑起来。开始了解API的定义,后面隐藏的东西越来越大,自动化越高的平台,复杂度越大。

学习k8s感觉不难,但是深挖发现里面的资源越来越大了。目标就是希望能够挖到深处,真正了解背后的东西,背后去学习一定会有很多的挑战,可能有部分人没接触过容器,对云本身都不太熟悉,可能感觉到大量的概念。一个一个知识点的吸收,学的时候可能有些东西参不透,在坚持坚持就把握住核心了。云原生涉及到的知识面很广,不懂的概念不用急于求成,反复训练可强化理解。

  • ② 端正态度
  1. 认真对待工作中的每一个问题:切记不求神界,知其然不知所以然。打破砂锅问到底。
  2. 问问题的技巧和方法。
  3. 师傅领进门,修行靠个人。
  4. 多看分享,了解他人的所知所想。

*③ 持续学习是个反复的过程

清晰的思路和正确的学习方法,自我驱动非常重要。

  1. What:看官方文档解决是什么的问题,先看文档,在练。
  2. Why:学习领域知识理解
  3. How:按照文档操作理解如何做;看代码理解深入理解

云原生如何学习(三)

  • ① 跟着专栏学习

分享我的学习经验给大家,少走弯路。

  • ② 官方文档

看官方文档,系统地学习。

  • ③ 看看前人是怎么解读的

搜中文文档,知乎,CSDN,简书都有比较高质量的文章,可以多看一些文档,并理解不同人的理解差异.中文世界Kubernetes非常活跃,不少文档质量超过英文。
但中文搬运转载问题比较严重,需要自己甄别。包括在github很多都是国人在提问。

  • ④ 找到关键知识点

先对大概的框架有认识,找到关键点。

  • ⑤ 由点到面稍稍展开一下

由浅入深的理解,成为专家

  1. 入门:可以使用,知道怎么用,大概做了什么。【如果了解怎么用1就够了】
  2. 初级:粗略理解配置方法。
  3. 高级:理解不同模式的差异,理解为什么要有多种模式,理解配置细节。【深入学习是1,2,3】
  4. 专家级:理解完整的内核协议栈处理数据包的流程,能够举一反三。【领域专家】
  • ⑥ 如何学习云原生技术
    代码驱动

掌控go语言编程能力【会一门编程语言学习很快】

从点到面

学习容器技术【cgroup、namespace;网络协议栈;文件系统】

专注核心掌控全局

深入理解k8s【API定义、控制器模式、核心组件】

大规模生产化

多集群、服务网格和多网络。

  • ⑦ 多视角

不管你是运维还是研发,其实DevOps已经把研发和运维都打通了,边界已经没有那么清晰,云原生一个开发和设计的时候,就要为云做准备。不管你是有无状态如何保证在云上高可用。

  1. 管理员角度【如何构建和运维支持生产化作业的多租户集群、如何应对规模化所带来的挑战】
  2. 研发人员角度【入额将不同类型应用的接入和容器化平台、理解如何保证应用的服务可用性】
  3. 不同角色如何做好协同,避免出现故障。
  • ⑧ 循序渐进的内容深度
  1. Go 语言基础【高级的时候必须要会go语言】。
  2. 从容器技术展开,到 Kubernetes 平台以及衍生项目 Istio 等。
  3. 理解 Kubernetes 作为开放式平台,如何与企业服务进行整合。
  4. 如何进行多集群管理,构建两地三中心的部署模式。
  • ⑨ 环境配置

如果是本机i7,32g内存的话,可以使用虚拟机,如果没有虚拟机就使用云端,干什么事情都要有成本的,最低要求4核12g内存。磁盘30g。

因为墙的问题,可能镜像啦不下来,我会提供镜像仓库来供大家使用。

PS:云原生技术门槛比较高,意味职业的安全性比较高,自我突破的机会,实践出真知,多听,多学,多练。之前的专栏【从0开始学k8s】使用的centos,因为官方一直不支持centos了,这次专栏开始转战Ubuntu 来学习。

云原生的日常的工作,整个DevOps的流程,谈产品的架构,谈需求谈架构,做设计,写代码,写测试用例,搭建CICD的pipline,把你的产品发布到生产环境,走各个环节,各个测试环境,如:功能测试,集成测试,压力测试。各个测试环节走完就部署到生产环境。发布到生产环境,监控,运维,客户支持,bug修复,功能增强基本所有的工作,都要做。推进一个流程就会带来组织的改变,很多时候是不好推,推新技术也是一样,框架层面,别人负责的功能要往底层拉,DevOps可能伤害运维的权益,职责的变更,会有一些利益在里面,很可能这些变化导致一个部门搞没了,非常可能,有些时候很难推动的。webhook如何开发,控制器如何开发,CNI代码的分享,原理讲清楚。