內容提要
《微服務運維實戰(第一卷)》詳細講解微服務和容器在軟體持續集成和部署中的套用。將微服務打包成不可變的容器,通過配置管理工具實現自動化測試和持續部署,同時保證零停機且隨時能回滾。採用集中日誌對集群進行記錄和監控,輕鬆實現伺服器擴展。作者通過講解相關工具(Docker、Kubernetes、Ansible、Consul等)的用法,分享自己的工作經驗,幫助讀者構建高效、可靠、可快速恢復的軟體系統。
作者介紹
Viktor Farcic是CloudBees公司的資深架構師、諮詢師,他有著二十多年的軟體開發經驗,精通多種程式語言(包括C、C++、C#、Java、Perl、Python、Scala、JavaScript等),他最感興趣的領域是微服務、持續集成、持續部署、測試驅動開發。
作品目錄
第1章 DevOps的理想 1
1.1 持續集成、交付和部署 2
架構 3
部署 4
編排 5
1.2 部署流水線的曙光 5
第2章 實現突破——持續部署、微服務和容器 7
2.1 持續集成 7
推送到代碼庫 9
靜態分析 10
部署前測試 12
打包並部署到測試環境 13
部署後測試 13
2.2 持續交付和部署 15
微服務 18
容器 18
2.3 三個火槍手——持續部署、微服務和容器的協作 20
第3章 系統架構 23
3.1 單塊套用 24
微服務 27
3.2 單塊套用與微服務的比較 29
運維和部署的複雜性 30
規模 31
部署、回滾和故障隔離 32
承諾期限 32
3.3 微服務的最佳實踐 41
容器 41
3.4 代理微服務或API網關 44
反向代理 44
極簡主義方法 45
配置管理 45
跨職能團隊 45
API版本化 46
最後的思考 46
第4章 使用Vagrant和Docker搭建開發環境 49
4.1 結合微服務架構和容器技術 50
Vagrant與Docker 52
4.2 開發環境搭建 55
開發環境使用 58
第5章 部署流水線的實現——初始階段 63
5.1 啟動持續部署虛擬機 63
5.2 部署流水線步驟 65
構建Docker容器 67
第6章 Docker世界中的配置管理 79
6.1 CFEngine 79
Puppet 80
Chef 80
最後幾點思考 82
配置生產環境 83
設定Ansible Playbook 86
第7章 部署管道的實現——中間階段 91
7.1 在生產伺服器上部署容器 92
檢查清單 97
第8章 發現服務——分散式服務的關鍵 99
8.1 服務註冊表 101
服務註冊 101
主動註冊 102
註冊服務 103
服務發現 103
服務發現工具 104
手動配置 106
Zookeeper 106
etcd 107
配置Registrator 130
Consul Health Checks、Web UI和數據中心 138
8.2 服務發現工具的比較 141
第9章 代理服務 143
9.1 反向代理服務 144
代理服務對我們的項目有何幫助 146
nginx 146
nginx 146
HAProxy 158
9.2 代理工具的比較 163
第10章 部署流水線的實現——後期階段 167
10.1 啟動容器 169
10.2 集成服務 170
10.3 運行部署後測試 171
10.4 將測試容器推送到鏡像庫 172
10.5 檢查表 173
第11章 部署流水線的自動化實現 175
11.1 部署流水線的步驟 175
Playbook和Role 178
部署前任務 179
部署任務 182
部署後任務 185
11.2 運行自動部署流水線 186
第12章 持續集成、交付和部署的工具 187
12.1 CI/CD工具對比 188
CI/CD工具的簡史 189
運行Jenkins作業 203
創建Jenkins Workflow作業 206
安裝Jenkins Multibranch Workflow和Jenkinsfile 215
最後的想法 217
第13章 藍綠部署 219
13.1 藍綠部署的流程 220
13.2 手動執行藍綠部署 223
部署藍色版本 224
集成藍色版本 226
部署綠色版本 228
集成綠色版本 230
移除藍色版本 231
發現應部署哪個版本以及回滾 233
13.3 使用Jenkins workflow自動化藍綠部署 239
藍綠部署角色 240
運行藍綠部署 245
第14章 服務集群和擴展 249
14.1 可擴展性 250
軸線擴展 252
集群 254
Docker集群工具大比拼——Kubernetes、Docker Swarm和
Mesos對比 256
搭建 258
運行容器 260
選擇 262
14.2 Docker Swarm漫步 263
14.3 搭建Docker Swarm 268
使用Docker Swarm部署 274
使用Docker Swarm無連結部署 275
使用Docker Swarm和Docker Networking部署 276
使用Docker Swarm擴展服務 283
根據預留的CPU和記憶體調度容器 284
14.4 使用Docker Swarm和Ansible自動化部署 288
檢驗Swarm部署playbook 290
第15章 自我修復系統 297
15.1 自我修復等級和類型 298
應用程式級別的自我修復 299
系統級別的自我修復 300
硬體級別的自我修復 302
反應式自我修復 303
預防式自我修復 303
15.2 自我修復架構 305
15.3 Docker、Consul Watches和Jenkins組成的自我修復系統 311
搭建環境 311
15.4 自動設定Consul健康檢查和watches來監測硬體 322
15.5 預設擴展和收縮的預防式自我修復 334
採用Docker重啟策略的預防式自我修復 339
將On-Premise與雲節點結合 341
15.6 自我修復系統總結 342
第16章 集中日誌和監控 343
16.1 集中日誌的需求 344
16.2 向ElasticSearch傳送日誌條目 347
解析檔案條目 354
傳送日誌條目到集中式LogStash 358
傳送Docker日誌條目到集中式LogStash實例 363
16.3 基於軟體數據的自修復系統 375
硬體狀態日誌 381
基於硬體數據的自修復系統 388
最後的想法 388
第17章 結語 391
附錄A Docker Flow 393
A.1 背景 394
標準搭建環境 394
問題 396
Docker Flow漫談 398
零停機事件部署新版本 404
索引 415