iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 1
4

現代 IT 人一定要知道的 Ansible 自動化組態技巧

01. 前言

凍仁在學時很喜愛《Unix 與 Linux 自動化管理》一書,並幻想著有朝一日也能達到自動化管理的境界。但對於 IT 維運者而言,有時間寫筆記就很難了,更別說是把安裝 (Setup)部署 (Deploy)安全性更新 (Security Upgrade) 等步驟寫成可以自動化的 Script!

凍仁從 2015 年末時開始接觸 Ansible,才知道有這麼個比 Shell Script 和 Python 還好用的組態管理工具 (Configuration management Tool) [^1],相信透過 Ansible 的幫助一定可以讓我們大家都提早下班的!(笑)

automate_with_ansible_basic-01.jpg
本次將沿用凍仁先前的簡報,並藉由圖文並茂的方式彌補簡報不足的地方。

現代 IT 人是什麼?

對於凍仁而言,現代的 IT 人得具備十八般武藝,從系統規劃部署 (Deployment)開發 (Development)測試 (QA)維運 (Operations)監控 (Monitoring)效能優化 (Performance Optimisation) 等樣樣都要融匯貫通。

在現代,有個叫「DevOps」的名詞概括了不少技能和工具,如 Ansible, Chef, Docker container, Git, Jenkins CI, Vagrant, Zabbix monitoring server … 等,凍仁在此就不多述。(若想深入了解 DevOps 是什麼?[^2] 歡迎加入 DevOps Taiwan 社團)

簡而言之,現在的資訊人員 (IT Engineer) 除了要會管機器、管網路、on-call 之外,還得要會寫些自動化的工具來輔助自己,不然是難以在下一個世代生存的!

automate_with_ansible_basic-02.jpg
不管是從 Ops 跨到 Dev,還是從 Dev 跨到 Ops,到頭來都是一樣,就看哪邊投的技能點數比較多!

以下是凍仁很喜歡對照表,多年前的凍仁常常耗費不少的時間在安裝作業系統架設公司業務所需的大大小小服務、寫寫工作日記提醒自己改了什麼設定;如今凍仁會藉由虛擬化技術雲端運算組態管理工具等,在相對快速的時間裡完成任務。

automate_with_ansible_basic-03.jpg
寫筆記不如寫工具!更何況還是可重複使用的工具!!

導入自動化組態技巧的好處是什麼?

在提好處之前,先來說說凍仁接觸「自動化組態技巧」後的壞處有哪些?

  1. 學了一套組態工具後就會想用它一統天下!
  2. 原先以為學好 Ansible 以後,就可以不用繼續看官方文件,但事實正好相反。(笑)
  3. 會不斷的想把重複的工作自動化,然後丟上 GitHubAnsible Galaxy

automate_with_ansible_basic-04.jpg
文中提到的組態,其實是從 Configuration management 翻譯過來的。

導入自動化組態工具,除了可以減少重複性的工作外,最重要的可以提升正式環境 (Production)穩定性可靠性

automate_with_ansible_basic-05.jpg
圖片來源:Ansible as Automation Glue

當每次的版本釋出 (release)、部署 (deployment) 都會出現不可預測的問題時,將會冒出許多例外工作,這將會大幅度拖累我們的工作進度。

automate_with_ansible_basic-06.jpg
養兵千日用在一時,當我們準備好,就可以在很短的時間內對正式環境進行部署和維護等變更工作,尤其是半夜 12 才要上線的那種 ...。

還記得那一年,開發者 (Developers) 透過 FTP 手動更新程式,發現臭蟲 (bug) 想退版卻無從下手的慘痛經驗!這不只拖累公司整體的業務,還引起了顧客的不滿。

但其實我們只需透過自動化組態工具管理這些變更,再搭配版本控制系統和測試,就能有效避免這類問題發生。

準備好了嗎?Ansible 的大門就在前面了!

相關連結

[^1]: 組態管理工具 (Configuration management Tool) 一般我們會簡稱為 CM Tool,而在業界我們還會用 Infrastructure as Code (IaC) 的字眼來形容這些工具。

[^2]: 隔壁棚的 Miles 有專門撰寫篇什麼是 DevOps?的文章,不妨也參考一下喔。


下一篇
03. 怎麼部署 Ansible 環境?
系列文
現代 IT 人一定要知道的 Ansible 自動化組態技巧31
1
Ken(Bigcandy)
iT邦大師 1 級 ‧ 2017-02-01 23:12:48

這是『Linux/Python 組態管理工具』,不是『現代 IT 人一定要知道』
我估計9成IT 人用不到這東西

凍仁翔 iT邦新手 4 級 ‧ 2017-02-03 23:57:42 檢舉

Ansible 與 Shell Script 相比的確是個較進階的工具,或許標題下的有些跨大,但個人認為身為一位 IT 工程師或系統管理員是該了解一下 Ansible, Chef, SaltStack, Puppet 這類的組態管理工具來輔助管理系統,至於要不要專精就看個人的選擇了。

順帶一提,Ansible 不只支援 Linux,還支援 Windows網路設備的管理呢。

1
pajace2001
iT邦研究生 1 級 ‧ 2017-09-10 07:57:24

感謝大大的分享!這真的很棒!比起用 shell script, Ansible 簡直就是神兵力器!

凍仁翔 iT邦新手 4 級 ‧ 2017-09-26 22:59:20 檢舉

哈,期待您學完之後的回饋!現在的 Ansible 成長速度之快,已不是常人跟得上的了。/images/emoticon/emoticon01.gif

0
凍仁翔
iT邦新手 4 級 ‧ 2017-09-26 22:48:27

今日於 GitHub 上的 README.md 補上了當初是使用 Ansible 2.1.2 的環境所撰寫的,與這一週釋出的 Ansible 2.4.0 有小幅度的語法和配置修改,大家在看這半年前的文章時,還請留意一下喔!

例如:

  1. lineinfile module 在 Ansible 2.3 之後,把 destname 的參數改名為 path
  2. 在 Ansible 即將在 2.8 移除 ansible.cfg 裡的 hostfile 參數,若您是使用 2.4 以上的版本,請改用 inventory

註:此份文件主要使用 2016/09/29 釋出的 Ansible 2.1.2 進行撰寫,部份語法和配置可能與現今有所出入,還請特別留意。

補上當初是使用 Ansible 2.1.2 的版本進行撰寫的備註 · chusiang/automate-with-ansible@d8b2ff0

我要留言

立即登入留言