在本文中,咱們將簡要敘述這些革命的歷史和重要性,並探討這些變化如何影響咱們全部部署和運行軟件的方式。咱們將概述雲本機的含義,以及若是您從事軟件開發,運營,部署,工程,網絡或安全工做,您能夠在這個新世界中看到哪些變化。數據庫
因爲這些相互關聯的革命的影響,咱們認爲計算的將來在於基於雲的容器化分佈式系統,由Kubernetes平臺(或很是相似的東西)經過自動化動態管理。開發和運行這些應用程序的技術 - 雲原生DevOps - 是咱們將在本文其他部分探討的內容。安全
若是您已經熟悉全部這些背景材料,而且您只想開始享受Kubernetes的樂趣,請舒服地安頓下來,喝一杯最喜歡的飲料,咱們會開始的。服務器
雲的核心思想是:購買計算而不是購買計算機。 也就是說,不是將大量資金投入到難以擴展的物理機械中,且機械地分解,而且迅速變得過期,您只需在別人的計算機上花時間,讓他們負責擴展,維護和升級。 在裸機的時代 - 「鐵器時代」,若是你喜歡 - 計算能力是一筆資本支出。 這是一項運營費用。網絡
在DevOps以前,開發和運行軟件本質上是兩個獨立的工做,由兩個不一樣的人羣執行。 開發人員編寫軟件,而後將其傳遞給操做員,操做人員在生產中運行和維護軟件(也就是說,爲真實用戶提供服務,而不只僅是在測試條件下運行)。 就像須要本身建築物樓層的計算機同樣,這種分離的根源在於上個世紀中葉。 軟件開發是一項很是專業的工做,計算機操做也是如此,二者之間幾乎沒有重疊。架構
雲計算的革命也引起了使用它的人們的另外一場革命:DevOps運動。實際上,這兩個部門的目標和激勵措施徹底不一樣,每每相互衝突(圖1-2)。 開發人員傾向於專一於快速發佈新功能,而運營團隊則關注長期穩定可靠的服務。當雲層出現時,狀況發生了變化。分佈式系統很複雜,互聯網很是龐大。操做系統的技術 - 從故障中恢復,處理超時,平滑升級版本 - 並不與系統的設計,架構和實現分離。分佈式
此外,「系統」再也不僅僅是您的軟件:它包括內部軟件,雲服務,網絡資源,負載平衡器,監控,內容分發網絡,防火牆,DNS等。全部這些事情都密切相關,相互依存。編寫軟件的人必須瞭解它與系統其餘部分的關係,操做系統的人必須瞭解軟件的工做原理或失敗。函數
理解DevOps工具
DevOps偶爾也是一個有爭議的想法,不管是那些堅持認爲它只不過是現有的軟件開發良好實踐標籤的人,仍是那些拒絕在開發和運營之間增強協做的人。DevOps
其實是存在廣泛的誤解:職稱?團隊?方法論?技能?頗具影響力的DevOps做家John Willis已經肯定了DevOps的四個關鍵支柱,他稱之爲文化,自動化,測量和共享(CAMS)。另外一種分解方法是Brian Dawson稱之爲DevOps三位一體:人與文化,流程與實踐,工具與技術。單元測試
基礎設施代碼學習
曾幾什麼時候,開發人員處理軟件,而運營團隊則處理硬件和在該硬件上運行的操做系統。如今硬件在雲中,從某種意義上說,一切都是軟件。 DevOps運動爲操做帶來了軟件開發技能:工具和工做流程,用於快速,靈活,協做地構建複雜系統。與DevOps密不可分的是基礎設施做爲代碼的概念。雲計算基礎設施能夠由軟件自動配置,而不是對計算機和交換機進行物理架設和佈線。操做工程師已經成爲編寫自動化雲的軟件的人,而不是手動部署和升級硬件。交通不只僅是單向的。開發人員正在向運營團隊學習如何預測分佈式,基於雲的系統中固有的故障和問題,如何減輕其後果,以及如何設計降級優雅且安全性低的軟件。
雲的大規模擴展以及DevOps運動的以代碼爲中心的協做性質已將運營轉變爲軟件問題。 與此同時,他們也將軟件轉變爲操做問題,全部這些都引起了如下問題:如何在不一樣服務器架構和操做系統的大型,多樣化網絡中部署和升級軟件?如何使用基本標準化的組件以可靠且可重現的方式部署到分佈式環境?