Ansible介紹及安裝
一. ansible自動化運維完成的功能
在運維工程中,我們部署一臺使其能夠在生產環境中使用大致經過一下步驟:
- 安裝主機。
- 部署中間件,運行環境等。
- 安裝我們實際生產的應用程序。
這一系列步驟如果人工一步步去配置話,需要花費大量的時間。特別是在生產環境中,我們爲了提高線上環境的可用性,要儘量減少不可用時間,我們可以使用高可用以增加可用性。儘管有高可用但在實際情況下,也會導致生產環境不可用,例如自然災害等不可抗力。那麼我們就需要有一種工具能快速部署線上環境,在主機只用幾百來臺的情況下ansible就是一個不錯的選擇。
Ansible自動化運維完成的功能:
- 實現多主機並行執行命令
-
批量安裝部署線上環境
簡而言之,他可以實現OS以上的全部功能。注意安裝操作系統這一功能現在處於實際測試環境下,不能使用。
二. Ansible簡介
ansible運維工具,他不需要在被管理的主機上安裝代理程序已接收ansible發來的指令,ansible管理被主機是通過ssh連接來管理。它屬於無agent運維工具。相反像zabbix我們需要在被管理主機上安裝zabbix-agant程序包,故zabbix是有agent端運維工具。
1. Ansible特點
- 部署簡單,只需在主控端部署ansible環境
- 冪等性,同一命令能夠執行多次,但要注意的是實行的命令要具備冪等性特性,否則會報錯。
- 默認使用SSH協議管理主機。
- 提供了豐富的模塊,並支持自主開發新模塊。
- 通過playbook編排,管理。並且playbook使用yaml語法。
- 支持雲平臺和大數據。
2. Ansible架構圖
Ansible核心組件說明
-
Ansible:Ansible的核心程序,後面會詳細介紹ansible的使用
-
Host Lnventory:記錄了每一個由Ansible管理的主機信息,信息包括ssh端口,root帳號密碼,ip地址等等。默認資產文件是在/etc/ansible/hosts中定義。
-
Playbooks:YAML格式文件,組織了多個模塊功能,在統一調用。
-
Core Modules:Ansible執行任何管理任務都不是由Ansible自己完成,而是由核心模塊完成;Ansible管理主機之前,先調用core Modules中的模塊,然後指明管理Host Lnventory中的主機,就可以完成管理主機。
-
Custom Modules:自定義模塊,完成Ansible核心模塊無法完成的功能,此模塊支持任何語言編寫。
- Connection Plugins:連接插件,Ansible和Host通信使用
ansible大致工作流程:
用戶向ansible發送請求,但ansible不處理任何請求,所用的請求都由相應的模塊完成,core模塊是自帶,用戶也可以自己寫模塊以完成相應的功能。而命令執行的主機來自inventory file。連接主機使用連接引擎,默認是使用ssh引擎。而playbook是將一個完成任務的命令放在一個文件中執行。
三. Ansible基礎環境的安裝和配置
1. Ansible安裝及重要文件介紹
安裝
~] yum install ansible
二進制文件
~] rpm -ql ansible | less
/usr/bin/ansible : 用於在指定主機上運行任務。
/usr/bin/playbook : 用於運行playbook。
/usr/bin/ansible-doc : 用於查看ansible中個模塊的使用方法。
Inventory資產清單
/etc/ansible/hosts
ansible配置文件
/etc/ansible/ansible.cfg
配置文件使用的類似ini風格
[defaults]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
從各個方面定義了ansible的默認行爲,以及特性。詳細介紹請看官方文檔配置文件介紹
相關配置
- inventory = /etc/ansible/hosts :設置inventory文件目錄
-
gathering = implicit :是否獲取被控主機參數信息
implicit:默認獲取主機facts, 使用gather_facts=False關閉 explicit:默認不獲取主機facts,使用gather_facts=True關閉
-
gather_subset = all :指明獲取被控主機那些facts信息,最終作爲變量可以被yaml和jinja2文件應用
他將主機的信息分爲多個子系統: all - 獲取所有子系統的信息 network - 獲取網絡facts hardware - 獲取主機硬件facts virtual - 獲取虛擬化fact facter - 從factoer中獲取facts ohai - 從ohai獲取facts
2. 配置SSH連接
Ansible master主控端:192.168.200.135
Ansible node1 節點機:192.168.200.136
Ansible node2 節點機: 192.168.200.137
Ansible主控端配置 :
生成rsa算法密鑰對
默認即可,直接回車,生成的密鑰對默認情況下放在家目錄中隱藏目錄.ssh。
其中,id_rsa爲私鑰,id_rsa.pub爲公鑰。
拷貝公鑰到被管理主機
此命令會將私鑰文件本機id_rsa.pub文件的內容複製到192.168.200.136的/root/.ssh/authorized_keys文件中,如下圖
本機在/root/.ssh/known_hosts中記錄了遠程主機的信息,如下圖
測試遠程連接是否成功
由上圖可看出遠程登錄成功。
3. 測試Ansible功能
表明Ansible配置成功了。
四. 術語
術語 | 解釋 |
---|---|
Action | 它是一個task的具體表現,而一個action是模塊和其對應參數的運行 |
Facts | 它是遠程主機的信息,使用setup模塊獲取,可在配置文件通過gather_subset設置獲取的值 |
Forks | Ansible主控端連接主機可併發運行,默認是5,可在配置文件修改forks參數設置 |
Handlers | 觸發器,它實際也是一個task,這個task只會被notify觸發,例如,我們配置文件修改後會重啓服務。一個Handlers如果被多個task調用只會執行一次。handlers運行順序是其列出來的順序而不是觸發的順序。 |
Inventory | 它是一個文件,用於描述主機和組 |
Jinja2 | 他像一個插入型語言,例如php,jsp可以進行變量替換,運算等 |
Notify | 用於task中,給task註冊了一個事件,一旦發生改變就會觸發對應的task執行, |
paramiko | ansible默認使用的庫,用戶ssh連接 |
Playbooks | 它是一種語言,ansible用其編排,配置,管理,部署系統 |
Roles | 它是一個組織單元,以實現一個特殊的功能,例如安裝一個nginx,他就可以編寫成一個role。這樣方便重複利用 |
Tags | playbook中用於標記一個task,在執行時可以只執行指定的task,也可跳過指定的的task |
Templates | 它使用jinga2的模板引擎,可以使用fact變量,host變量,group變量 |
When | 用於task中。是判斷語句,當判斷爲假是task不會執行 |
YAML | 使用yaml定義palybook |