大家好,我是王不错。(欢迎大家关注我的公众号:程序员王不错)
最近有学弟面了一家大厂的云原生部门,面试官给他的评价是计算机基础比较牢固,但是对云原生认识比较浅显。
于是学弟就来私信问我,想要入坑云原生,到底该从哪学起,要学哪些内容,怎么学?
云原生是一个相对来说有一定门槛的技术领域,为了更好地帮助学弟以及想要入坑云原生的小伙伴们,今天王不错就用这一篇文章来总结下,云原生到底是什么?该如何入门呢?
1. 什么是云原生?
在没有云之前,数据都是存储在数据中心的(数据中心可以理解为早期的云)。
传统的数据中心,只具有存储的能力。而现如今,逐步发展为能提供计算、服务、甚至应用功能的新型云。简单来说,云就是计算机组群,云平台就是将分布在各地的大型服务器,通过高速网络连接起来,进行数据资源的存储、计算和处理。
关于云原生的概念,一直在发展变化之中,目前还没有一个确切的定义。回望技术发展之路,无论是机器学习、云计算,还是大数据,技术的创新与变革,一定是思想先行。
云原生并不是一系列技术的组合 ,而是一种构建和运行应用程序的方法,是一套技术体系和方法论。 它的核心是通过优化应用程序的架构设计、开发流程以及部署、运维方式,让云计算的弹性、灵活、自动化优势得以充分发挥,从而使得工程管理和基础设施管理变得更加高效和自治。
2. 云原生的发展历史
2013年,一位来自著名PaaS云服务公司Pivotal公司的程序员Matt Stine率先提出云原生(Cloud Native)概念。
2015年CNCF云原生基金会成立,这个基金会由Google等公司牵头成立。最初它定义云原生为:容器化封装、自动化管理、面向微服务。
2017年10月,Matt Stine将云原生架构定义为六个特性:模块化、可观测性、可部署性、可测试性、可处理性及可替换性。
最新的Pivotal官网将云原生概括为:DevOps、持续交付、微服务以及容器化。
到了2018年,CNCF又更新了云原生的定义,把服务网格(Service Mesh) 和声明式API给加了进来。
可见,不同的人和组织对云原生有不同的定义,相同的人和组织在不同时间点对云原生也有不同的定义。
虽然定义没有统一的标准,但我们学习前应该捋顺思路,因此本文将云原生定义为:云原生 = DevOps + 持续交付 + 微服务 + 容器 + 服务网格 + 声明式API。
总的来说,云原生即采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。
因为云原生的每一部分都很复杂,所以本文并不会详细展开介绍具体的知识,如什么是微服务,容器怎样运行等。入门云原生是一个漫长的过程,本文会总结一个学习路线,帮助大家梳理学习云原生的完整过程。
3. 云原生学习路线
1. 掌握一门编程语言
你可以选择Golang/Java/C++等一门你感兴趣的编程语言,深入学习。目前国内大多云原生部门使用Golang的比较多,推荐~
(关于如何学习Golang,可以继续关注王不错的后续文章— “Go语言的学习路线与学习资源推荐“ ~)
2. 掌握Linux系统的原理与开发
主要是掌握Linux的常用命令、网络管理、文件系统、进程监控、Shell脚本等。
这里推荐 《鸟哥的Linux私房菜(第三版)》 。
3. 掌握必要的计算机基础知识
必要的计算机基础包括:
- 算法与数据结构:推荐《大话数据结构》《算法导论》两本书籍;
- 计算机组成原理:推荐计算机圣经《深入理解计算机系统》;
- 操作系统:推荐《操作系统导论》蕾姆兹的那本;
- 计算机网络:推荐《图解TCP/IP》《网络是怎样连接的》《TCP/IP详解》这几本;
- 软件工程:推荐《软件工程(第四版)》(黑色的或者莎丽著的那两本);
- 分布式、微服务
4. 开发环境编译与部署
可以从基础的 LAMP、LNMP、Wordpress 以及一些比较流行的开源项目的部署上线到云服务入手,掌握 Nginx、Tomcat、Apache等网页服务器、负载均衡,MySQL、Redis数据库和缓存。
这些都是传统运维工程师需要掌握的内容,当然也是云原生运维的基础。
5. 容器技术
-
容器化:Docker
-
容器编排:K8S
Docker 容器化和 Kubernetes 集群可以说是云原生最为重要的基础,学习时也推荐先从动手实践来入手。动手实战时,建议在本地安装部署好 Docker 环境、Kubernetes 集群以及使用云服务商提供的线上托管 Kubernetes(如腾讯云容器产品TKE、EKS)搭配来学习,这才贴近企业实际生产时的真实环境。
6. CI/CD领域,DevOps
CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
CI/CD的核心概念是持续集成、持续交付和持续部署。
DevOps是CI/CD思想的延伸,一种开发和运维。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
7. 基础设施即代码
基础设施即代码(Infrastructure-as-Code,IaC) 意味着使用代码来定义和管理基础设施,而不是使用手动流程。更重要的是,IaC是将软件工程原则和方法引入云基础设施。
(图片看不清的部分:服务网格:Istio)
8. 日志、监控、告警
对于运维而言,保证安全的利器包括日志和监控系统,作为运维人员,需要对于日志、告警、监控有一定的了解。
(图片看不清的部分:日志收集系统:Elastic Stack)
以上内容就是未来想要从事云原生运维需要掌握的基础内容了。在不同的企业,云原生运维可能会细分一些方向,比如DevOps工程师、SRE工程师、平台架构工程师等等,不同的方向需要进阶学习的点会有所不同,需要我们针对岗位JD有侧重点的学习。
好啦,今天的分享就到这里。
我是程序员王不错,如果文章内容有帮助到你,就点个“关注”吧~