本節課程要點
- 雲原生技術發展曆程(為什麼要學習這門課)
- 課程簡介與預備知識(這門課到底教什麼)
- 雲原生的定義與技術要點(本節正式内容)
為什麼要開設雲原生技術公開課?
雲原生技術發展簡史
首先從第一個問題進行分享,那就是“為什麼要開設雲原生技術公開課?”雲原生、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 的觀點所契合的。是以如果以這張全景圖作為背景,加以思考就會發現,我們今天所讨論的雲原生其實主要談論了以下幾點:
- 雲原生基金會 —— CNCF;
- 雲原生技術社群,比如像 CNCF 目前正式托管的 20 多個項目共同構成了現代雲計算生态的基石,其中像 Kubernetes 這樣的項目已經成為了世界第四活躍的開源項目;
- 除了前面兩點之外,現在全球各大公有雲廠商都已經支援了 Kubernetes。此外,還有 100 多家技術創業公司也在持續地進行投入。現在阿裡巴巴也在談全面上雲,而且上雲就要上雲原生,這也是各大技術公司擁抱雲原生的一個例子。
我們正處于時代的關鍵節點
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 社群資深成員與項目維護者為大家講解,很多課程講師都是阿裡雲容器平台團隊的專家級工程師。同時,我們也會邀請雲原生社群的資深專家和外部講師為大家講解部分内容。是以在課程進行過程中,我們會不定期地安排大咖直播、課程答疑和落地實踐案例。
我們希望将這些内容都內建在一起,為大家呈現一個中國最完整、最權威、最具有影響力的雲原生技術公開課。
課程預備知識
大家可能存在這樣的疑惑,就是想要學習雲原生基礎知識之前需要哪些預備知識呢?其實大緻需要三部分預備知識:
- Linux 作業系統知識:主要是一些通識性的基礎,最好具有一定的在 Linux 下開發的經驗;
- 計算機和程式設計的基礎:這一點到入門工程師或者高年級大學生水準就足夠了;
- 容器的使用基礎:希望大家具有容器的簡單使用經驗,比如 docker run 以及 docker build 等,最好有一定 Docker 化應用開發的經驗。當然,我們在課程中也會講解相關的基礎知識。
什麼是“雲原生”?雲原生該怎麼落地?
在介紹完課程之後,我們再來詳細的聊一聊“雲原生”:什麼是“雲原生”?雲原生該怎麼落地?這兩個問題也是整個課程的核心内容。
雲原生的定義
很多人都會問“到底什麼是雲原生?”
實際上,雲原生是一條最佳路徑或者最佳實踐。更詳細的說,雲原生為使用者指定了一條低心智負擔的、靈活的、能夠以可擴充、可複制的方式最大化地利用雲的能力、發揮雲的價值的最佳路徑。
是以,雲原生其實是一套指導進行軟體架構設計的思想。按照這樣的思想而設計出來的軟體:首先,天然就“生在雲上,長在雲上”;其次,能夠最大化地發揮雲的能力,使得我們開發的軟體和“雲”能夠天然地內建在一起,發揮出“雲”的最大價值。
是以,雲原生的最大價值和願景,就是認為未來的軟體,會從誕生起就生長在雲上,并且遵循一種新的軟體開發、釋出和運維模式,進而使得軟體能夠最大化地發揮雲的能力。說到了這裡,大家可以思考一下為什麼容器技術具有革命性?
其實,容器技術和集裝箱技術的革命性非常類似,即:容器技術使得應用具有了一種“自包含”的定義方式。是以,這樣的應用才能以靈活的、以可擴充可複制的方式釋出在雲上,發揮出雲的能力。這也就是容器技術對雲發揮出的革命性影響所在,是以說,容器技術正是雲原生技術的核心底盤。
雲原生的技術範疇
雲原生的技術範疇包括了以下幾個方面:
- 第一部分是雲應用定義與開發流程。這包括應用定義與鏡像制作、配置 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 為基礎進行“雲原生應用管理與傳遞”的技術趨勢。