特別說明
本文是已讀書籍的學習筆記和內容摘要,原文內容有少部分改動,並添加一些相關信息,但總體不影響原文表達。
《DevOps入門與實踐》 :本書結合實例詳細介紹了在開發現場引入DevOps的具體流程。
- ISBN: 978-7-115-51256-7
- https://www.ituring.com.cn/book/2407
個人簡評
適合已有實踐經驗的實施人員,對已有知識和技能做結構性梳理。
適合對DevOps欠缺了解的人員,能夠建立起基本的概念。
但由於外文書籍翻譯引入與中文出版存在時間差,導致書中涉及的一些工具和方法,落后於當前主流應用場景。
1 - DevOps的含義
DevOps涉及領域廣泛,其含義因人而異,在不同的理解和需求場景下,有着不同的實踐形式。
DevOps可以理解為是一個職位、一套工具集合、一組過程與方法、一種組織形式與文化。
但從商業價值角度來說,DevOps是指通過Dev(開發)和Ops(運維)的緊密合作來實現和提高商業價值的工作方式和文化。
不僅包括了新技術和新工具的使用,還包括相關的團隊組織建設和文化,實現持續改善的運維結構,以及開發流程設計等。
通過開發與運維之間的協作,能夠消除對個人的依賴、減輕團隊之間的損耗,提高質量和開發速度,並通過互相理解來增強變更的靈活性,快速滿足商業需求。
各種支撐DevOps的思想、改善對策和工具共同組成了DevOps,難以在廣泛的場景中明確地指出DevOps實踐的准確定義。
但通常都會包括實現“基礎設施即代碼”和組建適合DevOps的體制這兩部分。
“基礎設施即代碼”是在DevOps實踐中支持開發和運維緊密合作的一個非常有效的方法。
“基礎設施即代碼”,可以簡單理解為:
- 將服務器、網絡設備等基礎設施的設置和架構代碼化、信息化,把軟件開發的開發模式應用到基礎設施運維中。
- 所有基礎設施的構建、變更都根據其配置信息來進行,所有成員都可以訪問配置信息,對配置信息的更改也都如實地反應在基礎設置環境中。
- 按照定義文件的要求來編寫和更改配置信息,使用測試工具對其進行測試,並將配置信息和代碼一樣進行版本管理。
組建適合DevOps的體制,運維團隊和開發團隊共享信息,在變更時互相審查,深入了解對方的工作內容,進而理解並達成共識。
擁有共同的目的意識,雙方通過自主行動來不斷接近共同目標。
此外,DevOps是融合在業務中的持續性的改善和實踐,而不是為了一次性完成所有的改善。
2 - DevOps的誕生與要素
2.1 兩個關鍵因素
理解傳統開發模式和敏捷開發模式的不同,以及各自的問題。
以敏捷開發為代表的持續開發方式的出現
瀑布模型明確划分了開發階段和各階段的產出物,無法有效應對新增需求。
敏捷開發以小規模團隊為前提,每次只發布最低限度的功能集,然后聽取反饋,進行持續改善。
持續開發帶來的運維問題
開發和運維之間的產生“混亂”:運維產生技術負債、抵觸變更和基礎設施不足,開發忽略非功能性需求,運維和開發逐漸“割裂和對立”。
2.2 應對變化
開發部門確保需求的實現,運維部門確保系統穩定、快速地運行,但最重要的根本任務是確保商業的有效性,商業價值的實現
通過工具和文化來支持開發和運維緊密合作,消除專業性和復雜性,減少工作量,同時使信息可視化,以此來降低變更帶來的風險。
團隊中任何成員都可以基於相同的信息迅速開展工作,同時通過自動化和持續集成來大幅縮短應對變更所需要的時間,高效滿足商業需求。
工具所具備的要素
- 抽象化:通過“標准化”或“虛擬化”來抽象化所有資源,消除不同平台之間的差異,降低專業難度和復雜度
- 自動化:通過自動化方式使用抽象化的資源,降低專業難度,減少開發、運維人員的工作壓力
- 統一管理:通過統一的版本管理系統和溝通工具使信息可視化,構建開發和運維之間的緊密聯系,進行有效的信息傳播和溝通
- 即時溝通:通過互聯網通訊工具和聊天機器人,加強點對點的聯系和減少對敏感信息的反應時間
- 持續集成與部署:統一開發部門和運維部門的開發及構建方法,一步式構建和部署,大幅提升系統改善的速度
- 監控:對資源等信息進行集中管理和可視化,構建開發和運維的緊密合作關系
文化所具備的要素
文化的含義:尊重(Respect)、信任(Trust)、正確認識失敗(Healthy attitude about failure)和避免指責(Avoiding Blame)。
- 目的意識:相同的目標,共同創造服務、迅速滿足商業需求,更容易實現緊密合作。
- 同理心:互相考慮對方的感受,接受對方,建立緊密的關系
- 自主思考:不互相依賴,能自主開展工作,以此來不斷接近共同目標
3 - DevOps的工具應用
3.1 抽象化
- 操作系統:使用LXC(Linux Containers)實現的容器技術Docker
- 物理服務器:虛擬機,在虛擬機上混合型部署和運行容器
- 存儲:根據SDS(Software Defined Storage)思想用軟件和API來對虛擬化存儲進行控制
- 網絡:VLAN(Virtual Local Area Network)、SDN(Software Defined Network)
3.2 自動化
基於REST API可以根據指定的參數來進行自動化配置。
REST API可以用URL表示資源,通過HTTP協議來獲取資源的狀態或者變更資源的配置。
3.3 統一管理
在設計上支持和外部系統進行集成,可以將更新信息發送到外部溝通工具,也可以直接共享URL來訪問指定的信息。
- 問題跟蹤系統(Issue Tracking System, ITS):也被稱為Ticket管理工具,例如JIRA、Redmine等
- Wiki:保存設計文檔和會議記錄,例如Confluence和Redmine的Wiki
3.4 即時溝通
例如通用的WeChat、Skype等,面向企業的Cisco Jabber、Chatwork等。
將聊天機器人與聊天工具、業務系統集成,可以代替部分的人工作業,提升反應速度。
3.5 持續集成與部署
除了開源的持續集成和部署工具Jenkins,還有雲的持續集成工具服務,例如Circle CI和Travis CI。
在持續交付階段,可采用藍綠部署方法來確保部署的安全性。
3.6 監控
主流的監控工具主要是指Zabbix。
- 實時把握資源的使用狀態和業務的運行狀態
- 獲取和分析商業活動所需的數據,進行持續改善
- 指標監控,對關鍵指標進行定量分析和優化
3.7 日志分析
通過組合不同的中間件,可以將日志作為監控信息來進行分析處理。
- 用於日志收集:Logstas
- 從收集的日志中檢索過濾信息:Elasticsearch
- 將結果可視化:Kibana
以上三個中間件統稱為ELK棧,是被廣泛使用的主流組合。