天天看點

什麼是雲原生,講述如何學習

作者:IT人故事會
雲原生從字面意思上來看可以分成雲和原生兩個部分。雲是和本地相對的,傳統的應用必須跑在本地伺服器上,現在流行的應用都跑在雲端,雲包含了IaaS,、PaaS和SaaS。原生就是土生土長的意思,我們在開始設計應用的時候就考慮到應用将來是運作雲環境裡面的,要充分利用雲資源的優點,比如️雲服務的彈性和分布式優勢。
什麼是雲原生,講述如何學習

什麼是雲原生(一)

  • ① 介紹
在包括公有雲,私有雲,混合雲等動态環境的建構和子產品應用的能力。
雲是把計算資源抽象出來,當使用者使用雲的時候,不需要關心底層硬體的細節,告訴雲平台,需要跑多少個應用執行個體,要多少資源。
雲原生是雲的資源,衍生而來的,一種思想【類似靈活開發是一種思想】,是技術、企業管理方法的集合。看雲看兩個層面,一個是雲的提供商,回顧openStack本身就是一個指令,之後的生命周期是沒有辦法控制的。自動化是自己控制的,比如虛拟壞了,虛拟不可用了,很多公司都有自己的pass,需要把這些虛機組織起來,建構高可用的自動化作業,使得這個應用的高可用。
雲原生是鼓勵動态,全自動化的能力,一個虛拟機壞了,在雲原生的技術棧,從雲平台,自動換掉一個新的,整個叢集是不變的。從應用接入的層面因為底層的自動化的支撐,應用接入仍然的高可用的,不受影響。整個技術棧是擁抱動态壞境的,環境随便動,在一定條件下不影響業務,雲原生追求的目标,雲平台本身是支援自動化體系的,在要接入的雲平台,在設計之初而準備。
  • ② 技術層面
  1. 應用程式從設計之初就為在雲上運作而做好準備。
  2. 雲平台基于自動化體系。
  • ③ 流程層面
因為有了雲原生,有了這個動态的環境,有了容器技術。依托容器技術封裝,分發能力,雲原生建構了DevOps平台,CICD更加容易。
  • ④ 基于多種手段
在學習雲原生的時候,其實就是在學習這些技術。
  1. 應用容器化封裝。docker封裝的技術,雖然是linux下的老技術,但是它做了封裝,導緻整個應用的部署和分發方式全部變了。
  2. 服務網格。istio 它本身已經超過了k8s,服務和服務調用應該怎麼走的,一種是走集中式負載均衡,或者springcloud點對點的。服務網格是微服務的創新,服務和服務調用的時候,每個服務之間有個Istio sidecar,本地化的分布部署均衡器,所有的網絡調用都要經過sidecard to sidecard帶來很多可能,可觀察性:日志、名額、鍊路追蹤,從管理和協定上做協定的更新,安全保證,認證授權。 完全由服務網格托管起來了。
  3. 不可變的基礎架構。原來在一個虛拟機裡面,給使用者,使用者登入更改配置,改配置會帶來很多問題,多人修改,沒有人能說明,到底該了哪些配置,當虛拟機壞了,所有手工的操作是不可追溯的,新的虛拟機換它的節點可能應用無法正常的工作。但是你根本不知道什麼原因。在雲原生因為有了容器化的封裝,講究一個不可變的架構,作業系統是在容器内運作,容器本身有不可變的特性的,當運作容器執行個體壞了,換了一個新的實力,新老執行個體是完全一樣的,應用的替換非常方面。
  4. 聲明式API。以前都是互動方式,你敲完指令,等待結果,指令順序跟執行結果是有關系,無法追溯。聲明式API,把要管理的對象都抽象成一個一個API,API本身是雲原生技術棧練習廠商,變成一個一個标準。将來雲的世界,這些API都是标準,例如管理的節點如何描述,管理的作業如何描述,釋出一個服務怎麼表述,我發一個指令給k8s,k8s都将我設定的指令儲存起來了。任何的API的調用都可以源代碼存在git上。基礎架構及代碼。一切都是代碼。把所管理的雲原生世界,一切的對象,都當成代碼。代碼的版本放在代碼倉庫裡面,做到可追溯。
  • ⑤ 雲原生的意義
  1. 提升系統的适應性、可管理型、可觀察性。
  2. 使工程師能以最小成本進行頻繁和可預測的系統變更。
  3. 提升速度和效率,主力業務成長,縮短12M(Idea to Market)。
  • ⑥ 雲原生核心項目預覽
雲原生非常的複雜,幾百個項目,太大了,無從下手,下圖選擇了比較重要的元件。
什麼是雲原生,講述如何學習

學習雲原生遇到的挑戰(二)

  • ① 内容太多
