每週一書|第二週

DevOpsDays Taipei 2019

推薦書 :DevOps 和自動化運維實踐

前言

您需要建構自動化維運體系嗎?除了問蒼天,問親朋好友,上課之外,也不妨讀讀《DevOps和自動化運維實踐》這本書吧!

以下內容為各位讀者快速的介紹一下本書八個章節的大致內容。

章節細說

第1章:主要是講的是DevOps與自動化運維在運維中的意義和存在的必要性

為什麼企業要自動化維運?營運的目標除了提高效能、降低成本之外,當然也希望一人當多人用!

其目的都在一個:最大化產能!

並且,書中第一個章節就特別提到:也要懂很多基礎的知識,包含但不限於 Web 知識、OS 的操作知識、備份還原等。

自動化運維帶來的好:

  • 消除無效率:顯著提升水平。
  • 減少錯誤:人是最容易犯錯的,尤其是面對著重複性的工作時。通過運維自動化工具來完成這樣的工作,將步驟繁瑣,易錯的交給程序自動處理,錯誤率將大大降低。
  • 最大化員工使用:通過運維自動化,精簡團隊,做更加有意義的事。
  • 提高滿意度水平:自動化運維工具幫助IT運維,可以為內部員工和外部客戶提供高水平支持。無論是通過提供自助服務選項,還是大幅縮短時間(最多達90%)來減少聯繫和等待服務台的需求,自動化運維使得我們可以更好地擁抱SLA。
  • 降低成本:系統中斷、人為錯誤、重複工作,會導致不菲的費用和代價,而自動化運維幾乎可以將這些成本完全消除。


第2章: Shell script 的觀念以及如何在正式環境使用這些腳本

Shell 除了最基本的做 Cronjob 之外,也可以處理業務邏輯、日誌(log)切分上傳、包括監控系統效能與狀態等。

基本上, Shell script 類似我們常講的批次執行檔,也就是是將一些常用的指令彙整起來成為一個腳本,在呼叫該檔案時就一次執行,但是 Shell script 可以進行類似程式 (program) 的撰寫,更為強大,並且不需要經過編譯就能夠執行,再加上我們可透過 Shell script 來簡化我們日常的工作管理,真的很強大。

 

第3章:Python在DevOps與自動化運維中的應用

這個章節除了介紹 Python 的基礎知識,以及進階操作之外,在後也加上了生產環境下如何寫 Python 腳本。

這個章節也介紹了幾個與維運會用的知識,包含 Regex 的使用,常被使用的 Python 第三方函式庫,以及如何利用 Python 自動化執行一些工作(或操作)。

 

第4章:介紹 Vagrant 這個程式

我們面臨在搭建微服務的時代,所以我們可能同時搭建多個虛擬機以使軟體可分佈作業,但是一個一個虛擬機做管理太累了,並且我們所設置的環境可能無法共享,故,我們可以透過 Vagrant 建構一個個 Box ,透過 Vagrantfile 把我們的操作「寫下來」,讓整個 DevOps 團隊可以針對這份文件做「構型管理」。

如果能夠掌握它,這樣可以快速地搭建分布式環境。

 

第5章:關於分佈式自動化運維工具 Ansible

如果我們可以將每一次部署的步驟做成經驗學習留給後面的工程師,或是寫成 SOP ,那部署就不怕沒人做了, 有效縮短每次的部署時間及降低出錯率外,在升級時也會相對容易許多。而 Ansible 就是其中可達成這樣的工具。

在這本書中對於 Ansible 的介紹也是非常地貼近日常維運會用的幾個指令,奇也包含著如何使用 Jinja2 做條件過濾,說明優化 Ansible 執行的速度,以及如何操作 Ansible 提供的兩個 API。

 

第6章:介紹另外一種分佈式自動化運維工具 SaltStack

書中開宗名義就提到 SaltStack 的架構,以及其使用的業務場景。

SaltStack 主要為 client/server 架構。master 端接收到 minion 端的 key 值並認證之後,就可以給 minion 端下達命令,執行之後並返回結果,其中溝通是透過 ZeroMQ 的 Pub/Sub 模式。

一樣在這本書中對於 SaltStack 的介紹也是非常地貼近日常維運會用的幾個指令。書中也提到讀者可以比較 SaltStack 與 Ansible 的差異,分辨特性並應用於自己的業務中。

 

第7章:提到 Docker 和 Jenkins 的應用

Docker 是一個應用平台,它是一種全新的應用程式的運行方式,一切都發生在一個封閉的、精簡的單元裡,此單元我們稱之為容器(containers)。容器是一種非常經濟的應用程式運行方式,它們可以在數秒之內啟動,且不會對應用程式的記憶體和運算經濟需求帶來額外的負擔,這也是因此他現在被視為一大維運利器。

書中除了提到映像檔(Images)、登入所(registries)、容器、以及 Dockerfile 等關係,並且講解如何透過 Docker-Compose 進行多個容器啟動的編排,不過握認為這個時候應該開始考慮使用  kubernetes(k8s) 進行編排才是。

後面提到的 Jenkins,為什麼可以跟 Docker 一起使用,原來是因為通常 Jenkins 搭建時都會設立成 Master/Salve 的架構,因此需要多個容器來:避免衝突,以及可以部署與滾動式更新。

而 Dokcer 正好可以搭建 Master/Salve 的叢集。

 

第8章:講解的是自動化運維中的後續思考

書中最中總結了幾個自動化運維的要事,包含自動化維運體系的建構,自動化維運體系的演進以及如何選擇解決方案。

包含下面作者認為自動化維運體系中不能缺少以下系統:

  • Configuration Management Database (CMDB) 管理系統
  • CI 系統
  • 維運調度管理系統

 

總結

如果你目前非常需要建構自動化維運體系,這本書是你的最佳選擇,這本書讀完之後,基本上你已經建構起一個 Pipeline 了。

如果說在前一週所提到《持續交付,使用 Java》可以幫助你快速建構 Java App 並自動化部署上去,那這本書就是更多著墨在如何讓系統穩定運作下去,非常直得一讀!

另外,我覺得買了這本書之後,馬上最有幫助的,莫屬第 3.8 節的,利用 Pyhton 撰寫程式處理一些重複性的工作。

 

每週一書連結

第一週:持續交付|使用 Java (Continuous Delivery in Java)

第三週:DevOps 三十六計

第四週:持續交付2.0 業務引領的 DevOps 精要

第五週:Effective DevOps 中文版

第六週:DevOps Handbook|打造世界級技術組織的實踐指南 (中文版)

第七週:Jenkins2.x 實踐指南

第八週:Jenkins 2 權威指南

第九週:為你自己學 Git

第十週:精通Git 第2版

活動書籍