Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
[ chusiang@kalug ~ ] $ cat .profile
# Author: 凍仁翔 / chusiang.lai (at) gmail.com
# Blog: http://note.drx.tw
# Modified: 2016-...
關於凍仁翔
• 4 年年以上 IT 經驗。
• 現職 DrSays IT ⼯工程師。
• Ansible 實戰講堂 4e. 學員。
• 於 Ansible Galaxy 分享 Roles:
• php7 (php-fpm)
• switch-a...
坐穩囉
要開始了了!
3

YouTube videos are no longer supported on SlideShare

View original on YouTube

Loading in …3
×

Check these out next

1 of 57 Ad

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

Download to read offline

> Mirror from https://speakerdeck.com/chusiang/xian-dai-it-ren-ding-yao-zhi-dao-de-ansible-zi-dong-hua-zu-tai-ji-qiao

本次凍仁將會帶領大家一探 Ansible 這門技藝,是個比手刻 Shell script, Python 更適合用來自動化部署的技術,相信有了 Ansible 我們都可以提早下班了 (笑)。

* Blog - http://note.drx.tw/2016/05/automate-with-ansible-basic.html
* 簡報大綱 - https://gist.github.com/chusiang/60918f8f400c3f82944c86b924553b27
* KaLUG 1605 聚會 - http://kalug.kktix.cc/events/84f75129

> Mirror from https://speakerdeck.com/chusiang/xian-dai-it-ren-ding-yao-zhi-dao-de-ansible-zi-dong-hua-zu-tai-ji-qiao

本次凍仁將會帶領大家一探 Ansible 這門技藝,是個比手刻 Shell script, Python 更適合用來自動化部署的技術,相信有了 Ansible 我們都可以提早下班了 (笑)。

* Blog - http://note.drx.tw/2016/05/automate-with-ansible-basic.html
* 簡報大綱 - https://gist.github.com/chusiang/60918f8f400c3f82944c86b924553b27
* KaLUG 1605 聚會 - http://kalug.kktix.cc/events/84f75129

Advertisement
Advertisement

More Related Content

Similar to 現代 IT 人一定要知道的 Ansible 自動化組態技巧 (20)

Advertisement

More from Chu-Siang Lai (18)

Recently uploaded (20)

