DevOps和自動(dòng)化運(yùn)維實(shí)踐
定 價(jià):89 元
叢書(shū)名:華章科技
- 作者:余洪春
- 出版時(shí)間:2018/11/1
- ISBN:9787111610021
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP316.85
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)的內(nèi)容是對(duì)實(shí)際工作經(jīng)驗(yàn)的總結(jié),涉及大量的DevOps及自動(dòng)化運(yùn)維知識(shí)點(diǎn)和專(zhuān)業(yè)術(shù)語(yǔ),全書(shū)共分8章,分別介紹了DevOps與自動(dòng)化運(yùn)維在運(yùn)維中的意義和存在的必要性、生產(chǎn)環(huán)境下的Shell腳本、Python在DevOps與自動(dòng)化運(yùn)維中的應(yīng)用、搭建自動(dòng)化分布式虛擬環(huán)境的Vagrant、自動(dòng)化運(yùn)維工具Farbic、分布式自動(dòng)化運(yùn)維工具Ansible、自動(dòng)化配置管理工具SaltStack,以及自動(dòng)化運(yùn)維中的后續(xù)思考等內(nèi)容。
我的系統(tǒng)架構(gòu)師之路
從2006年接觸Linux系統(tǒng)并從事Linux系統(tǒng)管理員的工作以來(lái),我擔(dān)任過(guò)Linux系統(tǒng)工程師、項(xiàng)目實(shí)施工程師/高級(jí)Linux系統(tǒng)工程師、運(yùn)維架構(gòu)師,到如今的高級(jí)系統(tǒng)開(kāi)發(fā)工程師、系統(tǒng)架構(gòu)師,這一路走來(lái),我深感開(kāi)源技術(shù)和Linux系統(tǒng)的強(qiáng)大及魅力。
現(xiàn)階段我的職務(wù)是高級(jí)運(yùn)維開(kāi)發(fā)工程師(DevOps)、系統(tǒng)架構(gòu)師,主要工作是負(fù)責(zé)公司的CDN業(yè)務(wù)系統(tǒng)的運(yùn)維自動(dòng)化及公司APP產(chǎn)品的CI/CD工作及自動(dòng)化部署工作。CDN系統(tǒng)相對(duì)于其他領(lǐng)域而言,海量機(jī)器的自動(dòng)化運(yùn)維工作是一件比較復(fù)雜的事情,關(guān)于這項(xiàng)工作,我們可以通過(guò)Python自動(dòng)化配置管理管理工具,例如Ansible和SaltStack來(lái)進(jìn)行二次開(kāi)發(fā),結(jié)合公司的CMDB系統(tǒng),提供穩(wěn)定的后端API,方便前端人員或資產(chǎn)人員進(jìn)行調(diào)用,這樣大家都可以利用界面來(lái)完成自動(dòng)化運(yùn)維工作。至今為止,令我印象最為深刻的還是公司的APP項(xiàng)目,該項(xiàng)目現(xiàn)在全部部署在云平臺(tái)(國(guó)內(nèi)云平臺(tái))并且Docker容器化了,從前端到后端包括大數(shù)據(jù)接口,全部采用容器化的項(xiàng)目方式部署上線,整個(gè)自動(dòng)化流程跟傳統(tǒng)的自動(dòng)化方式大相徑庭。尤其是現(xiàn)在公司正在使用的Kubernetes,整個(gè)架構(gòu)設(shè)計(jì)非常復(fù)雜,學(xué)習(xí)成本也是非常高的,但帶來(lái)的容器的自動(dòng)化管理也是非常便利的。目前,無(wú)論是國(guó)外的AWS、Google還是國(guó)內(nèi)的阿里云和騰訊云等主流公有云均提供Kubernetes的容器服務(wù),可以說(shuō)Kubernetes在當(dāng)前容器行業(yè)是熱門(mén)的,而Docker技術(shù)正是Kubernetes的基石,建議大家盡快熟練Docker的使用方法。
撰寫(xiě)本書(shū)的目的
云計(jì)算和容器技術(shù)是當(dāng)前的流行技術(shù)和發(fā)展趨勢(shì),云計(jì)算和容器技術(shù)的流行對(duì)于傳統(tǒng)的運(yùn)維知識(shí)體系其實(shí)也是一種沖擊,傳統(tǒng)運(yùn)維工程師的工作性質(zhì)也在不斷地發(fā)生變化,要掌握很多新的技能和知識(shí)。大家經(jīng)常會(huì)在工作中看到DevOps這個(gè)詞。DevOps為什么會(huì)這么火?這跟最近幾年的云計(jì)算和容器技術(shù)的快速普及有很大關(guān)系 :云計(jì)算平臺(tái)上(包括Kubernets)的各種資源,從服務(wù)器到網(wǎng)絡(luò),再到負(fù)載均衡都是由API創(chuàng)建和操作的,這就意味著所有的資源都可以由“軟件定義”,這給各種自動(dòng)化運(yùn)維工具提供了一個(gè)非常好的基礎(chǔ)環(huán)境。而在傳統(tǒng)的互聯(lián)網(wǎng)行業(yè),例如筆者目前正在從事的CDN領(lǐng)域,由于機(jī)器數(shù)量眾多、網(wǎng)絡(luò)環(huán)境錯(cuò)綜復(fù)雜,也需要由DevOps人員來(lái)設(shè)計(jì)工具,提供后端的自動(dòng)化運(yùn)維API,結(jié)合公司的CMDB資產(chǎn)管理系統(tǒng),提供自動(dòng)化運(yùn)維功能,簡(jiǎn)化運(yùn)維的操作流程及步驟,提高工作效率。
工作之余,許多讀者朋友們也在向我咨詢(xún)工作中的困惑,比如從事系統(tǒng)運(yùn)維工作3~5年以后就不知道如何繼續(xù)學(xué)習(xí)和規(guī)劃自己的職業(yè)生涯了。我想通過(guò)此書(shū),跟大家分享一下這么多年的工作經(jīng)驗(yàn)和心得(尤其是近幾年流行的DevOps技術(shù)),解決大家工作中的困惑。通過(guò)此書(shū)的項(xiàng)目實(shí)踐和線上環(huán)境案例,讓大家能迅速了解Linux運(yùn)維人員的工作職責(zé)和方向,迅速進(jìn)入工作狀態(tài),快速成長(zhǎng),希望大家通過(guò)閱讀本書(shū),能夠掌握Linux系統(tǒng)集群和自動(dòng)化運(yùn)維及網(wǎng)站架構(gòu)設(shè)計(jì)的精髓,輕松而愉快地工作,提升自己的職業(yè)技能,這是我非常高興看到的,也是我編寫(xiě)本書(shū)的初衷。
讀者對(duì)象
本書(shū)的讀者對(duì)象如下所示:
系統(tǒng)管理員或系統(tǒng)工程師
中高級(jí)運(yùn)維工程師
運(yùn)維開(kāi)發(fā)工程師
開(kāi)發(fā)工程師
如何閱讀本書(shū)
本書(shū)的內(nèi)容是對(duì)實(shí)際工作經(jīng)驗(yàn)的總結(jié),涉及大量的DevOps及自動(dòng)化運(yùn)維知識(shí)點(diǎn)和專(zhuān)業(yè)術(shù)語(yǔ),建議這方面經(jīng)驗(yàn)還不是很豐富的讀者先了解第1章的內(nèi)容,這章比較基礎(chǔ),如果大家在學(xué)習(xí)過(guò)程中根據(jù)這章的講解進(jìn)行操作,定會(huì)達(dá)到事半功倍的效果。
系統(tǒng)管理員和系統(tǒng)工程師們可以通篇閱讀本書(shū),并重點(diǎn)關(guān)注第1章、第2章和第4章,其他章節(jié)的內(nèi)容可以選擇性地閱讀,借此來(lái)拓寬知識(shí)面,確定學(xué)習(xí)方向。
對(duì)于運(yùn)維工程師而言,除了第3章的內(nèi)容不要求掌握以外,其他章節(jié)的內(nèi)容均可以做深層次的閱讀、實(shí)踐和思考,書(shū)中提到的很多自動(dòng)化案例,讀者可以嘗試結(jié)合自己公司的實(shí)際情況來(lái)進(jìn)行應(yīng)用。
對(duì)于運(yùn)維開(kāi)發(fā)工程師來(lái)說(shuō),上述章節(jié)描述的內(nèi)容都與運(yùn)維開(kāi)發(fā)工作息息相關(guān),建議大家多花些精力和時(shí)間,抱著一切從線上環(huán)境去考慮的態(tài)度去學(xué)習(xí)和思考,實(shí)踐后多思考一下原理性的內(nèi)容。
對(duì)于開(kāi)發(fā)工程師來(lái)說(shuō),由于其只需對(duì)運(yùn)維系統(tǒng)知識(shí)體系有一個(gè)大概的了解,重點(diǎn)可以放在本書(shū)的第1~3章。如果想了解自動(dòng)化運(yùn)維相關(guān)知識(shí)體系,建議熟悉本書(shū)的第6~8章。
大家可以根據(jù)自己的職業(yè)發(fā)展和工作需要選擇不同的閱讀順序和側(cè)重點(diǎn),同時(shí)也可以對(duì)其他相關(guān)的知識(shí)點(diǎn)有一定的了解。
致謝
感謝我的家人,她們?cè)谏钌蠈?duì)我無(wú)微不至的照顧,讓我更有精力和動(dòng)力去工作和創(chuàng)作。
感覺(jué)好友劉天斯、老男孩的支持和鼓勵(lì),閑暇之余和你們一起交流開(kāi)源技術(shù)和發(fā)展趨勢(shì),也是一種享受。
感謝朋友曹林華,與我一起花了大量時(shí)間調(diào)研并且實(shí)踐電子商務(wù)系統(tǒng)中關(guān)于秒殺系統(tǒng)的架構(gòu)及設(shè)計(jì)。
感謝機(jī)械工業(yè)出版社華章公司的編輯楊福川和楊繡國(guó),在你們的信任、支持和幫助下,這本書(shū)才能如此順利地出版。
感謝朋友馮松林,感謝他這么多年來(lái)對(duì)我的信任和支持,在我苦悶的時(shí)候陪我聊天,自始至終對(duì)我予以支持和信任。
感謝生活中的朋友們—曹江華、何小玲、鄭樺、徐江春、張薇(排名不分順序),工作之余能一起閑聊和打牌,也是非常開(kāi)心和快樂(lè)
推薦序一
推薦序二
推薦序三
前言
第1章 DevOps與自動(dòng)化運(yùn)維的意義 1
1.1 DevOps在企業(yè)中存在的意義 1
1.2 為什么企業(yè)需要自動(dòng)化運(yùn)維 4
1.3 Web編程相關(guān)體系知識(shí)點(diǎn) 5
1.3.1 為什么要前后端分離 5
1.3.2 什么是RESTful 7
1.3.3 Web后臺(tái)認(rèn)證機(jī)制 8
1.3.4 同步和異步、阻塞與非阻塞的區(qū)別 10
1.3.5 WebSocket雙工通信 11
1.3.6 了解消息中間件 13
1.3.7 了解負(fù)載均衡高可用 18
1.4 從事DevOps工作應(yīng)該掌握的語(yǔ)言 24
1.5 從事DevOps工作應(yīng)該掌握的工具 25
1.6 了解網(wǎng)站系統(tǒng)架構(gòu)設(shè)計(jì)和高并發(fā)場(chǎng)景 26
1.6.1 網(wǎng)站性能評(píng)估指標(biāo) 26
1.6.2 細(xì)分五層解說(shuō)網(wǎng)站架構(gòu) 26
1.7 了解數(shù)據(jù)庫(kù)集群主從復(fù)制的基本原理 34
1.8 Linux服務(wù)器的安全防護(hù) 37
1.8.1 DDoS攻擊和運(yùn)營(yíng)商劫持 37
1.8.2 Linux服務(wù)器基礎(chǔ)防護(hù)篇 38
1.8.3 Linux服務(wù)器高級(jí)防護(hù)篇 40
1.9 小結(jié) 41
第2章 Shell腳本在DevOps下的應(yīng)用 42
2.1 Shell編程基礎(chǔ) 42
2.1.1 Shell腳本的基本元素 43
2.1.2 Shell基礎(chǔ)正則表達(dá)式 43
2.1.3 Shell特殊字符 46
2.1.4 變量和運(yùn)算符 47
2.2 Shell中的控制流結(jié)構(gòu) 61
2.3 sed的基礎(chǔ)用法及實(shí)用舉例 64
2.3.1 sed的基礎(chǔ)語(yǔ)法格式 64
2.3.2 sed的用法舉例說(shuō)明 69
2.4 awk的基礎(chǔ)用法及實(shí)用案例 72
2.5 Shell應(yīng)用于DevOps開(kāi)發(fā)中應(yīng)掌握的系統(tǒng)知識(shí)點(diǎn) 77
2.6 生產(chǎn)環(huán)境下的Shell腳本 85
2.6.1 生產(chǎn)環(huán)境下的備份類(lèi)腳本 86
2.6.2 生產(chǎn)環(huán)境下的統(tǒng)計(jì)類(lèi)腳本 89
2.6.3 生產(chǎn)環(huán)境下的監(jiān)控類(lèi)腳本 92
2.6.4 生產(chǎn)環(huán)境下的運(yùn)維開(kāi)發(fā)類(lèi)腳本 97
2.7 小結(jié) 102
第3章 Python在DevOps與自動(dòng)化運(yùn)維中的應(yīng)用 103
3.1 Python語(yǔ)言的應(yīng)用領(lǐng)域 103
3.2 選擇Python的原因 105
3.3 Python的版本說(shuō)明 106
3.4 Python基礎(chǔ)學(xué)習(xí)工具 106
3.4.1 Python(x,y)簡(jiǎn)單介紹 107
3.4.2 IPython詳細(xì)介紹 107
3.4.3 Sublime Text3簡(jiǎn)單介紹 113
3.5 Python基礎(chǔ)知識(shí)進(jìn)階 120
3.5.1 正則表達(dá)式應(yīng)用 120
3.5.2 Python程序構(gòu)成 127
3.5.3 Python編碼問(wèn)題 129
3.5.4 使用Python解析JSON 131
3.5.5 Python異常處理與程序調(diào)試 133
3.5.6 Python函數(shù) 136
3.5.7 Python面向?qū)ο? 147
3.5.8 Python多進(jìn)程 159
3.5.9 Python多線程 161
3.6 Python經(jīng)常用到的第三方類(lèi)庫(kù) 175
3.7 利用Flask設(shè)計(jì)后端Restful API 178
3.7.1 DevOps中為什么要使用RESTful API 178
3.7.2 RESTful API項(xiàng)目實(shí)戰(zhàn) 182
3.8 工作中的Python腳本分享 184
3.9 小結(jié) 191
第4章 Vagrant在DevOps環(huán)境中的應(yīng)用 192
4.1 Vagrant簡(jiǎn)單介紹 193
4.2 Vagrant安裝 193
4.3 使用Vagrant配置本地開(kāi)發(fā)環(huán)境 195
4.3.1 Vagrant的具體安裝步驟 195
4.3.2 Vagrant配置文件詳解 198
4.3.3 Vagrant常用命令詳解 199
4.4 使用Vagrant搭建DevOps開(kāi)發(fā)環(huán)境 200
4.5 使用Vagrant搭建分布式環(huán)境 203
4.6 小結(jié) 207
第5章 自動(dòng)化部署管理工具Ansible 208
5.1 YAML介紹 209
5.2 Ansible的安裝和配置 214
5.3 定義主機(jī)與組規(guī)則(Inventory) 218
5.4 Ansible常用模塊介紹 220
5.5 playbook介紹 235
5.6 Ansible在AWS云平臺(tái)中的應(yīng)用 240
5.7 角色 241
5.8 Jinja2過(guò)濾器 248
5.9 Ansible速度優(yōu)化 252
5.10 利用Ansible API提供自動(dòng)化運(yùn)維后端 262
5.10.1 runner API 262
5.10.2 playbook API 265
5.10.3 用Flask封裝Ansible提供自動(dòng)化運(yùn)維后端 267
5.11 Ansible 2.2新增功能 273
5.12 小結(jié) 280
第6章 自動(dòng)化配置管理工具SaltStack 281
6.1 Salt的相關(guān)知識(shí)點(diǎn)介紹 281
6.1.1 Salt的優(yōu)勢(shì) 281
6.1.2 Salt的安裝 282
6.1.3 Salt的工作流程 287
6.1.4 Salt配置文件詳解 288
6.1.5 Salt的命令格式 291
6.2 Salt的常用組件 291
6.2.1 Salt常用的操作目標(biāo) 291
6.2.2 Salt常用模塊 293
6.2.3 Granis組件 304
6.2.4 pillar組件 308
6.2.5 job管理 311
6.2.6 State介紹 312
6.3 Salt真實(shí)案例分享 314
6.3.1 base環(huán)境配置 315
6.3.2 prod環(huán)境配置 319
6.4 Salt多Master搭建 322
6.5 Salt API介紹 324
6.5.1 Python API介紹 324
6.5.2 Restful API介紹 326
6.6 小結(jié) 330
第7章 Docker和Jenkins在DevOps中的應(yīng)用 331
7.1 Docker的基礎(chǔ)安裝 333
7.2 Docker的三大核心概念 336
7.3 Docker的基本架構(gòu) 338
7.4 Docker網(wǎng)絡(luò)實(shí)現(xiàn)原理 340
7.5 利用Dockerfile文件技巧打包Docker鏡像 342
7.6 利用Docker-Compose編排和管理多容器 344
7.6.1 Docker-Compose的基本語(yǔ)法 345
7.6.2 Docker-Compose常用命令 352
7.6.3 使用Docker-Compose運(yùn)行Python Web項(xiàng)目 354
7.6.4 使用Docker-Compose的過(guò)程中遇到的問(wèn)題 355
7.7 利用Docker搭建Jenkins Master/Slave分布式環(huán)境 357
7.7.1 部署Jenkins Master/Slave分布式環(huán)境需要解決的問(wèn)題 358
7.7.2 Jenkins Master/Slave的詳細(xì)部署過(guò)程 360