本書詳細闡述了基礎設施即代碼的概念、原理、設計方法以及實踐,幫助讀者深入理解基礎設施即代碼的本質和價值。書中通過大量的案例和實踐經驗,展示了如何運用基礎設施即代碼來提高企業生產力,改變數據走向,優化流量模式。
無論您是網絡工程師或者網絡安全工程師、架構師還是領導者,本書都將幫助您以更高的效率、安全性、響應能力和彈性來滿足所有網絡運營的需求
Preface前 言
互聯網建立在網絡基礎設施之上。許多技術、經濟和社會活動都依賴于互聯網。然而,令人遺憾的是,在過去的30年里,組織部署和維護這些關鍵網絡的方式幾乎沒有發生有意義的變化。網絡基礎設施的運營通常是一項人力密集且需要手動操作的過程,容易出錯且響應緩慢。DevOps模型通過可靠的自動化工具和流程,可以提高基礎設施運營的靈活性、規模、安全性和合規性。盡管DevOps在云基礎設施的應用程序開發和管理方面發揮著重要作用,但在將DevOps應用于網絡基礎設施方面,目前尚缺乏一種全面且結構化的方法。
與應用于程序的DevOps不同,應用于網絡基礎設施的DevOps面臨著需要管理元素的數量和每個元素的數據量的巨大挑戰。從本質上講,這使得網絡基礎設施的DevOps成為一個數據管理問題。網絡供應商使用數據模型來組織每個獨立網元中的數據并規范其API,但不同供應商的數據模型甚至同一供應商的不同設備的數據模型都存在差異。模型驅動的DevOps試圖對組織整個基礎設施中數據模型和代碼加以規范化。從某種意義上說,模型驅動的DevOps旨在提供一種將DevOps應用于網絡基礎設施的具有復用性和確定性的方式,同時具備與應用于云基礎設施的DevOpes相同的優勢。
愿景
這本書包含了我們多年來在IT領域的經驗和在咨詢、管理領域的所學,以及我們將其應用于解決當今客戶需求時所面臨的挑戰。利用這樣的經驗,我們尋求提供一種將DevOps應用于基礎設施運營的全面方法。這本書奠定了廣泛的基礎,幫助開發人員和運營商應用為基礎設施DevOps制定的詳細、規范的方法。此外,它還解決了導致許多組織失敗的人為因素和組織因素。
本書的內容簡明易懂且實用。我們認為,成為網絡運營人員或網絡工程師所需的技能已經發生了根本性的變化。API(應用程序接口)已經取代了CLI(命令行接口)。本書旨在幫助網絡運營商和工程師重新調整他們的技能,按照操作云基礎設施的方式來操作他們的基礎設施。為了加強這種方法,我們添加了一個虛構的故事情節,以說明組織在實施這種變革時所面臨的挑戰。
我們將重點放在結果上,并提供大量的代碼來幫助實現這些結果。我們專注于行業中標準的工具和方法。在可能的情況下,我們使用開源或免費工具。當必須選擇供應商解決方案時,我們會選擇適合實現的方式。也就是說,不同的組件或者不同的供應商,并不會對我們提出的原則、框架甚至代碼產生顯著的影響。
讀者對象
我們深入研究了模型驅動的DevOps,并通過開源配套代碼庫中的用例和具體示例對其進行了定義。本書面向IT基礎設施團隊,還適用于希望在各個階段將安全性納入其基礎設施的網絡安全團隊。另外,本書也適合希望了解現代基礎設施的最佳實踐的個人以及業務和技術領導者,因為這些實踐與通過團隊實現高質量成果息息相關。
組織方式
本書各章內容的組織邏輯如下:首先,我們研究為什么網絡基礎設施的運營需要改變,然后探索需要改變的內容,最后展示如何改變它。模型驅動的DevOps的參考實現(reference implementation)為讀者全面應用所學的技術和概念提供了指導。有了這一堅實的技術基礎,我們將在最后一章討論在進行大規模的操作更改時需要考慮的重要人為因素。
本書還提供一些練習,這些練習可讓讀者獲得實踐經驗,以更好地理解技術細節,并檢測所學到的知識。
為了提供一些背景信息并幫助說明本書中的諸多概念,每章都從一位名叫鮑勃的網絡工程師的虛構故事開始。鮑勃在ACME公司工作,這是一家具有典型組織結構的常規公司。最重要的是,它以大量人力手動操作鍵盤的方式來運營網絡基礎設施。在CIO(首席信息官)的指導
下,鮑勃開始了DevOps之旅。正是通過了解他的挑戰、失敗和成功,我們看到了網絡基礎設施在傳統運營模式下的問題,以及如何通過自動化實現DevOps,進而實現真正的業務轉型。
章節結構
本書的每一章都構建在前一章的基礎之上。模型驅動的DevOps的實現過程是一個旅程,這樣的章節安排旨在引導讀者逐步完成整個旅程。
第1章說明了為什么網絡基礎設施的傳統運營模式需要改變,簡要概述了DevOps如何解決傳統模式的諸多問題,并探討了DevOps未被廣泛用于本地IT基礎設施的原因。
第2章定義了業務轉型的目標,討論了模型驅動的DevOps的高級框架,并介紹了可信數據源和數據模型等概念。
網絡基礎設施要成為業務轉型的推動者,就需要擺脫開箱即用的CLI管理模式。第3章說明了API是新的CLI,并探討了可以利用并擴展API的方法。
盡管能夠利用API以編程方式使用網絡基礎設施,但讀者不必成為一個程序員。第4章探討了如何使用數據模型、可信數據源、配置管理工具和模板工具等將網絡基礎設施“變成”代碼。這些工具讓“基礎設施即代碼”成為可能,從而像在“云服務”中一樣操作網絡基礎設施。
基礎設施即代碼非常強大,但與許多強大的東西一樣,如果不加區分地應用,會帶來很大的風險。第5章探討了版本控制系統、數據驗證工具、仿真平臺和CI/CD的概念。這些工具共同實現了基礎設施即代碼的大規模安全使用以及自動化的合法
Steven Carter史蒂文·卡特在大學、政府研發實驗室和私營企業擁有超過25年的行業經驗。他曾在多個行業會議上發表演講,并在技術期刊上撰寫博客和文章。他曾擔任系統管理員,運行世界上一些最大他方面擁有廣泛的經驗,包括運營、嵌入式軟件開發和銷售。在過去的5年中,他一直為紅帽Ansible和思科系統咨詢公司工作,并為世界上許多最大的組織進行編碼,這些組織通過合并DevOps來實現其運營的現代化和安全。他目前擔任Cisco Systems的首席DevOps工程師,創建CI/CD管道,用于在安全和保密環境中部署云應用程序和網絡基礎設施。他擁有計算機工程學士學位、計算機科學碩士學位、工商管理碩士學位和路由與交換CCIE學位。
Jason King杰森·金是Cisco的解決方案架構師,支持公共部門社區。在思科的11年中,他專注于云、自動化、可編程性和高性能計算。在加入思科之前,他在勞倫斯·利弗莫爾國家實驗室花了10年時間構建和調試了一些世界上最大的HPC集群。他擁有計算機科學碩士學位和路由和交換CCIE學位。
Contents目 錄
譯者序
前言
致謝
第1章 頓開茅塞 1
1.1 企業IT成為業務風險源 1
1.2 災難現場的觀察結果 3
1.2.1 缺少良好的架構 4
1.2.2 人為錯誤 4
1.2.3 人比機器慢 4
1.2.4 自動化測試缺失 4
1.2.5 惡性循環 4
1.2.6 缺乏敏捷性 5
1.3 DevOps 5
1.3.1 什么是DevOps 5
1.3.2 應用程序與基礎設施 6
1.3.3 利用大規模自動化 7
1.4 為什么企業IT部門不采用
DevOps 7
1.4.1 人為因素 7
1.4.2 業務因素 8
第2章 良方妙法 9
2.1 目標:業務轉型 12
2.1.1 IT設施的瓶頸 12
2.1.2 業務轉型 13
2.1.3 DevOps行動手冊 13
2.2 為什么選擇模型驅動的
DevOps 14
2.2.1 網絡基礎設施的不同之處 14
2.2.2 什么是模型驅動的DevOps 15
2.2.3 什么是數據模型 15
2.2.4 可信數據源 18
2.2.5 作為框架的DevOps 18
2.3 DevSecOps的內置安全性 19
第3章 可調用的基礎設施 21
3.1 API 23
3.2 平臺化 27
3.2.1 物理硬件配置 27
3.2.2 統一控制點 28
3.2.3 北向API與南向API 28
3.2.4 API 和功能規范化 28
3.2.5 編織化服務 29
3.2.6 可伸縮性 29
第4章 基礎設施即代碼 31
4.1 為什么采用基礎設施即代碼 33
4.2 可信數據源 34
4.3 數據模型 34
4.3.1 數據模型編碼格式 36
4.3.2 數據模型描述語言 38
4.3.3 通用IaC工具 39
4.3.4 組織結構 40
4.3.5 可信數據源的類型 43
4.4 源代碼 51
第5章 持續集成/持續部署 58
5.1 CI/CD概述 61
5.1.1 應用程序與基礎設施的
區別 62
5.1.2 CI/CD實踐 63
5.2 源代碼管理 64
5.2.1 核心功能 64
5.2.2 協作功能 65
5.2.3 SCM總結 67
5.3 持續集成工具 67
5.3.1 CI引擎 68
5.3.2 持續集成工具的工作方式 69
5.3.3 工作流程示例 69
5.4 基礎設施仿真工具 71
5.5 測試和驗證 77
5.5.1 語法檢查 78
5.5.2 元數據格式/模型驗證 79
5.5.3 功能測試 81
5.5.4 測試和驗證總結 86
5.6 持續部署 86
5.7 持續監控 87
第6章 落地實施 89
6.1 模型驅動的DevOps框架的參考
實現 91
6.2 目標 92
6.3 DevOps路線圖 92
6.3.1 架構 93
6.3.2 仿真 95
6.3.3 自動化 96
6.3.4 測試 109
6.3.5 部署 118
第7章 事在人為 121
7.1 文化和變革的需求 122
7.2 從“為什么”開始 123
7.3 組織 123
7.3.1 領導力 123
7.3.2 楷模 123
7.3.3 組建一個團隊 124
7.3.4 打破藩籬 124
7.3.5 社區 125
7.3.6 新的工具 125
7.3.7 組織級變革的小結 128
7.4 個人 128
7.4.1 編程與自動化的對比 129
7.4.2 版本控制工具 130
7.4.3 數據格式 130
7.4.4 API 130
7.4.5 模板化 131
7.4.6 Linux/UNIX 132
7.4.7 擁抱變革 133