Ansible 基於 Python 語言實現,由 Paramiko 和 PyYAML 兩個關鍵模塊構建。html
一、部署簡單,只需在主控端部署 Ansible 環境,被控端無需作任何操做。
二、默認使用 SSH(Secure Shell)協議對設備進行管理。
三、主從集中化管理。
四、配置簡單、功能強大、擴展性強。
五、支持 API 及自定義模塊,可經過 Python 輕鬆擴展。
六、經過 Playbooks 來定製強大的配置、狀態管理。
七、對雲計算平臺、大數據都有很好的支持。
八、提供一個功能強大、操做性強的 Web 管理界面和 REST API 接口 —- AWX 平臺。python
一、最大的區別是 Ansible 無需在被監控主機部署任何客戶端代理,默認經過 SSH 通道進行遠程命令執行或下發配置。
二、相同點是都具有功能強大、靈活的系統管理、狀態配置,都使用 YAML 格式來描述配置,二者都提供豐富的模板及 API,對雲計算平臺、大數據都有很好的支持。nginx
yum -y install ansible
tree /etc/ansible/ /etc/ansible/ ├── ansible.cfg # ansible.cfg 是 Ansible 工具的配置文件; ├── hosts # ansible的主倉庫 用來存儲須要管理的遠程主機的相關信息 └── roles # roles 是一個目錄,playbook 將使用它
ssh-keygen -t rsa ssh-copy-id root@agent_host_ip
vim /etc/ansible/hosts [Client] angent_host_ip_1 angent_host_ip_2
shell > ansible Client -m ping # 操做 Client 組 ( all 爲操做 hosts 文件中全部主機 ),-m 指定執行 ping 模塊,下面是返回結果 192.168.12.129 | SUCCESS => { "changed": false, "ping": "pong" } # -i 指定 hosts 文件位置 # -u username 指定 SSH 鏈接的用戶名 # -k 指定遠程用戶密碼 # -f 指定併發數 # -s 如須要 root 權限執行時使用 ( 鏈接用戶不是 root 時 ) # -K -s 時,-K 輸入 root 密碼
shell > vim /etc/ansible/hosts www.abc.com # 定義域名 192.168.1.100 # 定義 IP 192.168.1.150:37268 # 指定端口號 [WebServer] # 定義分組 192.168.1.10 192.168.1.20 192.168.1.30 [DBServer] # 定義多個分組 192.168.1.50 192.168.1.60 Monitor ansible_ssh_port=12378 ansible_ssh_host=192.168.1.200 # 定義別名 # ansible_ssh_host 鏈接目標主機的地址 # ansible_ssh_port 鏈接目標主機的端口,默認 22 時無需指定 # ansible_ssh_user 鏈接目標主機默認用戶 # ansible_ssh_pass 鏈接目標主機默認用戶密碼 # ansible_ssh_connection 目標主機鏈接類型,能夠是 local 、ssh 或 paramiko # ansible_ssh_private_key_file 鏈接目標主機的 ssh 私鑰 # ansible_*_interpreter 指定採用非 Python 的其餘腳本語言,如 Ruby 、Perl 或其餘相似 ansible_python_interpreter 解釋器 [webservers] # 主機名支持正則描述 www[01:50].example.com [dbservers] db-[a:f].example.com
shell > ansible-doc -l # 列出 Ansible 支持的模塊 shell > ansible-doc ping # 查看該模塊幫助信息
command 做爲 Ansible 的默認模塊,能夠運行遠程權限範圍全部的 shell 命令,不支持管道符。 shell > ansible Client -m command -a "free -m" # 查看 Client 分組主機內存使用狀況
script 的功能是在遠程主機執行主控端存儲的 shell 腳本文件,至關於 scp + shell 組合。 shell > ansible Client -m script -a "/home/test.sh 12 34" # 遠程執行本地腳本
shell模塊基本和command相同,可是shell支持管道符 shell > ansible Client -m shell -a "/home/test.sh" # 執行遠程腳本
實現主控端向目標主機拷貝文件,相似於 scp 功能 shell > ansible Client -m copy -a "src=/home/test.sh dest=/tmp/ owner=root group=root mode=0755" # 向 Client 組中主機拷貝 test.sh 到 /tmp 下,屬主、組爲 root ,權限爲 0755
獲取遠程文件狀態信息,atime/ctime/mtime/md5/uid/gid 等信息 shell > ansible Client -m stat -a "path=/etc/syctl.conf"
實如今遠程主機下載指定 URL 到本地,支持 sha256sum 文件校驗 shell > ansible Client -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
軟件包管理 shell > ansible Client -m yum -a "name=curl state=latest"
遠程主機 crontab 配置 shell > ansible Client -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'" 效果: * 5,2 * * * ls -alh > /dev/null
遠程主機分區掛載 shell > ansible Client -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"
遠程主機系統服務管理 shell > ansible Client -m service -a "name=nginx state=stoped" shell > ansible Client -m service -a "name=nginx state=restarted" shell > ansible Client -m service -a "name=nginx state=reloaded"
遠程主機用戶管理 shell > ansible Client -m user -a "name=wang comment='user wang'" shell > ansible Client -m user -a "name=wang state=absent remove=yes" # 添加刪除用戶