Ansible(1)- 簡單介紹

小菠蘿測試筆記發表於2021-04-25

什麼是 Ansible

  • 開源部署工具,也是一個自動化運維工具
  • 開發語言:Python

 

Ansible 的特性

  • 模組化部署管理:呼叫特定的模組,完成特定任務
  • 三個關鍵模組:Paramiko(python 對 ssh 的實現),PyYAML,Jinja2(模板語言)
  • 安全:基於 OpenSSH 協議通訊
  • 跨平臺:支援 Linux、Win、UNIX、物理機、虛擬機器、雲平臺、網路 
  • 部署簡單,無需編譯:基於 Python 和 SSH(預設已裝),agentless(免代理),無需代理不依賴 PKI(無需 SSL)
  • 支援自定義模組:支援任何程式語言編寫模組(二次開發)
  • 冪等性:一個任務執行一遍和執行 n 遍的結果是一樣的,不因重複執行而帶來意外情況
  • 支援 playbook 編排任務,YAML 語法格式,編排任務,支援豐富的資料結構
  • 強大的多層解決方案 role
  • 支援異構 IT 架構

 

Ansible 的應用場景

  • 批量修改系統配置
  • 批量程式部署
  • 批量執行命令

 

Ansible、Cherf、Saltstack 的不同

Saltstack

  • Ruby 語言編寫
  • C/S架構
  • 配置需要 Git 依賴
  • Recipe 指令碼編寫規範,需要 Ruby 程式設計經驗

 

Saltstack

  • Python 語言編寫
  • C/S架構
  • 模組化配置管理
  • YAML 指令碼編寫規範
  • 適合大規模叢集部署

 

Ansible

  • Python 語言編寫
  • 無 Client
  • 模組化配置管理
  • Playbook 指令碼編寫規範
  • 易於上手,適合中小規模快速部署

 

Ansible 最大的優勢

  • 符合最近幾年流行的敏捷開發流程,快速開發快速部署交付
  • 我們需要有高效、敏捷的部署工具,加快產品交付
  • 相容主流雲端計算下所有用到的基礎工具

 

Ansible 的架構

  • ANSIBLE PLAYBOOKS :任務劇本,編排定義 Ansible 任務集的配置檔案,由 Ansible 順序執行,通常為 json 格式的 YAML 檔案
  • INBENTORY:需要 Ansible 管理主機的清單列表  /etc/anaible/hosts 
  • MODULES:Ansible 的執行命令的功能模組,多數為內建核心模組,也可以自定義
  • PLUGINS:模組功能補充,比如連結型別外掛、迴圈外掛、變數外掛、過濾外掛等,不常用
  • API:供第三方程式呼叫的應用程式程式設計介面
  • HOSTS:待 Ansible 管理的主機集
  • NETWORKING:網路

它們互相之間都是通過 SSH 互相呼叫

 

Ansible 命令執行來源

  • USERS:普通使用者
  • PLAYBOOKS:任務劇本
  • CMDB:配置管理資料庫,通過 API 呼叫
  • PUBLIC/PRIVATE CLOUD:公有云、私有云,通過 API 呼叫

 

Ansible 的概念

Control node

控制節點

  • 可以是任何安裝了 Ansible 的計算機,但不能是 Window 系統
  • 可以從任意控制節點執行命令和 playbook,然後呼叫  /usr/bin/ansible 或  /usr/bin/ansible-playbook 
  • 可以將任何安裝了 Python 的計算機作為控制節點,比如膝上型電腦、桌上型電腦、伺服器

 

Managed nodes

受管節點

  • 受管節點不需要安裝 Ansible
  • 它可以是通過 Ansible 管理的網路裝置或伺服器
  • 它也可以稱為 hosts(主機)

 

Inventory

清單

  • 需要 Ansible 管理的主機清單
  • 它也可以稱為 hostfile(主機檔案)
  • 它有多種方式去管理組織主機的資訊

 

Modules

模組

  • 執行程式碼單元
  • 在 python 中,一個模組是一個 .py 檔案,這裡也可以這樣理解,每個模組都會有特定的功能
  • 可以通過 task 呼叫單個模組,也可以通過 playbook 呼叫多個不同的模組
  • Ansible 目前有 3000+ 個模組

 

Tasks

任務 

  • 行動單元
  • 可以使用臨時命令(ad-hoc)每次執行一個任務

 

Playbooks

劇本(直譯)

  • 儲存任務的有序列表,方便可以按順序重複執行這些任務(複用性)
  • playbook 可以包括變數、任務
  • 採用 YAML 語法格式