Advertisement

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

  1. 1. [ chusiang@kalug ~ ] $ cat .profile # Author: 凍仁翔 / chusiang.lai (at) gmail.com # Blog: http://note.drx.tw # Modified: 2016-05-31 16:30
  2. 2. 關於凍仁翔 • 4 年年以上 IT 經驗。 • 現職 DrSays IT ⼯工程師。 • Ansible 實戰講堂 4e. 學員。 • 於 Ansible Galaxy 分享 Roles: • php7 (php-fpm) • switch-apt-mirror • vim-and-vi-mode • zabbix-agent • CVE-2016-3714 2
  3. 3. 坐穩囉 要開始了了! 3
  4. 4. Outline I. 現代 IT ⼈人是什什麼? 4
  5. 5. Outline I. 現代 IT ⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? 5
  6. 6. Outline I. 現代 IT ⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? 6
  7. 7. Outline I. 現代 IT ⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? IV. 怎麼部署 Ansible 環境? 7
  8. 8. Outline I. 現代 IT ⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? IV. 怎麼部署 Ansible 環境? V. 怎麼操作 Ansible? 8
  9. 9. Outline I. 現代 IT ⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? IV. 怎麼部署 Ansible 環境? V. 怎麼操作 Ansible? VI. Q & A 9
  10. 10. Ⅰ. 現代 IT ⼈人是什什麼? 10 DevOps
  11. 11. 現代 IT ⼈人是什什麼? 11 以前的 IT ⼈人 現代的 IT ⼈人 從裝機到架站 需耗費數⼩小時 (hr) 不⽤用 30 分 (min) 上班 每天敲敲指令、裝裝機器, 常常忘了了改過什什麼 寫 code 當總統 寫 code 管機器 下班 寫不完的⼯工作⽇日記 幫⾃自⼰己寫⼯工具 (為了了提早下班)
  12. 12. Ⅱ. 導入⾃自動化組態的好處是什什麼? 12 ※ 註:組態 = Configuration management (CM)
  13. 13. 導入 Ansible ⾃自動化組態, 我們除了了可以減少服務中斷 時間、測試基礎建設、降低 意外風險,更更可以讓開發、 測試和正式環境無縫接軌。 圖片來來源 - Ansible as Automation Glue 13
  14. 14. "⼯工⼈人" 組態 ⾃自動化組態 重複組態的⼈人⼒力力成本 ⾼高 低 ⼈人為失誤風險 ⾼高 低 可測試性 難 易易 模組化 難 易易 提早下班 難 易易 導入⾃自動化組態的好處是什什麼? 14
  15. 15. Ⅲ. Ansible 是什什麼? 15
  16. 16. Ansible 取名⾃自知名⼩小說
 《安德的遊戲》,是 虛構的超光速通訊裝置。 有了了它我們就可以像 Ender 指揮戰艦般的操控伺服器。 電影海海報 - https://goo.gl/4xftZT 16
  17. 17. Ansible 是近年年來來知名度不 斷上升的 DevOps ⾃自動化 軟體,雖然⾃自 2013 年年創立⾄至 今不到 3 年年,但由於其採⽤用
 無代理理程式的架構,部署 靈活,程式碼易易讀,因⽽而 迅速成為受矚⽬目的 DevOps ⼯工具。 iThome - http://goo.gl/yJbWtz 17
  18. 18. Ansible 是什什麼? • 與 Puppet, Salt, Chef 並列列其四的⾃自動化組態設定⼯工具 (Infrastructure as Code),其簡單易易⽤用的特性讓⼈人⼀一⽤用就 愛上,在 DevOps 界也佔有⼀一席之地。 • 使⽤用 Push 架構,只需 Python 和 SSH 即可操作,不⽤用額 外裝 Angent。
 
 • Python 陣營的組態設定⼯工具。 18
  19. 19. Ⅳ. 怎麼部署 Ansible 環境? 19 觀念念、安裝、設定
  20. 20. Ansible 是怎麼運作的? 透過 inventory 定義 Managed node,並藉由 SSH 與 Python 進⾏行行溝通。 20
  21. 21. 怎麼安裝 Ansible? • 只需在 Control Machine 安裝 Ansible;Managed node 則要有 Python 2.5+ 和 SSH。 21 # Debian & Ubuntu (apt). $ sudo apt-get install ansible # Mac OS X (homebrew). $ brew install ansible # Python (pip). $ sudo pip install ansible
  22. 22. 怎麼設定 Ansible? • 藉由 ansible.cfg 來來設定 inventory (host file) 檔案路路徑、 Managed node (被控端) 使⽤用者名稱、SSH ⾦金金鑰 … 等。 22 $ vim ansible.cfg [defaults] # 指定 inventory 檔案路路徑。 hostfile = hosts # 遠端使⽤用者名稱 remote_user = vagrant #private_key_file = ~/.ssh/id_rsa # host_key_checking: 不詢問加入 ssh ⾦金金鑰 host_key_checking = False
  23. 23. inventory 是什什麼? • 主要⽤用來來定義 Managed node (被控端) 主機位址與群組, 也可⽤用來來設定 ssh 連線資訊。 23 $ vim hosts # ansible_ssh_host: 遠端 SSH 主機位址。 # ansible_ssh_port: 遠端 SSH 埠⼝口 (Port)。 # ansible_ssh_user: 遠端 SSH 使⽤用者名稱。 # ansible_ssh_private_key_file: 本機 SSH 私鑰檔路路徑。 # ansible_ssh_pass: 遠端 SSH 密碼 (建議改⽤用私鑰)。 [dev] ansible-demo.local ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 [test] ansible-test.local ansible_ssh_host=10.10.1.1 ansible_ssh_user=adeliae [prod] ansible-prod.local ansible_ssh_host=demo.drx.tw ansible_ssh_port=22
  24. 24. Ⅴ. 怎麼操作 Ansible? 24 Ad-Hoc command, Playbook* (Module, Galaxy), Ansible Tower
  25. 25. Ad-Hoc command and 25 Playbook
  26. 26. Ad-Hoc command 是什什麼? • 簡短 (臨臨時性) 的指令,與⼀一般的 command line 操作模式 雷同,⼀一次只透過⼀一⾏行行指令進⾏行行操作。 26 # ⼀一般的 command line $ ping ansible-demo.local PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.037 ms --- localhost ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.037/0.037/0.037/0.000 ms $ echo Hello World Hello World
  27. 27. Ad-Hoc command 是什什麼? • Ansible -m 後的各項參參數請參參考官⽅方⽂文件 -
 Module Index。 27 # ansible <主機名稱> -m <各項參參數> $ ansible all -m ping ansible-demo.local | SUCCESS => { "changed": false, "ping": "pong" } $ ansible all -m command -a "echo Hello World" ansible-demo.local | SUCCESS | rc=0 >> Hello World
  28. 28. Playbooks 是什什麼? • ⼀一鍵部署的強⼤大武器,比 Shell Script 更更具結構化的腳本語 ⾔言。 • 使⽤用 YAML 格式,寫 code 就 如同寫⽂文件,簡單易易讀。 • 可使⽤用 Jinja2 (template 系統) 表達式,並⽀支援變數、判斷式
 、迴圈 ... 等語法。 Baby Playbook Onesie - http://goo.gl/GKJvXn 28
  29. 29. Playbooks 是什什麼? • ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 29 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi"
  30. 30. Playbooks 是什什麼? • ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 30 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi" Play
  31. 31. Playbooks 是什什麼? • ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 31 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi" Task 1 Task 2 Task 3
  32. 32. Playbooks 是什什麼? • ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 32 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi" Module
  33. 33. Playbooks 是什什麼? • 執⾏行行 example.yml playbook。 33 $ ansible-playbook example.yml PLAY [This is a Super-basic playbook.] ***************************************** TASK [setup] ******************************************************************* ok: [ansible-demo.local] TASK [Hello World] ************************************************************* changed: [ansible-demo.local] TASK [Install Vim & Emacs] ***************************************************** changed: [ansible-demo.local] => (item=[u'vim', u'emacs']) TASK [use vi-mode in readline] ************************************************* changed: [ansible-demo.local] PLAY RECAP ********************************************************************* ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0
  34. 34. Playbooks 是什什麼? • 執⾏行行 example.yml playbook。 34 $ ansible-playbook example.yml PLAY [This is a Super-basic playbook.] ***************************************** TASK [setup] ******************************************************************* ok: [ansible-demo.local] TASK [Hello World] ************************************************************* changed: [ansible-demo.local] TASK [Install Vim & Emacs] ***************************************************** changed: [ansible-demo.local] => (item=[u'vim', u'emacs']) TASK [use vi-mode in readline] ************************************************* changed: [ansible-demo.local] PLAY RECAP ********************************************************************* ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0 Setup 總結 (Recap)
  35. 35. 火 ⼒力力 展 ⽰示 Live Demo 35
  36. 36. http://s.drx.tw/ansible1.kalug
  37. 37. https://youtu.be/L4UDVP1lJQQ
  38. 38. Module 38
  39. 39. http://docs.ansible.com/ansible/list_of_commands_modules.html
  40. 40. Docs » commands Modules 有 yes 就⼀一定要⽤用
  41. 41. Galaxy 42
  42. 42. https://galaxy.ansible.com
  43. 43. ⾶飛向宇宙,浩瀚無垠! – 巴斯光年年 (Debian Buzz) 46
  44. 44. 參參考⽂文獻 • Ansible Docs - http://docs.ansible.com/ansible/intro_installation.html • 《Ansible: Up and Running》- https://www.ansible.com/ansible-book • 七分鐘掌握 Ansible 核⼼心觀念念 (7:15) | Software Architecture School - http://goo.gl/nhykzE • Ansible 實戰講堂 - http://get.soft-arch.net/ansible/ • 電腦界的隱喻:組態管理理 | 軟體架構・絮語 - http://school.soft-arch.net/blog/90699/ metaphor-in-cm • 淺談 Ansible by sakana / Max - https://goo.gl/e9RwhE • 「Ansible ⾃自動化組態管理理實戰講堂」與「⾃自我實現」| 凍仁的筆記 - http://goo.gl/5gs1q9 • 現代 IT ⼈人⼀一定要知道的 Ansible ⾃自動化組態技巧 | 凍仁的筆記 - http://goo.gl/daAtVi 47 Free
  45. 45. 圖片來來源 • Blasts Off Space Rocket From Cosmodrom In The Clouds, Polygonal Stock Illustration | dreamstime - http://goo.gl/6FAuiQ • 國家地理理雜誌 - http://www.ngtaiwan.com • Using cloud-init and uvtool to initialize cloud instances | Rui - https://goo.gl/CbdvTH • Books icon (PSD) | GraphicsFuel - http://www.graphicsfuel.com/2012/07/books- icon-psd/ • Avatar, business, company, group, manager, people, users icon | Icon search engine - https://goo.gl/Hm6ScX • A Galaxy Just Appeared Out of Nowhere - http://chirpnews.com/2016/04/17/new- galaxy-appeared/ 48
  46. 46. ⼯工商服務 49
  47. 47. 50 http://萍⽔水相逢.tw
  48. 48. DevOps Taiwan https://www.facebook.com/groups/DevOpsTaiwan/ https://devopstaiwan.slack.com/ https://gitter.im/DevOpsTW/
  49. 49. http://www.vim.tw
  50. 50. http://coscup.org
  51. 51. http://mopcon.org
  52. 52. Q & A 嚴禁拍打餵食 55
  53. 53. E N D

