Ansible 是一個自動化配置管理工具, 其服務器端和客戶端使用SSH 方式通訊,只需在服務器端安裝Ansible程序,而客戶端無需安裝應用程序就能實現快速部署,簡化了批量化部署的準備工做,採用22號端口通訊也提升了安全性,避免額外開放端口形成一些安全隱患,簡化了安全策略。python
實驗環境linux
系統版本:CentOS Linux release 7.4.1708 (Core)
Ansible版本:ansible-2.6.1-1.el7
關閉iptables, selinux
服務端名稱:test1
客戶端名稱:test2安全
安裝Ansible
wget下載Ansible安裝包到路徑 /root
wget https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.6.1-1.el7.ans.src.rpm服務器
安裝
yum -y install ansible-2.6.1-1.el7.ans.noarch.rpmbabel
yum安裝會關聯python的相關包網絡
======================================================================================================= Package Arch Version Repository Size ======================================================== Installing: ansible noarch 2.6.1-1.el7.ans /ansible-2.6.1-1.el7.ans.noarch 52 M Installing for dependencies: PyYAML x86_64 3.10-11.el7 base 153 k libyaml x86_64 0.1.4-11.el7_0 base 55 k python-babel noarch 0.9.6-8.el7 base 1.4 M python-backports x86_64 1.0-8.el7 base 5.8 k python-backports-ssl_match_hostname noarch 3.5.0.1-1.el7 base 13 k python-cffi x86_64 1.6.0-5.el7 base 218 k python-enum34 noarch 1.0.4-1.el7 base 52 k python-idna noarch 2.4-1.el7 base 94 k python-ipaddress noarch 1.0.16-2.el7 base 34 k python-jinja2 noarch 2.7.2-2.el7 base 515 k python-markupsafe x86_64 0.11-10.el7 base 25 k python-paramiko noarch 2.1.1-4.el7 extras 268 k python-ply noarch 3.4-11.el7 base 123 k python-pycparser noarch 2.14-1.el7 base 104 k python-setuptools noarch 0.9.8-7.el7 base 397 k python2-cryptography x86_64 1.7.2-2.el7 base 502 k python2-pyasn1 noarch 0.1.9-7.el7 base 100 k sshpass x86_64 1.06-2.el7 extras 21 k Transaction Summary ========================================================
安裝完成後,Ansible的配置目錄在/etc/ansible,運維
/etc/ansible/ ├── ansible.cfg ansible的配置文件 ├── hosts 存放客戶端文件列表 └── roles ansible的角色目錄
須要將被管理節點的服務器名稱添加到hosts文件裏,不然ansible將不認識客戶端,前提是這臺主機名和IP必須先要加入到系統/etc/hosts文件裏,才能被認識
例如直接將主機名test2添加到hosts文件內容末尾,不須要指定IP地址
也能夠將其按組分類添加,組名稱以中括號括起來,例如: ssh
[testservers] test2
添加完成後,測試ping, 運行命令ansible -m ping all, 表示對全部hosts文件裏的主機進行ping測試,-m ping 表示使用ping模塊,或者能夠對單機或組進行ping 操做, ansible -m ping test2 或 ansible -m ping testservers。Ansible各模塊的使用方法能夠經過ansible-doc來查閱,例如ansible-doc -l 能夠列出全部的模塊及其描述,ansible-doc yum 能夠指定模塊具體查看其使用方法。
返回SUCCESS表示ping 通ide
test2 | SUCCESS => { "changed": false, "ping": "pong" }
如未添加主機解析或主機不可達,則返回錯誤工具
test3 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname test-rs2: Name or service not known\r\n", "unreachable": true }
Ansible分2種方式對客戶端進行管理,一種是ad-hoc命令行方式,如上例的ping測試,另外一種是更爲強大靈活的playbook方式,playbooks採用yaml格式的配置文件來管理,具體的yaml配置文件語法可參考網絡文檔
好比利用copy模塊將test1主機上的文件拷貝到test2 的/tmp目錄下, 利用命令行的方式實現:ansible -m copy -a "src=/etc/hosts dest=/tmp" test2
, 實現相似於scp的功能
若是採用playbooks的方式,例如編寫一個名爲copy_file.yml的playbook
--- - hosts: test2 # 執行的對象爲test2主機 remote_user: root # 執行的用戶爲root帳號 tasks: # 要執行的任務 - name: copy file to test2 # 任務的描述信息 copy: src=/etc/hosts dest=/tmp # 調用copy模塊,指定源文件和目標地址
運行方法爲使用ansible-playbook命令,如: ansible-playbook copy_file.yml
若是對test2主機yum 安裝一個telnet程序yum_install.yml,playbook內容以下,執行的命令爲 ansible-playbook yum_install.yml
--- - hosts: testservers # 對testserver組進行安裝 remote_user: root tasks: - name: install telnet yum: name=telnet state=installed # 調用yum模塊,指定安裝程序名和狀態
採用playbook的配置方式能夠更加方便地對管理主機進行部署,能夠對任務進行分類,包括像新裝主機的初始化配置、安裝應用程序、拷貝文件,修改權限等等。一路配置下了感受很是方便快捷,上手很容易,確實是運維的一大利器,比puppet什麼的不知道高明到哪裏去了, 雖然咱們公司用的仍然是puppet,但感受仍是Ansible方便好用啊。