Ansible
簡介:
Ansible是一個基於python開發的配置管理和應用部署工具,現在也在自動化管理領域大放異彩。它融合了眾多老牌運維工具的優點,Pubbet和Saltstack能實現的功能,Ansible基本上都可以實現。
Ansible能批量配置、部署、管理上千台主機。比如以前需要切換到每個主機上執行的一或多個操作,使用Ansible只需在固定的一台Ansible控制節點上完成所有主機的操作。
Ansible是基於模塊工作的,它只是提供了一種運行框架,它本身沒有完成任務的能力,真正執行操作的是Ansible的模塊,比如copy模塊用於拷貝文件到遠程主機上,service模塊用於管理服務的啟動、停止、重啟等。
Ansible其中一個比較鮮明的特性是Angentless,即無Agent的存在,它就像普通命令一樣,並非C/S軟件,也只需在某個作為控制節點的主機上安裝一次Ansible即可,通常它基於ssh連接來控制遠程主機,遠程主機上不需要安裝Ansible或其它額外的服務。
使用者在使用時,在服務器終端輸入命令或者playbooks,會通過預定好的規則將playbook拆解為play,再組織成ansible可以識別的任務,調用模塊和插件,根據主機清單通過ssh將臨時文件發給遠程的客戶端執行並返回結果,執行結束后自動刪除。
Ansible的另外一個比較鮮明的特性是它的絕大多數模塊都具備冪等性(idempotence)。所謂冪等性,指的是多次操作或多次執行對系統資源的影響是一致的。比如執行systemctl stop xxx命令停止服務,當發現要停止的目標已經處於停止狀態,它什么也不會做,所以多次停止的結果仍然是停止,不會改變結果,它是冪等的,而是systemctl restart xxx是非冪等的。
Ansible的很多模式在執行時都會先判斷目標節點是否要執行任務,所以,可以放心大膽地讓Ansible去執行任務,重復執行某個任務絕大多數時候不會產生任何副作用。
ansible 環境安裝部署
ansible命令行模塊
命令格式:ansible <組名> -m <模塊> -a <參數列表> |
1、command模塊
在遠程主機執行命令。不支持管道,重定向等shell的特性
2、shell模塊
在遠程主機執行命令,相當於調用主機的shell進程,然后再該shell下打開一個子shell運行命令(支持管道符號等功能)
3、cron模塊
在遠程主機定義任務計划。其中有兩種狀態(state):present表示添加(可以省略),ansent表示移除
4、user模塊
用戶管理的模塊
常用的參數:
name | 用戶名,必選參數 |
state=present|absent | 創建賬號或者刪除賬號,present表示創建,absent表示刪除 |
system=yes|no | 是否為系統賬號 |
uid | 用戶uid |
group | 用戶基本組 |
shell | 默認使用的shell |
move_home=yes|no | 如果設置的家目錄已經存在,是否將已經存在的家目錄進行移動 |
password | 用戶的密碼。建議使用加密后的字符串 |
command | 用戶注釋信息 |
remove=yes|no | 當state=absent時,是否刪除用戶的家目錄 |
5、group模塊
用戶組管理的模塊
6、copy模塊
用於復制指定主機文件到遠程主機
常用參數:
dest | 指出復制文件的目標及位置,使用絕對路徑,如果是源目錄,指目標也要是目錄,如果目標文件已經存在會覆蓋原有的內容 |
src | 指出源文件的路徑,可以使用相對路徑或絕對路徑,支持直接指定目錄,如果源是目錄則目標也要是目錄 |
mode | 指出復制時,目標文件的權限 |
owner | 指出復制時,目標文件的屬主 |
group | 指出復制時,目標文件的屬組 |
content | 指出復制到目標主機上的內容,不能與src一起使用 |
7、file模塊
設置文件屬性
8、hostname模塊
用於管理遠程主機上的主機名
9、ping模塊
檢測遠程主機的連通性
10、yum模塊
在遠程主機上安裝與卸載軟件包
11、service/systemd模塊
用於管理遠程主機上的管理服務的運行狀態
常用參數:
name | 被管理的服務名稱 |
state=started|stopped|restarted | 動作包含啟動關閉或重啟 |
enable=yes|no | 表示是否設置該服務開機自啟 |
runlevel | 如果設定了enabled開機自啟,則要定義在那些運行目標下自啟動 |
12、script模塊
實現遠程批量運行本地的shell腳本
13、setup模塊
facts組件是用來收集被管理節點信息,使用setup模塊可以獲取這些信息
inventory 主機清單
Inventory支持對主機進行分組,每個組內可以定義多個主機,每個主機都可以定義任何一個或多個主機組內
inventory 中的變量
Inventory變量名 | 含義 |
ansible_host | ansible連接節點時的IP地址 |
ansible_port | 連接對方的端口號,ssh連接時默認為22 |
ansible_user | 連接對方主機時使用的主機名。不指定時,將使用執行ansible或ansible-playbook命令的用戶 |
ansible_password | 連接時的用戶的ssh密碼,僅在未使用密鑰對驗證的情況下有效 |
ansible_ssh_private_key_file | 指定密鑰認證ssh連接時的私鑰文件 |
ansible_ssh_common_args | 提供給ssh、sftp、scp命令的額外參數 |
ansible_become | 允許進行權限提升 |
ansible_become_method | 指定提升權限的方式,例如可使用sudo/su/runas等方式 |
ansible_become_user | 提升為哪個用戶的權限,默認提升為root |
ansible_become_password | 提升為指定用戶權限時的密碼 |
(1)主機變量
(2)組變量
(3)組嵌套