容器化Docker、Kubernetes...这些云原生的基础概念早已不再是停留在“有没有前途”、“该不该学”、“企业是否值得投入”等可以左右摇摆的争论上,而是已成云计算行业的事实标准。随着云原生逐渐在国内企业的落地,学习云原生的需求也日趋突出。今天我们就来盘点一下,2022年应该如何学习云原生。
1、学前建议
在网络上可以看到很多资料文章,不同的人对云原生有着不同的理解,甚至不同的企业还对云原生给出了自己不同的定义。在学习的初期,过于关注这些不同角度的解读反而会让自己困惑,可以先只粗略了解一下官方的定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API 。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
官方定义基本就囊括了云原生的所有关键技术和核心点,云原生不是指某一项技术或单个产品,而是系统化的方法论和技术的集合。这些关键的技术和核心点也是系统学习云原生最为重要的内容。
在学习云原生技术之前,首先需要了解以下几点:
- 初学者在学习时,看再多云原生的历史沿革、优势好处以及涉及到哪些技术方向,听再多大佬的“夸夸其谈”,都不如自己动手实践,从部署上线几个应用开始;
- 云原生是一个技术的“时代”,不是某一个的职业或技术产品,而不同的职业方向与目的,学习的内容也会有很大差异;而其中Docker和Kubernetes是云原生的两个核心基础产品,值得所有方向的技术人员、工程师及早开始学习;
- 网络上很多云原生课程虽然都是大厂宝贵的经验,但是大多数内容都是写给运维工程师和架构师看的,不太适合新手学习,需先掌握基础后再来进阶;
2、如何动手实践
动手实战时,建议在本地安装部署好 Docker 环境、Kubernetes 集群以及使用云服务商提供的线上托管 Kubernetes(如腾讯云容器服务TKE、弹性容器服务 EKS)搭配来学习,这才贴近企业实际生产时的真实环境。
尽管也有一些不错的线上实验室,如 Katacoda、play-with-k8s,这些更加建议大家把这些网站涉及的案例给“移植”到自己的学习环境中。
可以先从 Docker 开始学起,Docker 是一个非常容易呈现效果和结果的工具,在粗略了解了容器、镜像和镜像仓库的情况下,只需要几行命令就能启动一些“看得见”的应用程序。Docker的核心思想就是如何将应用整合到容器中,并且能在容器中实际运行。这个整合并运行的过程就是“容器化”。容器化主要分为以下几个步骤:
- 编写应用的代码,应用要能在本地环境正常运行;
- 创建一个 Dockerfile ,Dockerfile 要包含当前应用的描述、依赖以及该如何运行这个应用;比如基础的base环境,系统组件的安装(如apk add, apt install等)、应用代码的拷贝、业务系统依赖的安装(php composer, npm install 等)、分层、stage构建等;
- 对Dockerfile执行
docker build
命令将项目源代码打包成镜像; - 将镜像分发到容器镜像服务,如 hub.docker.com 或使用腾讯云镜像服务等;
云原生中最为重要的产品就是 Kubernetes ,简称 K8s,因此我们学习的核心也是K8s。如果说传统云计算时期的操作系统是 Linux,那云原生时代的操作系统就是 K8s 。
Kubernetes入门动手实践基本遵循以下流程,Kubernetes官方技术文档的【教程】(https://kubernetes.io/zh/docs...)部分就有这些基础步骤的讲解:
- 创建本地集群和托管集群
- 使用 kubectl 来创建Depoyment部署应用
- 学会查看 pod 和工作节点
- 使用 Service 公开地暴露你的应用
- 使用 Kubectl 实现应用的扩缩容
- 使用 kubectl 执行滚动更新
- 使用 ConfigMaps、Secrets 实现外部化应用配置
- 了解有状态应用程序和无状态应用程序
- 了解如何限制容器对资源的访问和系统的调用
尽管 Docker 和 Kubernetes 官方技术文档是一个不错的入门教程,但是仍然存在很多新手不可避免的一些“坑”,让原本简单且有意思的动手变得艰难,有的人甚至连安装配置环境就阻力重重。
为此腾讯云【燎原社】推出了一套学习门槛更低、步骤性更强、内容更为详细且更加适合国内用户学习的云原生技术工坊,旨在帮助更多对云原生技术感兴趣的开发者快速且系统的掌握Docker与Kubernetes。
作为一款入门课程,对初学者非常友好,不仅免费,还配有专门的学习交流群,群内学员打卡分享,氛围超棒!
详情可戳链接: 腾讯云燎原社技术工坊
3、详读K8s官方技术文档
无疑,官方技术文档是最为重要的学习参考资料,其中比较重要的是比较侧重于原理描述的【概念(concepts)】部分和比较侧重于案例实战部署的【任务tasks】部分。
值得一提的是,技术文档不像教程,它没有按照重要程度和难易程度排序,同时有些内容可能在你工作中并不会用到,所以要有侧重点地去学习。学习时可以先从【任务tasks】部分的实战案例入手,比如【运行应用】、【配置Pods和容器】、【管理Kubernetes对象】、【给应用注入数据】、【访问集群中的应用】、【管理Secrets】等章节的案例都值得动手实战一下。
在实战的过程中,再去理解【概念(concepts)】部分关于架构、概念等的描述,就不会显得那么晦涩了。尤其是【概念(concepts)】关于Kubernetes架构,容器,工作负载,服务、负载均衡和联网,存储,配置,安全,策略,调度、抢占和驱逐等相关的内容。
在这个阶段的学习中,要熟悉掌握使用配置文件对各种Kubernetes资源对象进行声明式管理,并能部署并运行多种类型的应用程序(工作负载)。
4、最佳实践与云原生核心技术
云原生最终还是要应用到企业的生产实践当中,为企业的降本增效助力,这里有一份云原生在企业落地的路径图,详细列出了每个阶段的核心要点以及涉及到的一些云原生技术产品,因此对云原生的系统学习,也不能只停留在Docker和Kubernetes上:
- 1、容器化;
- 2、CI/CD;
- 3、容器编排与应用部署;
- 4、可观测与分析
- 5、代理,服务发现与服务网格
- 6、网络、网络策略与安全
- 7、分布式数据库与存储
- 8、流式数据与消息
- 9、容器仓库与运行时
- 10、应用分发
这份云原生企业落地路径图,基本囊括了以“云原生应用为中心”的云原生比较关键的技术领域,而这些都在CNCF对云原生应用的定义里有所概括:
- 云原生应用的DevOps,包括镜像打包、配置、CI/CD、流式数据与消息、存储以及数据库等;
- 云原生应用的编排与管理,包括了应用编排与调度、服务发现治理、远程调用、API网关以及服务网格;
- 云原生应用的监控与可观测性,比如云原生应用的状态监控、日志收集、链路追踪以及混沌工程;
- 云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术、云原生安全等。
- 云原生组件,云原生有着非常丰富的技术产品生态,比如Helm、etcd、Cilium、Prometheus等。
这些环节环环相扣,而且每一个环节都涉及到大量企业最佳实践方面的知识,而这些重要的知识相对来说就零散很多,比如各大云服务商提供的官方技术文档、大厂高级工程师撰写的技术文章里(比如可以关注“腾讯云原生”公众号),或者一些云原生大会上。
腾讯云【燎原社】还推出了为期3天的线下【云原生技术实战营】,腾讯云技术专家团队会面对面倾囊相授一线云原生实战经验,手把手教你业务容器化改造的“最佳实践”,参与者不仅可以和社区各领域程序员一起进步,还能与腾讯资深架构师、产品持续交流。
详情可戳链接:腾讯云燎原社云原生技术实战营
5、CNCF
要系统了解云原生的一些开源产品,就不得不提到云原生基金会CNCF。CNCF列出了一份云原生相关领域的全景图,详细列出了应用部署与镜像打包、容器的调度与编排、RPC、服务治理、存储与数据库等等相关领域的开源技术产品,可以给我们进一步学习指明方向。
6、云原生的不同方向与参考书籍
前面已经说过,不同职业方向需要掌握的内容存在比较大的差异,云原生基本可以分为云原生运维与安全(运维工程师)、云原生开发工程师(Golang)、云原生架构师、云原生应用开发(广大程序员)等方向。
在掌握了大致掌握和了解了关于Docker和Kubernetes相关内容的情况下,不同的职业方向还可以阅读一下以下书籍作为参考。推荐的书大多都是计算机行业比较推崇的O'reilly和Manning出品的。
1、云原生运维与架构
云原生运维与架构主要聚焦于云原生系统的设计与交付,通过监控统计、自动化等方式维护系统的高并发、高可用、可伸缩性、安全性等。云原生运维有着一些全新的工具和方法论,比较明显地提高了传统运维的技术门槛,也对传统架构提出了新的挑战。
除了需要关注Prometheus、etcd、istio、Terraform等产品的技术文档以及实践外,比较推荐的书籍如下:
- 《基于Kubernetes的云原生DevOps》
- 《Kubernetes in Action》
- 《云原生模式》
- 《Kubernetes设计模式》(Kubernetes Patterns)
- 《Terraform:多云、混合云环境下实现基础设施即代码(第2版)》
SRE还可以阅读一下运维之道、运维解密、工作手册、生存指南,这几本书基本都与Google SRE相关。
2、云原生开发工程师(Golang)
云原生开发工程师除了比较核心的操作系统、网络相关的知识外,还需要掌握云原生时代的“C语言”Golang,同时需要了解Kubernetes编程和源码相关的知识。
- 《Kubernetes编程》(Programming Kubernetes)
- 《Kubernetes源码剖析》
- 《Kubernetes操作器》(Kubernetes Operators)
3、云原生应用开发
云原生应用开发一般来说主要是广大程序员的事情,云原生应用并不限于某一门编程语言,无论是Java、Python、Golang、PHP、前端开发等,需要掌握的是Docker与容器化(重点)、Kubernetes基础操作(基本入门就行)、微服务、GitOps等相关的内容,所学内容其实并不多,大部分都是交给工具和平台来搞定。
- 《Docker实战(第2版)》(Docker in Action),清华大学出版社
- 《深入剖析Kubernetes》(其实这是一本入门的书籍)
- 《云原生Java》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。