DevOps課程-Configuration Management with Ansible 1
What is Ansible?
- Tool to automate IT task
- →What IT task?
- →Why it’s good to automate them?
例如考量到有10台Server機台,分別佈署了同樣APP 1.0版
今天要進行這10台機台APP升級為2.0版
又或者是這10台機台的Docker版本要升級
這過程可能涉及每一個機台許多步驟
例如重啟某些process,重設環境變數...etc
並且可能是寫好script透過SSH分別進到每一個Server操作
過程還要寫筆記小抄隨時記得做到哪一台Server哪一個步驟
以上問題Ansible都可以解決
使用Ansible的四種方式:
- 在個人機器(電腦)上執行Tasks
- 在單一個YAML檔案內編寫Config/安裝/佈署步驟
- 針對不同環境可以重複使用相同檔案好幾次
- 可靠且較少人為造成的錯誤
Ansible支援多種作業系統與雲端供應商
Ansible是agentless,在有安裝Ansible(稱為控制機)透過SSH去設定目標機台
亦即在需要Ansible設定的目標機台不需要安裝任何Ansible相關軟體
也就是可以remote地管理目標機台的設定
這好處是初始沒有安裝的需求,也沒有因應升級造成額外的工作
Ansible Architecture:
1.Modules
- Modules=Small programs that do the actual work
- Module小到可以只是啟動Nginx,或安裝Nginx,或建立檔案複製檔案
- 或是建立Cloud instance,啟動Docker container…etc
另外Ansible受歡迎的原因是使用簡單的YAML語法
例如以下Jenkins Module:
或是Docker Module:
或是Postgresql Module:
如上Module具有極小的顆粒度又單一
所以可以設計得出很多Module並依據特定順序執行
且可以將多個Modules化作同一group內執行 — Ansible Playbooks
Ansible Playbooks:
- 單一個Task內會有多個Module定義:
- 並且執行上會依照modules順序執行
Ansible task會在哪裡執行,被誰執行?
- HOSTS:
- remote_user:
並且也支援變數:
而如上整段Code則稱為一個"Play"
其定義了:
which tasks
which hosts
which user
而Ansible有Playbook = 1個或多個Play定義在單一個YAML檔
如上Playbook亦即定義了如何執行及執行順序
並且何時在哪裡(機台)執行
及執行什麼(Module) — 也就是Module執行的編排
並且也能給予每個Play名稱(best practice):
再來問題可能是hosts:
這些hosts位置通常則另外定義於 — Ansible Inventory List
也可以定義hostname:
並且是可以做到group機台群組的概念,單一個名稱對應多台
Ansible普遍使用場景:
1.Ansible for Docker
- 普遍建立Docker Container會需要在Dockerfile內定義config file,log dir,env variable,start script,及最重要的app.jar
- 但是Dockerfile僅僅只能建立image來建置Docker Container
- 而透過Ansible一樣可以定義config file,log dir,env variable,start script,及最重要的app.jar
- 並且透過這個Ansible可以建置Docker Container,VagrantContainer,CLOUD INSTANCE,BARE METAL
更甚者,Andible還可以管理Container所在的Host資源
甚至是Container所需要的Storage,Network:
Ansible Tower:
- 由Redhat建立的Ansible介面
- 主要協助團隊集中儲存管理自動化任務,及管理權限
- 以及管理上面提到的Inventory