第一堂“云原生”课
本節課程要點
為什么要開設云原生技術公開課?
云原生技術發展簡史
首先從第一個問題進行分享,那就是“為什么要開設云原生技術公開課?”云原生、CNCF 都是目前非常熱門的關鍵詞,但是這些技術并不是非常新鮮的內容。
- 2004 年— 2007 年,Google 已在內部大規模地使用像 Cgroups 這樣的容器技術;
- 2008 年,Google 將 Cgroups 合并進入了 Linux 內核主干;
- 2013 年,Docker 項目正式發布。
- 2014 年,Kubernetes 項目也正式發布。這樣的原因也非常容易理解,因為有了容器和 Docker 之后,就需要有一種方式去幫助大家方便、快速、優雅地管理這些容器,這就是 Kubernetes 項目的初衷。在 Google 和 Redhat 發布了 Kubernetes 之后,這個項目的發展速度非常之快。
- 2015 年,由Google、Redhat 以及微軟等大型云計算廠商以及一些開源公司共同牽頭成立了 CNCF 云原生基金會。CNCF 成立之初,就有 22 個創始會員,而且 Kubernetes 也成為了 CNCF 托管的第一個開源項目。在這之后,CNCF 的發展速度非常迅猛;
- 2017 年,CNCF 達到 170 個成員和 14 個基金項目;
- 2018 年,CNCF 成立三周年有了 195 個成員,19 個基金會項目和 11 個孵化項目,如此之快的發展速度在整個云計算領域都是非常罕見的。
云原生技術生態現狀
因此,如今我們所討論的云原生技術生態是一個龐大的技術集合。CNCF 有一張云原生全景圖(https://github.com/cncf/landscape),在這個全景圖里已經有 200 多個項目和產品了,這些項目和產品也都是和 CNCF 的觀點所契合的。所以如果以這張全景圖作為背景,加以思考就會發現,我們今天所討論的云原生其實主要談論了以下幾點:
我們正處于時代的關鍵節點
2019 年正是云原生時代的關鍵節點,為什么這么說?我們這里就為大家簡單梳理一下。
從 2013 年 Docker 項目發布開始說起,Docker 項目的發布使得全操作系統語義的沙盒技術唾手可得,使得用戶能夠更好地、更完整地打包自己的應用,使得開發者可以輕而易舉的獲得了一個應用的最小可運行單位,而不需要依賴任何 PaaS 能力。這對經典 PaaS 產業其實是一個“降維打擊”。
2014 年的時候,Kubernetes 項目發布,其意義在于 Google 將內部的 Borg/Omega 系統思想借助開源社區實現了“重生”,并且提出了“容器設計模式”的思想。而 Google 之所以選擇間接開源 Kubernetes 而不是直接開源 Borg 項目,其實背后的原因也比較容易理解:Borg/Omega 這樣的系統太復雜了,是沒辦法提供給 Google 之外的人使用,但是 Borg/Omega 這樣的設計思想卻可以借助 Kubernetes 讓大家接觸到,這也是開源 Kubernetes 的重要背景。
這樣到了 2015 年到 2016 年,就到了容器編排“三國爭霸”的時代,當時 Docker、Swarm、Mesos、Kubernetes 都在容器編排領域展開角逐,他們競爭的原因其實也比較容易理解, 那就是 Docker 或者容器本身的價值雖然大,但是如果想要讓其產生商業價值或者說對云的價值,那么就一定需要在編排上面占據一個有利的位置。
Swarm 和 Mesos 的特點,那就是各自只在生態和技術方面比較強,其中,Swarm 更偏向于生態,而 Mesos 技術更強一些。相比之下, Kubernetes 則兼具了兩者優勢,最終在 2017 年“三國爭霸”的局面中得以勝出,成為了當時直到現在的容器編排標準。這一過程的代表性事件就是 Docker 公司宣布在核心產品中內置了 Kubernetes 服務,并且 Swarm 項目逐漸停止維護。
到了 2018 年的時候,云原生技術理念開始逐漸萌芽,這是因為此時 Kubernetes 以及容器都成為了云廠商的既定標準,以“云”為核心的軟件研發思想逐步形成。
而到了 2019 年,情況似乎又將發生一些變化。
2019 年——云原生技術普及元年
為什么說 2019 年很可能是一個關鍵節點呢?我們認為 2019 年是云原生技術的普及元年。
首先大家可以看到,在 2019 年,阿里巴巴宣布要全面上云,而且“上云就要上云原生”。我們還可以看到,以“云”為核心的軟件研發思想,正逐步成為所有開發者的默認選項。像 Kubernetes 等云原生技術正在成為技術人員的必修課,大量的工作崗位正在涌現出來。
這種背景下,“會 Kubernetes”已經遠遠不夠了,“懂 Kubernetes”、“會云原生架構”的重要性正日益凸顯出來。 從 2019 年開始,云原生技術將會大規模普及,這也是為什么大家都要在這個時間點上學習和投資云原生技術的重要原因。
“云原生技術公開課”是一門怎樣的課程?
基于上面所提到的技術趨勢,所以阿里巴巴和 CNCF 聯合開設了云原生技術公開課。
那么這樣的公開課到底在講什么內容呢?
公開課教學大綱
第一期云原生公開課的教學大綱,主要以應用容器和 Kubernetes 為核心,在后面幾期將會陸續上線 Service Mesh、Serverless 等相關課程。
在第一期公開課中,我們首先將課程分為兩部分——基礎知識部分和進階知識部分:
- 首先,我們希望通過第一部分的課程講解幫助大家夯實基礎。然后,對于更高階的內容展開更深入的代碼級別的剖析。希望通過這樣循序漸進的方式幫助大家學習云原生技術;
- 其次,在每個課程后面我們的講師都會設置對應的課后自測考試題,這些考試題實際上是對本節課程最有效的歸納,我們希望能夠通過課后評測的方式來幫助大家總結知識點,打造出屬于自己的云原生知識體系;
- 最后,我們的講師在每個知識點的背后都設計了云端實踐,所謂“實踐出真知”,學習計算機相關的知識還是需要上手來實際地進行操作才可以。 因此在云端實踐部分,講師會提供詳細的實踐步驟供大家課后自我聯系。并且在這個環節,阿里云還會贈送了定量的阿里云代金券幫助大家更好地在云上進行實踐。
以上三個部分就構成了阿里云和 CNCF 聯合推出的云原生技術公開課的教學內容。
公開課授課計劃
在授課計劃方面,初步這樣安排:第一堂課在 2019 年 9 月上線,此后將會每周更新2節課,總共 29 個課時。每個知識點后面都提供了課后自測。
對于講師陣容而言,也是本次公開課最引以為傲的部分。我們的公開課將會主要由 CNCF 社區資深成員與項目維護者為大家講解,很多課程講師都是阿里云容器平臺團隊的專家級工程師。同時,我們也會邀請云原生社區的資深專家和外部講師為大家講解部分內容。因此在課程進行過程中,我們會不定期地安排大咖直播、課程答疑和落地實踐案例。
我們希望將這些內容都集成在一起,為大家呈現一個中國最完整、最權威、最具有影響力的云原生技術公開課。
課程預備知識
大家可能存在這樣的疑惑,就是想要學習云原生基礎知識之前需要哪些預備知識呢?其實大致需要三部分預備知識:
什么是“云原生”?云原生該怎么落地?
在介紹完課程之后,我們再來詳細的聊一聊“云原生”:什么是“云原生”?云原生該怎么落地?這兩個問題也是整個課程的核心內容。
云原生的定義
很多人都會問“到底什么是云原生?”
實際上,云原生是一條最佳路徑或者最佳實踐。更詳細的說,云原生為用戶指定了一條低心智負擔的、敏捷的、能夠以可擴展、可復制的方式最大化地利用云的能力、發揮云的價值的最佳路徑。
因此,云原生其實是一套指導進行軟件架構設計的思想。按照這樣的思想而設計出來的軟件:首先,天然就“生在云上,長在云上”;其次,能夠最大化地發揮云的能力,使得我們開發的軟件和“云”能夠天然地集成在一起,發揮出“云”的最大價值。
所以,云原生的最大價值和愿景,就是認為未來的軟件,會從誕生起就生長在云上,并且遵循一種新的軟件開發、發布和運維模式,從而使得軟件能夠最大化地發揮云的能力。說到了這里,大家可以思考一下為什么容器技術具有革命性?
其實,容器技術和集裝箱技術的革命性非常類似,即:容器技術使得應用具有了一種“自包含”的定義方式。所以,這樣的應用才能以敏捷的、以可擴展可復制的方式發布在云上,發揮出云的能力。這也就是容器技術對云發揮出的革命性影響所在,所以說,容器技術正是云原生技術的核心底盤。
云原生的技術范疇
云原生的技術范疇包括了以下幾個方面:
- 第一部分是云應用定義與開發流程。這包括應用定義與鏡像制作、配置 CI/CD、消息和 Streaming 以及數據庫等。
- 第二部分是云應用的編排與管理流程。這也是 Kubernetes 比較關注的一部分,包括了應用編排與調度、服務發現治理、遠程調用、API 網關以及 Service Mesh。
- 第三部分是監控與可觀測性。這部分所強調的是云上應用如何進行監控、日志收集、Tracing 以及在云上如何實現破壞性測試,也就是混沌工程的概念。
- 第四部分就是云原生的底層技術,比如容器運行時、云原生存儲技術、云原生網絡技術等。
- 第五部分是云原生工具集,在前面的這些核心技術點之上,還有很多配套的生態或者周邊的工具需要使用,比如流程自動化與配置管理、容器鏡像倉庫、云原生安全技術以及云端密碼管理等。
- 最后則是 Serverless。Serverless 是一種 PaaS 的特殊形態,它定義了一種更為“極端抽象”的應用編寫方式,包含了 FaaS 和 BaaS 這樣的概念。而無論是 FaaS 還是 BaaS,其最為典型的特點就是按實際使用計費(Pay as you go),因此 Serverless 計費也是重要的知識和概念。
云原生思想的兩個理論
在了解完云原生的技術范疇之后你就會發現,其所包含的技術內容還是很多的,但是這些內容的技術本質卻是類似的。云原生技術的本質是兩個理論基礎。
- 第一個理論基礎是:不可變基礎設施。這一點目前是通過容器鏡像來實現的,其含義就是應用的基礎設施應該是不可變的,是一個自包含、自描述可以完全在不同環境中遷移的東西;
- 第二個理論基礎就是:云應用編排理論。當前的實現方式就是 Google 所提出來的“容器設計模式”,這也是本系列課程中的 Kubernetes 部分所需主要講解的內容。
基礎設施向云演進的過程
首先為大家介紹一下“不可變基礎設施”的概念。其實,應用所依賴的基礎設施也在經歷一個向云演進的過程,舉例而言,對于傳統的應用基礎設施而言,其實往往是可變的。
大家可能經常會干這樣一件事情,比如需要發布或者更新一個軟件,那么流程大致是這樣的,先通過 SSH 連到服務器,然后手動升級或者降級軟件包,逐個調整服務器上的配置文件,并且將新代碼直接都部署到現有服務器上。因此,這套基礎設施會不斷地被調整和修改。
但是在云上,對“云”友好的應用基礎設施是不可變的。
這種場景下的上述更新過程會這么做:一旦應用部署完成之后,那么這套應用基礎設施就不會再修改了。如果需要更新,那么需要現更改公共鏡像來構建新服務直接替換舊服務。而我們之所以能夠實現直接替換,就是因為容器提供了自包含的環境(包含應用運行所需的所有依賴)。所以對于應用而言,完全不需要關心容器發生了什么變化,只需要把容器鏡像本身修改掉就可以了。因此,對于云友好的基礎設施是隨時可以替換和更換的,這就是因為容器具有敏捷和一致性的能力,也就是云時代的應用基礎設施。
所以,總結而言,云時代的基礎設施就像是可以替代的“牲口”,可以隨時替換;而傳統的基礎設施則是獨一無二的“寵物”,需要細心呵護,這就體現出了云時代不可變基礎設施的優點。
基礎設施向云演進的意義
所以,像這樣的基礎設施向“不可變”演進的過程,為我們提供了兩個非常重要的優點。
1、基礎設施的一致性和可靠性。同樣一個鏡像,無論是在美國打開,在中國打開,還是在印度打開都是一樣的。并且其中的 OS 環境對于應用而言都是一致的。而對于應用而言,它就不需要關心容器跑在哪里,這就是基礎設施一致性非常重要的一個特征。
2、這樣的鏡像本身就是自包含的,其包含了應用運行所需要的所有依賴,因此也可以漂移到云上的任何一個位置。
此外,云原生的基礎設施還提供了簡單、可預測的部署和運維能力。由于現在有了鏡像,應用還是自描述的,通過鏡像運行起來的整個容器其實可以像 Kubernetes 的 Operator 技術一樣將其做成自運維的,所以整個應用本身都是自包含的行為,使得其能夠遷移到云上任何一個位置。這也使得整個流程的自動化變得非常容易。
應用本身也可以更好地擴容,從 1 個實例變成 100 個實例,進而變成 1 萬個實例,這個過程對于容器化后的應用沒有任何特殊的。最后,我們這時也能夠通過不可變的基礎設施來地快速周圍的管控系統和支撐組件。因為,這些組件本身也是容器化的,是符合不可變基礎設施這樣一套理論的組件。
以上就是不可變基礎設施為用戶帶來的最大的優點。
云原生關鍵技術點
當我們回過頭來看云原生關鍵技術點或者說它所依賴的技術理論的時候,可以看到主要有這樣的四個方向:
這四個云原生關鍵技術點是落地實現云原生技術的四個主要途徑,而這四個技術點也是本門課程的 17 個技術點所主要講述的核心知識。
本節總結
- “云原生”具備著重要的意義,它是云時代技術人自我提升的必備路徑;
- “云原生”定義了一條云時代應用從開發到交付的最佳路徑;
- “云原生”應用生在云上,長在云上,希望能夠將云的能力發揮到極致。
講師點評
“未來的軟件一定是生長于云上的”這是云原生理念的最核心假設。而所謂“云原生”,實際上就是在定義一條能夠讓應用最大程度利用云的能力、發揮云的價值的最佳路徑。在這條路徑上,脫離了“應用”這個載體,“云原生”就無從談起;容器技術,則是將這個理念落地、將軟件交付的革命持續進行下去的重要手段之一。
而本期云原生公開課重點講解的 Kubernetes 項目,則是整個“云原生”理念落地的核心與關鍵所在。它正在迅速成為連通“云”與“應用”的高速公路,以標準、高效的方式將“應用”快速交付到世界上任何一個位置。如今”云原生應用交付“,已經成為了 2019 年云計算市場上最熱門的技術關鍵詞之一。希望學習課程的同學們能夠學以致用,持續關注以 K8s 為基礎進行“云原生應用管理與交付”的技術趨勢。
總結
- 上一篇: 端应用研发进入云原生时代
- 下一篇: Kubernetes 核心概念