配置管理工具--Ansible入門
Ansible是平時工作中經常使用的一款軟件,特別有些命令需要同時在眾多服務器運行時,Ansible就顯得不可或缺。準備寫幾篇文章,做成一個系列介紹Ansible,主要覆蓋工作中常用的場景,力求簡潔實用。本篇是開篇。
Ansible是一種配置管理工具,和Salt、Chef、Puppet功用一樣。對于系統管理員,平時有不少工作內容是給服務器安裝軟件,更改配置等,服務器兩三臺的話,單個登錄,執行安裝配置命令還可以應付,幾十上百臺的話,可能就力不從心了,這時就需要配置管理工作如Ansible的幫助,你可以像管理一臺服務器那樣管理成百上千臺服務器,想想就舒服。
一、工作原理
Ansible基于Python的paramiko模塊開發(paramiko模塊是純Python的SSH協議實現),Ansible通過SSH協議推送自身模塊到被管理服務器,執行完成后自動刪除并退出。這些模塊就是實現特定功能的代碼(不限于Python代碼實現),實際上只要可以返回要求格式的json格式就可以,對實現模塊的語言沒有要求。
一句話概括,Ansible依賴paramiko實現的SSH協議推送實現特定功能的模塊到目標服務器執行,完成后刪除并退出。
二、相關概念
- 模塊:實現特定功能的代碼,安裝ansible會自帶,也可以自己實現。
- 插件:模塊功能的補充,有連接插件、郵件插件等。
- Playbook:即編排腳本,一些復雜的安裝維護工作,比如有很多依賴的安裝配置,可以使用Playbook腳本。
- Inventory:定義Ansible管理的主機,配置到Inventory文件的服務器Ansible才可以感知到。
三、安裝配置
(1)安裝
很多Linux發行版的包管理工具中都內置Ansible,筆者使用的系統是CentOS 7.9(Python版本為3.6.8),可以使用“yum install ansible”來安裝,但是包管理工具安裝的版本一般比較老,這里使用pip命令來安裝,有一點要注意,因為Python 2.7已經不再維護,這里使用Python3來安裝Ansible。
python3 -m pip install ansible
這樣就完成了管理主機的Ansible安裝。被管理主機雖然不需要像Salt那樣安裝agent,但是SSH和Python還是需要的,如果沒有,記得安裝。
(2)配置
- ansible.cfg:Ansible的配置文件,可以將一些默認選項寫到里面。
- inventory:包含需要管理的服務器信息,比如下面。
[db]
192.168.52.128
[web]
192.168.52.131
192.168.52.132
四、命令使用
Ansible主要有兩種使用場景,簡單的命令執行可以直接運行“ansible”命令,不需要“playbook.yaml”文件,比如查找服務器的當前負載。執行命令之前,配置被管理主機的SSH免密登錄,這樣可以減少很多工作。使用上面的inventory文件。
[aneirin@a ansible]$ ansible -i inventory web -m command -a uptime
192.168.52.131 | CHANGED | rc=0 >>
15:52:36 up 8:38, 2 users, load average: 0.46, 0.83, 0.66
192.168.52.132 | CHANGED | rc=0 >>
15:52:37 up 8:40, 2 users, load average: 0.14, 0.43, 0.35
ansible命令參數包含兩個部分:“-i inventory web”指明要操作的對象為inventory文件中的web主機組;“-m command -a uptime”,使用command模塊,模塊參數為“uptime”。
工作中一般這樣使用,創建一個工作目錄:ansible-tasks,目錄中創建如下文件。
[aneirin@host ansible-tasks]$ tree
.
├── ansible.cfg
└── hosts
0 directories, 2 files
ansible.cfg:
[aneirin@host ansible-tasks]$ cat ansible.cfg
[defaults]
host_key_checking = False
inventory = hosts
上面的命令便可以這樣運行:“ansible web -a uptime”,因為command模塊是ansible的默認模塊,可以不用寫,僅寫參數就行了。
最后,將Ansible的工作目錄“ansible-tasks”用類似git的版本管理工具管理起來,方便回退。