天天看點

00-Ansible開篇

一、Ansible 概述

Ansible 是一個配置管理和自動化運維工具。Ansible 基于 Python 語言實作,由Paramiko和PyYAML兩個關鍵子產品建構。Ansible 集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優點,實作了批量系統配置、批量程式部署、批量運作指令等功能(比如:同時在100台伺服器上執行修改密碼操作;同時在200台伺服器上安裝nginx服務,并在安裝後啟動它們;将某個檔案一次性拷貝到300台伺服器上)。Ansible 具有以下特點:

部署簡單,隻需要在主要端部署 Ansible 環境,被控端無需做任何操作;

子產品化設計,調用特定的子產品來完成特定任務,本身是核心元件,短小精悍;

預設使用 SSH(Secure SHell)協定對裝置進行管理;

支援非root使用者管理操作,支援sudo,權限管理分級明确;

主從集中化管理;

配置簡單、功能強大、擴充性強;

支援 API 及自定義子產品,可通過 Python 輕松擴充;

通過 Playbooks 來定制強大的配置、狀态管理;

對雲計算平台、大資料都有很好的支援;

提供一個功能強大、操作性強的 Web 管理界面和 REST API 接口——AWX 平台;

幂等性:一種操作重複多次結果相同。

二、Ansible 架構

Ansible 是基于子產品工作的,本身沒有批量部署的能力。真正實作批量部署的是 Ansible 所運作的子產品,Ansible 隻是提供一種架構。主要包括:

Ansible:Ansible自身核心子產品;

Connection Plugins:連接配接插件,負責和被管理主機通信(通過SSH或者ZeroMQ連接配接到主機);

Host Inventory:主機庫,定義被管理的主機清單;

Modules:各種子產品,包括核心子產品、自定義子產品。Ansible 管理主機之前,先調用 Core Modules 中的子產品,然後指明管理 Host Inventory 中的主機,就可以完成管理主機。如果核心子產品不足以完成某種功能,可以添加自定義子產品,此子產品支援任何語言編寫。

Plugins:完成子產品功能的補充,借助于插件完成記錄日志、發送郵件等功能;

Playbooks:定義 Ansible 任務的配置檔案,可以将多個任務定義在一個 Playbook 中,由 Ansible 自動執行。Playbook 執行支援多個任務,可以由管理主機運作多個任務,同時對多台被管理主機進行管理。

00-Ansible開篇

三、Ansible 執行模式及執行過程

Ansible 系統由控制主機對被管理節點的操作分為兩類,即 ad-hoc 和 playbook:

(1)ad-hoc:使用單個子產品,支援批量執行單條指令。

(2)playbook:Ansible 主要管理方式,功能強大。playbook 通過多個 task 集合完成一類功能,實作如 Web 服務的安裝部署,資料庫服務的批量備份等。可簡單把 playbook 了解成組合多條 ad-hoc 操作的配置檔案。

ad-hoc 指令更注重于解決一些簡單或平時工作中臨時遇到的任務,相當于 Linux 系統指令行下的 Shell 指令;而 ansible-playbook 更适合于解決複雜或固化下來的任務,相當于 Linux 系統的 Shell Scripts。隻有靈活運用 ansible-playbook 才能更好的體會到 Ansible 的強大。

Ansible 執行過程如下圖所示:

00-Ansible開篇

四、總結

本節我們了解了 Ansible 是什麼,能做什麼,有哪些特點,由哪些部分組成,如何執行操作以及執行的流程。下一節我們學習如何安裝配置 Ansible。

參考文檔:

https://baike.baidu.com/item/ansible/20194655 https://www.cnblogs.com/waynechou/p/ansible_detail.html http://www.ilurker.cn/?post=282 http://www.zsythink.net/archives/2481

《Ansible自動化運維:技術與最佳實踐》