非常難的,東西太多了,剛開始可能就是操作幾條指令開始,kebectl,做些基本的操作,把應用跑起來。開始了解API的定義,後面隐藏的東西越來越大,自動化越高的平台,複雜度越大。
學習k8s感覺不難,但是深挖發現裡面的資源越來越大了。目标就是希望能夠挖到深處,真正了解背後的東西,背後去學習一定會有很多的挑戰,可能有部分人沒接觸過容器,對雲本身都不太熟悉,可能感覺到大量的概念。一個一個知識點的吸收,學的時候可能有些東西參不透,在堅持堅持就把握住核心了。雲原生涉及到的知識面很廣,不懂的概念不用急于求成,反複訓練可強化了解。
什麼是雲原生,講述如何學習
  • ② 端正态度
  1. 認真對待工作中的每一個問題:切記不求神界,知其然不知是以然。打破砂鍋問到底。
  2. 問問題的技巧和方法。
  3. 師傅領進門,修行靠個人。
  4. 多看分享,了解他人的所知所想。

*③ 持續學習是個反複的過程

清晰的思路和正确的學習方法,自我驅動非常重要。
  1. What:看官方文檔解決是什麼的問題,先看文檔,在練。
  2. Why:學習領域知識了解
  3. How:按照文檔操作了解如何做;看代碼了解深入了解

雲原生如何學習(三)

  • ① 跟着專欄學習
分享我的學習經驗給大家,少走彎路。
  • ② 官方文檔
看官方文檔,系統地學習。
  • ③ 看看前人是怎麼解讀的

搜中文文檔,知乎,CSDN,簡書都有比較高品質的文章,可以多看一些文檔,并了解不同人的了解差異.中文世界Kubernetes非常活躍,不少文檔品質超過英文。

但中文搬運轉載問題比較嚴重,需要自己甄别。包括在github很多都是國人在提問。

  • ④ 找到關鍵知識點
先對大概的架構有認識,找到關鍵點。
  • ⑤ 由點到面稍稍展開一下
由淺入深的了解,成為專家
  1. 入門:可以使用,知道怎麼用,大概做了什麼。【如果了解怎麼用1就夠了】
  2. 初級:粗略了解配置方法。
  3. 進階:了解不同模式的差異,了解為什麼要有多種模式,了解配置細節。【深入學習是1,2,3】
  4. 專家級:了解完整的核心協定棧處理資料包的流程,能夠舉一反三。【領域專家】
  • ⑥ 如何學習雲原生技術

    代碼驅動

掌控go語言程式設計能力【會一門程式設計語言學習很快】

從點到面

學習容器技術【cgroup、namespace;網絡協定棧;檔案系統】

專注核心掌控全局

深入了解k8s【API定義、控制器模式、核心元件】

大規模生産化

多叢集、服務網格和多網絡。
  • ⑦ 多視角
不管你是運維還是研發,其實DevOps已經把研發和運維都打通了,邊界已經沒有那麼清晰,雲原生一個開發和設計的時候,就要為雲做準備。不管你是有無狀态如何保證在雲上高可用。
  1. 管理者角度【如何建構和運維支援生産化作業的多租戶叢集、如何應對規模化所帶來的挑戰】
  2. 研發人員角度【入額将不同類型應用的接入和容器化平台、了解如何保證應用的服務可用性】
  3. 不同角色如何做好協同,避免出現故障。
  • ⑧ 循序漸進的内容深度
  1. Go 語言基礎【進階的時候必須要會go語言】。
  2. 從容器技術展開,到 Kubernetes 平台以及衍生項目 Istio 等。
  3. 了解 Kubernetes 作為開放式平台,如何與企業服務進行整合。
  4. 如何進行多叢集管理,建構兩地三中心的部署模式。
  • ⑨ 環境配置
如果是本機i7,32g記憶體的話,可以使用虛拟機,如果沒有虛拟機就使用雲端,幹什麼事情都要有成本的,最低要求4核12g記憶體。磁盤30g。
因為牆的問題,可能鏡像啦不下來,我會提供鏡像倉庫來供大家使用。

PS:雲原生技術門檻比較高,意味職業的安全性比較高,自我突破的機會,實踐出真知,多聽,多學,多練。之前的專欄【從0開始學k8s】使用的centos,因為官方一直不支援centos了,這次專欄開始轉戰Ubuntu 來學習。

雲原生的日常的工作,整個DevOps的流程,談産品的架構,談需求談架構,做設計,寫代碼,寫測試用例,搭建CICD的pipline,把你的産品釋出到生産環境,走各個環節,各個測試環境,如:功能測試,內建測試,壓力測試。各個測試環節走完就部署到生産環境。釋出到生産環境,監控,運維,客戶支援,bug修複,功能增強基本所有的工作,都要做。推進一個流程就會帶來組織的改變,很多時候是不好推,推新技術也是一樣,架構層面,别人負責的功能要往底層拉,DevOps可能傷害運維的權益,職責的變更,會有一些利益在裡面,很可能這些變化導緻一個部門搞沒了,非常可能,有些時候很難推動的。webhook如何開發,控制器如何開發,CNI代碼的分享,原理講清楚。

Kubernetes ¥108.8 購買

繼續閱讀