天天看點

[Ansible專欄]Ansible介紹

微信公衆号:運維開發故事,作者:姜總

目錄

  • 一、Ansible發展和起源
  • 二、為什麼需要Ansible
  • 三、Ansible的主要功能
  • 四、Ansible的相關特性
  • 五、Ansible的優點
  • 六、Ansible的架構

一、Ansible發展和起源

Ansible是一款開源的IT配置管理工具,常被IT界的小夥伴們用于服務部署、配置管理等工作。配置檔案采用最常見的yaml格式,學習起來也是比較容易,并且不像SaltStack,Ansible并不需要也沒有agent,隻有一個控制端。該工具使用簡單但功能非常強大,可以解決衆多工作中繁瑣的服務安裝、配置等問題。

Ansible的第一個版本是0.0.1,釋出于2012年3月9日,其作者兼創始人是Michael DeHaan。迄今為止已經發展到了2.9版本。并且它的關注度、Star數以及Fork的次數都位居榜首。就連強大的SaltStack也隻能排到第二。

Michael DeHaan在配置管理和架構設計方面有豐富的經驗,曾就職于RedHat公司,在RedHat任職期間主要開發了Cobble。在他嘗試了各種自動化工具Puppet、Chef之後,決定自己打造一款能夠結合衆多有點的自動化工具。由此,便有了Ansible這款易了解、易上手、閱聽人人喜愛的自動化工具。

二、為什麼需要Ansible

前面說過,ansible通常用于自動化的場景,多用在服務部署、配置管理方面。随着時間推移和公司發展,項目越來越多,團隊日益壯大,各種公司内部開發的應用、第三方開源的中間件等服務越來越多,那麼管理起來就相對比較困難,人肉操作已經完全滿足不了傳統的運維工作,需要消耗相當多的時間來進行變更,進而阻礙了開發人員的速度,極大的降低了工作效率。顯然可考又高效的部署和管理成為了公司的一大難點與挑戰。那麼一款高效且可靠的服務部署和管理工具就顯得尤為重要。而在很長一段時間裡,Docker容器與kubernetes容器編排系統沒有被廣泛的普及之前,有很大一部分人在使用Jenkins + Ansible進行CICD。

三、Ansible的主要功能

  • 批量執行遠端指令:可以對任意多台主機同時進行指令的執行。
  • 批量配置軟體服務:可以進行自動化的方式部署、配置及管理服務。
  • 編排進階的IT任務:Ansible 可以使用yaml來編寫一套完整的Playbook,用來部署維護一套完全的基礎架構。

四、Ansible的相關特性

Ansible是基于每個子產品進行工作,自身并沒有批量部署的能力,ansible自身隻是提供了一種架構。

  • Ansible由Python語言開發,沒有agent,不需要在被管理節點安裝任何用戶端;
  • 子產品化:基于子產品工作,秩序調用特定的子產品來完成特定工作;
  • 基于SSH協定;
  • 三大關鍵組成子產品:Paramiko, PyYAML, Jinja2;
  • 幂等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況;
  • 可以使用指令行ad-hoc方式來執行批量任務,也可以使用yaml格式的檔案來定制Playbook劇本實作批量任務;
  • 可以使用Role組織批量任務

五、Ansible的優點

  • 容易學習且輕量:無需在被控制節點安裝agent,做批量操作時隻需要在操作機操作即可(前提:需要配置好免密登入);
  • 操作靈活:具有衆多的子產品,可使用指令行ad-hoc方式或者Playbook劇本的方式來實作批量任務執行;
  • 可移植性高:可以基于yaml檔案編寫一套Playbook,隻要做好邏輯判斷,就可以在多種作業系統上拿來即用;
  • 幂等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況;
  • 支援普通使用者sudo提權。

但是任何事物都具有兩面性。SSH雖好,但如果被管理的機器數量衆多的話,執行的速度就會比較慢,就需要進行一定的優化和分批任務來緩解速度問題。

六、Ansible的架構

Ansible由以下幾個核心工具組成:

  • INVENTORY:Ansible管理主機的清單​

    ​/etc/anaible/hosts​

    ​;
  • MODULES:Ansible執行指令的功能子產品,多數為内置核心子產品,也可自定義;
  • PLUGINS:子產品功能的補充,如連接配接類型插件、循環插件、變量插件、過濾插件等;
  • APl:供第三方程式調用的應用程式程式設計接口。

在日常工作中,我們大多數用到的且使用比較頻繁的主要是:Inventory 和 Modules。通常我們會根據項目的需求來定制化我們的Inventory,不會将它放在預設的​

​/etc/anaible/hosts​

​檔案中。

需要提醒大家的是:

Ansible更新後,很多之前的方法在一段時間後或者說在某個版本後就會完全廢棄掉,這點和目前Kubernetes的API廢棄有點像。但是當你在某個高版本去使用低版本提供的方法時,它會在你執行playbook的時候給出warning警告,可以根據警告再去查詢官方文檔上對應版本的使用方法

Ansible官網:https://docs.ansible.com/

溫馨提示