Ansible和saltstack目前市面上一些其它的項目管理工具有很大的不同,它的設計初衷就是為了更方便、快捷的進行配置管理。它易於安裝和使用、語法也非常簡單易學。你可以用Ansible將平常復雜的配置工作變得簡單,變得更加標准化更容易控制。
Ansible只需要在一台普通的服務器上運行即可,不需要在被管控的服務器上安裝客戶端。因為它是基於SSH的,Linux服務器離不開SSH,所以Ansible不需要為配置工作添加額外的支持。 你可以通過命令行來使用Ansible,運行Ansible的服務器這里俗稱“管理節點”;通過Ansible進行管理的服務器俗稱“受控節點”。
Ansible是一款極為靈活的開源工具套件,能夠大大簡化Unix管理員的自動化配置管理與流程控制方式。它利用推送方式對客戶系統加以配置,這樣所有工作都可在主服務器端完成。其命令行機制同樣非常強大,允許大家利用商業許可Web UI實現授權管理與配置。
Ansible優點:
1) 輕量級,不需要去客戶端安裝agent,更新時,只需要在操作機上進行一次更新即可,采用SSH協議(免密鑰)。
2) 批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行。
3) 使用python編寫的,維護更簡單。
4) 支持sudo普通用戶命令。
Ansible安裝配置
Ansible 能夠安裝到 Linux、BSD、Mac OS X 等平台,Python 版本最低要求為 2.6。
CentOS直接使用yum安裝即可,安裝之前先安裝epel源碼。
rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
然后執行命令: yum install ansible -y 安裝即可。
安裝完后正式來使用,ansible默認配置文件路徑為:
/etc/ansible:
常見的命令參數有:
默認hosts內容可以配置分組,我們可以定義各種ip及規則,內容如下(自動化的前提就是ssh互通免密鑰):
- Ansible日常使用
ansible -i /etc/ansible/hosts all -a “date”
可以單獨匹配某個組
這里可以單獨匹配ip段
ansible主要參數如下:
-u username 指定ssh連接的用戶名,即執行后面命令的用戶
-i inventory_file 指定所使用的inventory文件的位置,默認為/etc/ansible/hosts
-m module 指定使用的模塊,默認為command,常見模塊有command、shell、script、yum、copy等等
-f 10 指定並發數,並發量大的時候,提高該值
--sudo [-k] 當需要root權限執行的化,-k參數用來輸入root密碼。
-a 指定模塊的參數,可以是命令等等。
- Ansible正則表達式使用
ansible 192.168.33.* -m command -a "df -h"
- 遠程批量拷貝文件或者目錄
ansible all -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root'
- Ansible YUM遠程批量安裝
Ansible 192.168.* -m yum -a "name=sysstat,screen,ntpdate state=installed"
Playbook配置管理
我們使用如上這些命令可以快速利用Ansible的工具編寫腳本、從而以非常簡便的方式實現任務處理的自動化與流程化。
除此之外,我們還可以創建Ansible Playbook以收集命令與任務集,這樣能夠大大降低管理工作的復雜程度。
Playbook采用YAML語法結構,因此它們一般比較易於閱讀並加以配置,如下簡單案例使用playbook實現在客戶端安裝screen軟件。
在/etc/ansible/目錄下,新建screen.yaml文件,內容如下:
- hosts: all
remote_user: root
tasks:
- name: yum install screen
shell: yum install screen -y
文件解析:-hosts:all指定對所有hosts生效,remote_user表示遠程root,tasks表示需要執行的任務;name顯示的名稱,shell后面接:需要在遠程客戶端執行的命令。可以寫多個命令,以;分號隔開即可,例如 shell: yum install screen -y ;mkdir /tmp/`date +%Y%m%d`
當然了,我們還可以定義各種不同的playbook類型,如下我們可以定義源碼安裝Nginx或者yum安裝LAMP論壇。
執行結果如下圖: