Ansible
-
- Ansible簡介
- Ansible特點
- 概念解釋
- Ansible使用過程中的角色
- Ansible通信機制
- Ansible應用場景
- Ansible工作機制
- Ansible的目錄結構
- 部署環境
- Ansible部署
-
- 添加遠端主機
Ansible簡介
常見的部署管理工具有Chef、Puppet、Ansible、SaltStack、Fabric。
Ansible釋出于2012年,其作者兼創始人是Michael DeHaan。
紅帽2015收購了Ansible母公司。
官方文檔:https://docs.ansible.com/
Ansible 是一個極其簡單的 IT 自動化引擎,可自動執行雲供應、配置管理、應用程式部署、服務内編排和許多其他 IT 需求。
Ansible主要功能是幫助運維實作IT工作的自動化、降低人為操作失誤、提高業務自動化率、提升運維工作效率。可以了解為是一種配置管理工具
常用于軟體部署自動化、配置自動化、管理自動化、系統化系統任務、持續內建、零當機平滑更新等。
Ansible完全基于Python開發,而DevOps在國内已然是一種趨勢,Python被逐漸普及,運維人員自己開發工具的門檻逐漸降低,得益于此,友善對Ansible二次開發。
Ansible豐富的内置子產品,甚至還有專門為商業平台開發的功能子產品,完全可以滿足日常功能所需。
Ansible特點
ansible是基于子產品工作的,本身沒有批量部署的能力,真正具有批量部署的是ansible所運作的子產品
ansible隻是提供一種架構.ansible不需要在遠端主機上安裝client/agents,因為它們是基于ssh來和遠端主機通訊的
在Ansible去中心化概念下,一個簡單的複制操作即可完成管理配置中心的遷移。
Agentless(無用戶端),用戶端無需任何配置,由管理端配置好後即可使用,這點非常誘人。
Ansible沒有用戶端,是以底層通信依賴于系統軟體,Linux系統下基于OpenSSH通信,Windows系統下基于PowerShell,管理端必須是Linux系統。
概念解釋
-
Control node控制節點:
任何安裝了 Ansible 的機器。可以通過從任何控制節點調用
oransible
指令來運作 Ansible 指令和 playbook 。可以使用任何安裝了 Python 的計算機作為控制節點——筆記本電腦、共享桌面和伺服器都可以運作 Ansible。但是,不能将 Windows 機器用作控制節點。可以有多個控制節點。ansible-playbook
-
Playbooks:
已儲存的有序任務清單,可以按該順序重複運作這些任務。劇本可以包括變量和任務。Playbooks 是用 YAML 編寫的,易于閱讀、編寫、共享和了解。Ansible Playbooks 提供了一個可重複、可重用、簡單的配置管理和多機部署系統,非常适合部署複雜的應用程式。如果需要多次使用 Ansible 執行任務,編寫劇本并将其置于源代碼控制之下。然後可以使用 playbook 推送新配置或确認遠端系統的配置。
-
Managed nodes托管節點:
使用 Ansible 管理的網絡裝置(和/或伺服器)。受管節點有時也稱為“主機”。Ansible 未安裝在受管節點上。
-
Inventory=:
受管節點清單。清單檔案有時也稱為“主機檔案”。清單可以為每個受管節點指定 IP 位址等資訊。清單還可以組織受管節點,建立和嵌套組以便于擴充。
-
Collections:
集合是 Ansible 内容的分發格式,可以包括劇本、角色、子產品和插件。
-
Modules:
Ansible 執行的代碼單元。每個子產品都有特定的用途,從管理特定類型資料庫上的使用者到管理特定類型網絡裝置上的 VLAN 接口。可以使用任務調用單個子產品,或調用劇本中的多個不同子產品。從 Ansible 2.10 開始,子產品被分組到集合中。
-
Tasks:
Ansible 中的動作單元。可以使用臨時指令執行一次單個任務。
Ansible使用過程中的角色
1、使用者
- CMDB存儲和管理着企業IT架構中的各項配置資訊,運維人員可以組合CMDB和Ansible,通過CMDB直接下發指令調用Ansible工具集完成操作者所希望達成的目标。
- 基于PUBLIC(公有雲)/PRIVATE(私有雲),Ansible以API調用的方式運作,Ansible提供了豐富的API語言接口:PHP、Python等。
- 直接使用Ad-Hoc臨時指令集調用Ansible工具集來完成任務執行。
- 通過執行Playbooks中預先編排好的任務集按序完成任務執行。
2、Ansible工具集(ansible指令是Ansible的核心工具,總指揮)
- INVENTORY:指令執行的目标對象配置檔案
- API:供第三方程式調用的應用程式程式設計接口
- MODULES:豐富的内置子產品
- PLUGINS:内置和可自定義的插件
3、作用對象
Ansible的作用對象,不僅僅是Linux和非Linux作業系統的主機,同樣也可以作用于各類公有雲/私有雲,商業和非商業裝置的網絡設施。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4VkeNFTQE1UMVpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2EDNzQmMiJDOyIGMlFTZhNGZ3QDOjljMxYWMhNGNwYzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Ansible通信機制
Ansible主推的賣點是其無需任何Daemon維護程序即可實作互相間的通信,且通信方式是基于業内統一标準的安全可靠的SSH安全連接配接。
無用戶端,隻需安裝SSH、Python即可。
基于OpenSSH通信,底層基于SSH協定(Windows基于PowerShell)。
支援密碼和SSH認證,建議使用公私鑰方式認證,因為密碼認證方式的密碼需明文寫配置檔案,雖然配置檔案可加密,但會增加Ansible使用的複雜度。
支援Windows,但僅支援用戶端,服務端必須是Linux系統。
Ansible應用場景
-
應用部署
Ansible内置網絡、應用、系統、第三方雲平台擴充等完善的功能子產品,協助運維快速完成應用的安裝、解除安裝、更新、啟停、配置等部署類工作,即使對跨平台或知名的商業硬體也同樣支援。
-
配置管理
Ansible内置File、Template,結合Jinja、Lineinfile等内置子產品,同時無縫結合GitHub、GitLab、Git、SVN、Jenkins等主流版本控制和CI持續內建工具,助力配置管理自動化。
-
任務流編排
有效保證Tasks任務流按既定規則和順序完成事先制訂的目标和計劃,同時Roles編排方式又能在一定程度上從書寫習慣和代碼層編排上保證整體項目的可架構性和規範性,協助控制項目維護成本不緻過高。
- 适用于網絡管理者、系統運維、應用運維、桌面運維、DevOps、基礎架構運維等多領域運維行業,上手快,效率高。
Ansible工作機制
Ansible為多層部署而設計,Ansible 通過描述所有系統如何互相關聯來為您的 IT 基礎架構模組化,而不僅僅是一次管理一個系統。
它不使用代理,也沒有額外的自定義安全基礎設施,是以易于部署。最重要的是,它使用一種非常簡單的語言(YAML,以 Ansible Playbooks 的形式),描述自動化任務。
ansible系統由控制主機和被管理主機組成,控制主機不支援windows平台。
核心: ansible
Core Modules: ansible自帶的子產品
Custom Modules: 核心子產品功能不足時,使用者可以添加擴充子產品
Plugins: 通過插件來實作記錄日志,發送郵件或其他功能
Playbooks: 劇本,YAML格式檔案,多個任務定義在一個檔案中,定義主機需要調用哪些子產品來完成的功能
Connectior Plugins: ansible基于連接配接插件連接配接到各個主機上,預設是使用ssh
Host Inventory: 記錄由Ansible管理的主機資訊,包括端口、密碼、ip等
Ansible的目錄結構
配置檔案: /etc/ansible/
執行檔案目錄: /usr/bin/
lib依賴庫: /usr/lib/python2.7/site-packages/ansible/
help檔案: /usr/lib/python2.7/site-packages/ansible
部署環境
三台虛拟機:rhel7.6的OS
server1 192.168.122.11 ansible管理端
server2 192.168.122.12 遠端主機
server3 192.168.122.13 遠端主機
Ansible部署
在真機将源放到aoache釋出目錄下(包含離線安裝包和一些依賴源)
在server1添加真機的ansible源
[ansible]
name=ansible
baseurl=http://192.168.122.1/ansible
gpgcheck=0
列出源沒問題
安裝ansible
我裝的是2.8.5版本
添加遠端主機
進入配置檔案目錄
修改主機檔案,指定遠端主機,如下圖将兩台主機配置設定到了test組(如果不指定組别,那就是預設情況下未配置設定組,Ungrouped)
ansible管理主機需要與這些主機提前做好ssh免密
如果不做免密,會出現如下情況
是以需要對管理的主機做免密
ssh-keygen
ssh-copy-id server2
ssh-copy-id server3
調用ansible下的ping這個子產品(-m指定子產品)測試成功!