Editor's Notes

  • 40 分鐘講完投影片的不可能任務要開始了!
  • 小小帶過本次主題。
  • 小小帶過本次主題。
  • 小小帶過本次主題。
  • 小小帶過本次主題。
  • 小小帶過本次主題。
  • 小小帶過本次 6 個主題。詢問現場程度,以勘酌分配比例。
    (約停頓 1 分鐘)
  • 從開發、測試、部署、維運、監控、系統優化各個階段都得參與的人。
  • 可以提早下班。
  • Ansible as Automation Glue - https://www.ansible.com/blog/ansible-automation-glue
  • 導入自動化組態可以降低重複組態的人力成本、降低人為失誤風險、增進可測試性、將工作模組化、以及提高提早下班的可能性。
  • Ansible 主要的隱喻是演戲。所以,在 Ansible 劇場中,策劃好的動作及姿勢叫做 play,集合起來就是 playbook(劇本)。人生就是戲,演不完的戲;在舞台上,每一台主機扮演一個或多個 role(角色),甚至還有天外飛來一筆的空降角色 —— 來自 galaxy(銀河系)。

    http://school.soft-arch.net/blog/90699/metaphor-in-cm


    自由軟體?要是沒人維護了還可以自己改喔!
  • 戰爭遊戲,又名安德的遊戲 (Ender's Game),是 "奧森·斯科特·卡德" 最著名的科幻小說,曾在 2013 年於大銀幕上映。

    https://zh.wikipedia.org/zh-tw/安德的游戏
    https://en.wikipedia.org/wiki/Ender%27s_Game
  • Ansible 與 Salt 同為 Python 陣營,而 Puppet, Salt 則是 Ruby。
    身為 Python 的愛好者會選 Ansible 也是應該的啊!
  • 說了這麼多,要怎麼 setup Ansible 的環境呢?
  • Ansible 是透過 inventory 來定義 Managed node,並藉由 ssh 與 Python 來溝通的。由上張圖可以看出只要每台機器都有 Python 跟 ssh 基本上就可以運作了,當然主控端需要安裝 Ansible。
  • 只需在 Control Machine 安裝 Ansible;Managed node 則要滿足 Python 2.5 以上和開通 SSH 的條件。

    Ansible 最新的版本為 v2.1。
  • 我們可以藉由 ansible.cfg 來設定 inventory 的位置、被控端的相關設定。
  • inventory 就字面上有 "詳細目錄"、"完整清單" 的意思。在 Ansible 是用來定義被控端的主機位址、群組還有 ssh 連線資訊。
  • 接下來凍仁會介紹 Ad-Hoc command, Playbook, Module, Galaxy,但不會講到 Tower。Tower 是 Ansible 公司主推的加值服務,是個可以用網頁來執行 Ansible,有圖有表的服務。
  • 首先我們先來了解 Ad-hoc command 與 Playbook。如果今天只能記住一件事的話,我希望會是大家可以知道 Ansible 就是神在 Playbook!
  • 可以看到底下為一般的 command line。一個是 ping 一個是 echo。

    Ad hoc 是拉丁文常用短語中的一個短語。這個短語的意思是「特設的、特定目的的(地)、即席的、臨時的、將就的、專案的」。這個短語通常用來形容一些特殊的、不能用於其它方面的的,為一個特定的問題、任務而專門設定的解決方案。這個詞彙須與a priori區分。
    https://zh.wikipedia.org/wiki/Ad_hoc
  • 大家可以看到底下的 ad-hoc command 範例,同樣是做 ping 跟 echo 兩件事。
    all 代表對所有的主機執行,而 -m ping 則是使用 ping 這個模組 (module)。
  • Jinja / 神社 / http://jinja.pocoo.org/docs/dev/
  • lineinfile 這個 Module 很特別的地方是,如果 inputrc 裡已經有 set editing-mode vi 的話,它就會跳會不執行,基於時間因素凍仁在此就不多加說明了。
  • 這邊是剛剛那份 playbook 的執行結果。

    除了一個 Play 三個 Tasks 外還多了一些東西。
  • TASK [setup] 會確認有哪些 managed node 會執行此 playbook。
    最後會有總結 (recap) 告訴我們有哪些 tasks 通過,哪些失敗。
  • * 首先是火力展示。
    再來是 source code review。
    最後會藉由混合播放的方式來摸擬同步執行的感覺。
  • 簡介一下文件 (Document) 怎麼看。
    進到 Module Index 後點選 Commands Modules。
    點選 command。
  • 簡介一下文件 (Document) 怎麼看。
    進到 Module Index 後點選 Commands Modules。
    點選 command。
  • 進到 command 文件後,跳過上述簡介,因為重點在下方。
  • 可以看到 Option 的表格中有列出必需要使用的參數,可以看到 free_form 為 yes。
  • Galaxy 是官方架設的共享 Roles 網站。
  • 進到 Galaxy 的網站後,可在右上角的 Browser Roles 找到數不完的角色。
  • 可使用多個關鍵字搜尋。
  • 進入之後可以看到支援的作業系統、版本 … 等資訊。

    php7 (php-fpm) 是個同時支援 Ubuntu, Debian 和 CentOS 三大 OS 的 php7 role,也是凍仁的第一個撰寫的 role,剛剛上台前看到的下載數是 118。 - https://galaxy.ansible.com/chusiang/php7/
  • 在了解 Ansible 自動化組態技巧後,我們除了使用官方的 Module 外,更可以藉由探索 Galaxy 來擴充實力。

    讓我們一起… 「飛向宇由,浩瀚無垠!」
  • 本次只是初步介紹 Ansible,如果想快速入門建議可以花錢小錢上一下
  • 萍水相逢是我家老婆大人創立的個人品牌,提供婚禮佈置、微景觀和花藝設計等服務。如果想送禮物給女伴不知送什麼?也請聯繫我們。
  • DevOps Taiwan
  • 若大家對 Vim 有興趣也可以加入 Vim Taiwan 社群。
  • 今年 COSCUP 會在 08 月 20, 21,請大家拭目以待。
  • 今年 MOPCON 會在 10 月 29, 30,請大家拭目以待。
  • 今天的簡報就到此為止,謝謝大家的參與。
  • 回顧
  • 回顧

×