DevOps課程-Configuration Management with Ansible 1

Introduction to Ansible

ZONGRU Li
Mar 29, 2022

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支援多種作業系統與雲端供應商

Ansibleagentless,在有安裝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
link

另外Ansible受歡迎的原因是使用簡單的YAML語法

例如以下Jenkins Module:

link

或是Docker Module:

link

或是Postgresql Module:

link

如上Module具有極小的顆粒度又單一

所以可以設計得出很多Module並依據特定順序執行

且可以將多個Modules化作同一group內執行 — Ansible Playbooks

Ansible Playbooks:

  • 單一個Task內會有多個Module定義:
  • 並且執行上會依照modules順序執行

Ansible task會在哪裡執行,被誰執行?

  • HOSTS:
  • remote_user:

並且也支援變數:

而如上整段Code則稱為一個"Play"

其定義了:

which tasks

which hosts

which user

AnsiblePlaybook = 1個或多個Play定義在單一個YAML

如上Playbook亦即定義了如何執行及執行順序

並且何時在哪裡(機台)執行

及執行什麼(Module) — 也就是Module執行的編排

並且也能給予每個Play名稱(best practice):

再來問題可能是hosts:

這些hosts位置通常則另外定義於 — Ansible Inventory List

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同時管理Container and Host

Ansible Tower:

  • Redhat建立的Ansible介面
  • 主要協助團隊集中儲存管理自動化任務,及管理權限
  • 以及管理上面提到的Inventory

比較與Ansible類似的工具:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet