容器正在吞噬世界
為了充分利用容器帶來的敏捷性,軟體開發團隊必須調整其軟體交付流程。
容器正迅速成為企業應用打包和部署的基本單位。然而IT部門的很多人仍然認為容器只是接下來的發展方向,相對於VM而言,容器只是會使計算密度又增加一個數量級。
雖然這種認知能意識到容器代表了IT需要管理的事物的另一次爆炸,但是它忽略了容器生態帶來的最重要的改變——即容器使軟體交付流程發生徹底的改變。
在傳統的軟體交付流程中,運維團隊和開發團隊分別負責技術棧的不同層:運維團隊負責作業系統映象,開發團隊負責應用的開發。在這種流程中,開發團隊使用作業系統打包工具(RPM,MSI等等工具)向運維團隊交付應用和應用相關的依賴。然後運維團隊把應用新增到符合公司規範的VM映象中,並且這些VM映象都附帶了監控和日誌軟體,最後組合VM映象並在生產環境中執行。開發團隊通過把新包交給運維團隊來迭代應用程式,運維團隊使用指令碼或者配置管理軟體來部署新版本的應用和其他的一些更新(例如修復作業系統漏洞的補丁)。
基於容器的軟體交付流程是不同的
容器交付流程和之前基於虛擬機器的交付流程是完全不同的。在基於容器的交付流程中,開發團隊和運維團隊合作建立一個由不同層組成的單一容器映象。這些層中最底層是作業系統層,然後是依賴層,最後是應用程式層。最重要的是,容器映象在軟體交付過程中被視為不可變的:容器中涉及的任何軟體變動都需要重新構建整個容器映象。容器技術和Docker映象通過使用聯合檔案系統來構建一個包含應用及其依賴的基礎容器映象,這比VM映象等早期方法更具可操作性;對容器映象每層的更改只需要重新構建該層。這使得每個容器映象重新構建比重新建立一個完整的VM映象代價小得多。此外,擁有良好架構的容器只會執行一個前臺程序,這與將應用程式分解為多個應用的實踐相吻合(這通常稱為微服務)。另外,重新構建一個容器映象比重新構建一個VM映象更小也更加容易,部署和啟動所需要的時間也就更短。
容器映象的不可變性和應用的微服務架構使得運維團隊用於處理配置管理,監控和日誌記錄的軟體通常不會包含在容器中。也就是,如果軟體進行變更,應用需要重新構建整個映象,但容器編排系統不會把監控和日誌編排進容器映象中。換句話來說,處理配置管理,監控和日誌記錄的軟體並不是在執行時處理軟體的變更-他們是在構建時處理的。通過使用自動構建、自動測試、自動部署(通常稱為持續整合、持續交付),自動化過程從執行時活動轉變成構建時活動。
在容器範例背景下進行交付
當然,我們在IT中所關心的核心問題並沒有消失:我們需要確保我們的應用是沒有漏洞的,執行的是已經經過IT部門確認的最新應用,可以隨著負載伸縮,同時也能提供資料讓日誌和監控系統來協助我們確認應用是否有問題,甚至能在問題發生前預測問題。
為了充分利用容器來帶的敏捷性,同時為確保應用的安全,治理,合規性以及審計追蹤,我們必須重新設計我們的軟體交付流程。 現在,我們必須維護和操作的最重要兩項技術是容器編排系統和容器交付管道。
對於容器編排系統,在過去的兩年中,Kubenetes已經成為開源標準。Kubenetes提供的特性曾經在每個IT部門都被得到應用:負載排程,日誌聚合,擴縮容,健康檢查和應用無縫升級。IT部門並不需要保留舊的流程和工具,而應該把Kubenetes這些特性當做新運維繫統的一部分,基於Kubenetes提供的功能來建立他們的流程。
第二個關鍵元件是容器交付管道:這是一個對所有程式碼進行檢查時,自動進行構建和測試,並且把檢查通過的程式碼部署到容器編排系統上。運維流程中最關鍵的轉變是把軟體交付過程中核心點(例如漏洞修復)從生產系統的執行時監控轉移到構建管道。例如,運維團隊不需要對正在執行的容器打補丁,而是應該是用容器檢查工具標記有漏洞的包的版本,觸發一個容器映象的重新構建,把檢索容器映象是否有漏洞作為CI/CD的一個步驟,並且只部署通過檢查的映象。
通過新的基於容器的交付流程來統一開發團隊和運維團隊
這個轉變對IT部門來說可能會感到非常可怕,但是實際上它與DevOps需要進行的轉變完全保持一致:應用程式的構建階段由開發團隊和運維團隊共同負責,這樣能儘早的發現問題,通過為開發團隊和運維團隊提供更嚴格的工作流程來消除DevOps過程中造成的大量浪費。
IT部門現在有額外的兩個系統來標準化和運維業務系統:容器編排系統和容器交付管道。但是對例如配置管理系統,日誌聚合系統和監控系統等IT公共元件會發生什麼呢?他們並不會消失在容器世界裡。相反,他們會在容器中扮演不同的角色。配置管理系統被用於部署和管理容器編排系統、容器交付管道和其他的例如資料管理系統等沒有執行在容器中的核心分散式系統的生命週期。日誌聚合系統繼續從容器編排系統和容器交付管道系統的日誌中為審計、預測性的分析提供關鍵性的功能。同時監控系統也會聚合容器編排系統和其他外部資料來源的資料。
通過DevOps和容器建立結構化競爭優勢
通過引入企業標準的容器編排系統和容器交付管道來擁抱DevOps的企業將會具有敏捷性優勢,能更快的試驗和理解客戶的需求,最終能正確並且比競爭對手更快的交付軟體。這些有遠見的企業將會具有結構性競爭優勢並將稱為DevOps和容器的主要受益者。