2022年,應(yīng)該如何學(xué)習(xí)云原生?
容器化Docker、Kubernetes...這些云原生的基礎(chǔ)概念早已不再是停留在“有沒有前途”、“該不該學(xué)”、“企業(yè)是否值得投入”等可以左右搖擺的爭論上,而是已成云計(jì)算行業(yè)的事實(shí)標(biāo)準(zhǔn)。隨著云原生逐漸在國內(nèi)企業(yè)的落地,學(xué)習(xí)云原生的需求也日趨突出。今天我們就來盤點(diǎn)一下,2022年應(yīng)該如何學(xué)習(xí)云原生。
1、學(xué)前建議
在網(wǎng)絡(luò)上可以看到很多資料文章,不同的人對(duì)云原生有著不同的理解,甚至不同的企業(yè)還對(duì)云原生給出了自己不同的定義。在學(xué)習(xí)的初期,過于關(guān)注這些不同角度的解讀反而會(huì)讓自己困惑,可以先只粗略了解一下官方的定義:
云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式 API?。這些技術(shù)能夠構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。結(jié)合可靠的自動(dòng)化手段,云原生技術(shù)使工程師能夠輕松地對(duì)系統(tǒng)作出頻繁和可預(yù)測的重大變更。
官方定義基本就囊括了云原生的所有關(guān)鍵技術(shù)和核心點(diǎn),云原生不是指某一項(xiàng)技術(shù)或單個(gè)產(chǎn)品,而是系統(tǒng)化的方法論和技術(shù)的集合。這些關(guān)鍵的技術(shù)和核心點(diǎn)也是系統(tǒng)學(xué)習(xí)云原生最為重要的內(nèi)容。
在學(xué)習(xí)云原生技術(shù)之前,首先需要了解以下幾點(diǎn):
初學(xué)者在學(xué)習(xí)時(shí),看再多云原生的歷史沿革、優(yōu)勢好處以及涉及到哪些技術(shù)方向,聽再多大佬的“夸夸其談”,都不如自己動(dòng)手實(shí)踐,從部署上線幾個(gè)應(yīng)用開始;
云原生是一個(gè)技術(shù)的“時(shí)代”,不是某一個(gè)的職業(yè)或技術(shù)產(chǎn)品,而不同的職業(yè)方向與目的,學(xué)習(xí)的內(nèi)容也會(huì)有很大差異;而其中Docker和Kubernetes是云原生的兩個(gè)核心基礎(chǔ)產(chǎn)品,值得所有方向的技術(shù)人員、工程師及早開始學(xué)習(xí);
網(wǎng)絡(luò)上很多云原生課程雖然都是大廠寶貴的經(jīng)驗(yàn),但是大多數(shù)內(nèi)容都是寫給運(yùn)維工程師和架構(gòu)師看的,不太適合新手學(xué)習(xí),需先掌握基礎(chǔ)后再來進(jìn)階;
2、如何動(dòng)手實(shí)踐
動(dòng)手實(shí)戰(zhàn)時(shí),建議在本地安裝部署好 Docker 環(huán)境、Kubernetes 集群以及使用云服務(wù)商提供的線上托管 Kubernetes(如騰訊云容器服務(wù)TKE、彈性容器服務(wù) EKS)搭配來學(xué)習(xí),這才貼近企業(yè)實(shí)際生產(chǎn)時(shí)的真實(shí)環(huán)境。
盡管也有一些不錯(cuò)的線上實(shí)驗(yàn)室,如 Katacoda、play-with-k8s,這些更加建議大家把這些網(wǎng)站涉及的案例給“移植”到自己的學(xué)習(xí)環(huán)境中。
可以先從 Docker 開始學(xué)起,Docker 是一個(gè)非常容易呈現(xiàn)效果和結(jié)果的工具,在粗略了解了容器、鏡像和鏡像倉庫的情況下,只需要幾行命令就能啟動(dòng)一些“看得見”的應(yīng)用程序。Docker的核心思想就是如何將應(yīng)用整合到容器中,并且能在容器中實(shí)際運(yùn)行。這個(gè)整合并運(yùn)行的過程就是“容器化”。容器化主要分為以下幾個(gè)步驟:
編寫應(yīng)用的代碼,應(yīng)用要能在本地環(huán)境正常運(yùn)行;
創(chuàng)建一個(gè) Dockerfile ,Dockerfile 要包含當(dāng)前應(yīng)用的描述、依賴以及該如何運(yùn)行這個(gè)應(yīng)用;比如基礎(chǔ)的base環(huán)境,系統(tǒng)組件的安裝(如apk add, apt install等)、應(yīng)用代碼的拷貝、業(yè)務(wù)系統(tǒng)依賴的安裝(php composer, npm install 等)、分層、stage構(gòu)建等;
對(duì)Dockerfile執(zhí)行
docker build
命令將項(xiàng)目源代碼打包成鏡像;將鏡像分發(fā)到容器鏡像服務(wù),如?hub.docker.com?或使用騰訊云鏡像服務(wù)等;
云原生中最為重要的產(chǎn)品就是 Kubernetes ,簡稱 K8s,因此我們學(xué)習(xí)的核心也是K8s。如果說傳統(tǒng)云計(jì)算時(shí)期的操作系統(tǒng)是 Linux,那云原生時(shí)代的操作系統(tǒng)就是 K8s 。
Kubernetes入門動(dòng)手實(shí)踐基本遵循以下流程,Kubernetes官方技術(shù)文檔的【教程】(https://kubernetes.io/zh/docs/tutorials/)部分就有這些基礎(chǔ)步驟的講解:
創(chuàng)建本地集群和托管集群
使用 kubectl 來創(chuàng)建Depoyment部署應(yīng)用
學(xué)會(huì)查看 pod 和工作節(jié)點(diǎn)
使用 Service 公開地暴露你的應(yīng)用
使用 Kubectl 實(shí)現(xiàn)應(yīng)用的擴(kuò)縮容
使用 kubectl 執(zhí)行滾動(dòng)更新
使用 ConfigMaps、Secrets 實(shí)現(xiàn)外部化應(yīng)用配置
了解有狀態(tài)應(yīng)用程序和無狀態(tài)應(yīng)用程序
了解如何限制容器對(duì)資源的訪問和系統(tǒng)的調(diào)用
盡管 Docker 和 Kubernetes 官方技術(shù)文檔是一個(gè)不錯(cuò)的入門教程,但是仍然存在很多新手不可避免的一些“坑”,讓原本簡單且有意思的動(dòng)手變得艱難,有的人甚至連安裝配置環(huán)境就阻力重重。
為此騰訊云【燎原社】推出了一套學(xué)習(xí)門檻更低、步驟性更強(qiáng)、內(nèi)容更為詳細(xì)且更加適合國內(nèi)用戶學(xué)習(xí)的云原生技術(shù)工坊,旨在幫助更多對(duì)云原生技術(shù)感興趣的開發(fā)者快速且系統(tǒng)的掌握Docker與Kubernetes。
作為一款入門課程,對(duì)初學(xué)者非常友好,不僅免費(fèi),還配有專門的學(xué)習(xí)交流群,群內(nèi)學(xué)員打卡分享,氛圍超棒!
詳情可戳鏈接:?騰訊云燎原社技術(shù)工坊
3、詳讀K8s官方技術(shù)文檔
無疑,官方技術(shù)文檔是最為重要的學(xué)習(xí)參考資料,其中比較重要的是比較側(cè)重于原理描述的【概念(concepts)】部分和比較側(cè)重于案例實(shí)戰(zhàn)部署的【任務(wù)tasks】部分。
值得一提的是,技術(shù)文檔不像教程,它沒有按照重要程度和難易程度排序,同時(shí)有些內(nèi)容可能在你工作中并不會(huì)用到,所以要有側(cè)重點(diǎn)地去學(xué)習(xí)。學(xué)習(xí)時(shí)可以先從【任務(wù)tasks】部分的實(shí)戰(zhàn)案例入手,比如【運(yùn)行應(yīng)用】、【配置Pods和容器】、【管理Kubernetes對(duì)象】、【給應(yīng)用注入數(shù)據(jù)】、【訪問集群中的應(yīng)用】、【管理Secrets】等章節(jié)的案例都值得動(dòng)手實(shí)戰(zhàn)一下。
在實(shí)戰(zhàn)的過程中,再去理解【概念(concepts)】部分關(guān)于架構(gòu)、概念等的描述,就不會(huì)顯得那么晦澀了。尤其是【概念(concepts)】關(guān)于Kubernetes架構(gòu),容器,工作負(fù)載,服務(wù)、負(fù)載均衡和聯(lián)網(wǎng),存儲(chǔ),配置,安全,策略,調(diào)度、搶占和驅(qū)逐等相關(guān)的內(nèi)容。
在這個(gè)階段的學(xué)習(xí)中,要熟悉掌握使用配置文件對(duì)各種Kubernetes資源對(duì)象進(jìn)行聲明式管理,并能部署并運(yùn)行多種類型的應(yīng)用程序(工作負(fù)載)。
4、最佳實(shí)踐與云原生核心技術(shù)
云原生最終還是要應(yīng)用到企業(yè)的生產(chǎn)實(shí)踐當(dāng)中,為企業(yè)的降本增效助力,這里有一份云原生在企業(yè)落地的路徑圖,詳細(xì)列出了每個(gè)階段的核心要點(diǎn)以及涉及到的一些云原生技術(shù)產(chǎn)品,因此對(duì)云原生的系統(tǒng)學(xué)習(xí),也不能只停留在Docker和Kubernetes上:

1、容器化;
2、CI/CD;
3、容器編排與應(yīng)用部署;
4、可觀測與分析
5、代理,服務(wù)發(fā)現(xiàn)與服務(wù)網(wǎng)格
6、網(wǎng)絡(luò)、網(wǎng)絡(luò)策略與安全
7、分布式數(shù)據(jù)庫與存儲(chǔ)
8、流式數(shù)據(jù)與消息
9、容器倉庫與運(yùn)行時(shí)
10、應(yīng)用分發(fā)
這份云原生企業(yè)落地路徑圖,基本囊括了以“云原生應(yīng)用為中心”的云原生比較關(guān)鍵的技術(shù)領(lǐng)域,而這些都在CNCF對(duì)云原生應(yīng)用的定義里有所概括:
云原生應(yīng)用的DevOps,包括鏡像打包、配置、CI/CD、流式數(shù)據(jù)與消息、存儲(chǔ)以及數(shù)據(jù)庫等;
云原生應(yīng)用的編排與管理,包括了應(yīng)用編排與調(diào)度、服務(wù)發(fā)現(xiàn)治理、遠(yuǎn)程調(diào)用、API網(wǎng)關(guān)以及服務(wù)網(wǎng)格;
云原生應(yīng)用的監(jiān)控與可觀測性,比如云原生應(yīng)用的狀態(tài)監(jiān)控、日志收集、鏈路追蹤以及混沌工程;
云原生的底層技術(shù),比如容器運(yùn)行時(shí)、云原生存儲(chǔ)技術(shù)、云原生網(wǎng)絡(luò)技術(shù)、云原生安全等。
云原生組件,云原生有著非常豐富的技術(shù)產(chǎn)品生態(tài),比如Helm、etcd、Cilium、Prometheus等。
這些環(huán)節(jié)環(huán)環(huán)相扣,而且每一個(gè)環(huán)節(jié)都涉及到大量企業(yè)最佳實(shí)踐方面的知識(shí),而這些重要的知識(shí)相對(duì)來說就零散很多,比如各大云服務(wù)商提供的官方技術(shù)文檔、大廠高級(jí)工程師撰寫的技術(shù)文章里(比如可以關(guān)注“騰訊云原生”公眾號(hào)),或者一些云原生大會(huì)上。
騰訊云【燎原社】還推出了為期3天的線下【云原生技術(shù)實(shí)戰(zhàn)營】,騰訊云技術(shù)專家團(tuán)隊(duì)會(huì)面對(duì)面傾囊相授一線云原生實(shí)戰(zhàn)經(jīng)驗(yàn),手把手教你業(yè)務(wù)容器化改造的“最佳實(shí)踐”,參與者不僅可以和社區(qū)各領(lǐng)域程序員一起進(jìn)步,還能與騰訊資深架構(gòu)師、產(chǎn)品持續(xù)交流。
詳情可戳鏈接:騰訊云燎原社云原生技術(shù)實(shí)戰(zhàn)營

5、CNCF
要系統(tǒng)了解云原生的一些開源產(chǎn)品,就不得不提到云原生基金會(huì)CNCF。CNCF列出了一份云原生相關(guān)領(lǐng)域的全景圖,詳細(xì)列出了應(yīng)用部署與鏡像打包、容器的調(diào)度與編排、RPC、服務(wù)治理、存儲(chǔ)與數(shù)據(jù)庫等等相關(guān)領(lǐng)域的開源技術(shù)產(chǎn)品,可以給我們進(jìn)一步學(xué)習(xí)指明方向。

6、云原生的不同方向與參考書籍
前面已經(jīng)說過,不同職業(yè)方向需要掌握的內(nèi)容存在比較大的差異,云原生基本可以分為云原生運(yùn)維與安全(運(yùn)維工程師)、云原生開發(fā)工程師(Golang)、云原生架構(gòu)師、云原生應(yīng)用開發(fā)(廣大程序員)等方向。
在掌握了大致掌握和了解了關(guān)于Docker和Kubernetes相關(guān)內(nèi)容的情況下,不同的職業(yè)方向還可以閱讀一下以下書籍作為參考。推薦的書大多都是計(jì)算機(jī)行業(yè)比較推崇的O'reilly和Manning出品的。
1、云原生運(yùn)維與架構(gòu)
云原生運(yùn)維與架構(gòu)主要聚焦于云原生系統(tǒng)的設(shè)計(jì)與交付,通過監(jiān)控統(tǒng)計(jì)、自動(dòng)化等方式維護(hù)系統(tǒng)的高并發(fā)、高可用、可伸縮性、安全性等。云原生運(yùn)維有著一些全新的工具和方法論,比較明顯地提高了傳統(tǒng)運(yùn)維的技術(shù)門檻,也對(duì)傳統(tǒng)架構(gòu)提出了新的挑戰(zhàn)。
除了需要關(guān)注Prometheus、etcd、istio、Terraform等產(chǎn)品的技術(shù)文檔以及實(shí)踐外,比較推薦的書籍如下:
《基于Kubernetes的云原生DevOps》
《Kubernetes in Action》
《云原生模式》
《Kubernetes設(shè)計(jì)模式》(Kubernetes Patterns)
《Terraform:多云、混合云環(huán)境下實(shí)現(xiàn)基礎(chǔ)設(shè)施即代碼(第2版)》
SRE還可以閱讀一下運(yùn)維之道、運(yùn)維解密、工作手冊、生存指南,這幾本書基本都與Google SRE相關(guān)。
2、云原生開發(fā)工程師(Golang)
云原生開發(fā)工程師除了比較核心的操作系統(tǒng)、網(wǎng)絡(luò)相關(guān)的知識(shí)外,還需要掌握云原生時(shí)代的“C語言”Golang,同時(shí)需要了解Kubernetes編程和源碼相關(guān)的知識(shí)。
《Kubernetes編程》(Programming Kubernetes)
《Kubernetes源碼剖析》
《Kubernetes操作器》(Kubernetes Operators)
3、云原生應(yīng)用開發(fā)
云原生應(yīng)用開發(fā)一般來說主要是廣大程序員的事情,云原生應(yīng)用并不限于某一門編程語言,無論是Java、Python、Golang、PHP、前端開發(fā)等,需要掌握的是Docker與容器化(重點(diǎn))、Kubernetes基礎(chǔ)操作(基本入門就行)、微服務(wù)、GitOps等相關(guān)的內(nèi)容,所學(xué)內(nèi)容其實(shí)并不多,大部分都是交給工具和平臺(tái)來搞定。
《Docker實(shí)戰(zhàn)(第2版)》(Docker in Action),清華大學(xué)出版社
《深入剖析Kubernetes》(其實(shí)這是一本入門的書籍)
《云原生Java》