1、初識Ansible html
介紹:python
Absible 使用 模塊(Modules)來定義配置任務。模塊能夠用標準腳本語言(Python,Bash,Ruby,等等)編寫,這是一個很好的作法,使每一個模塊冪等。Ansible劇本(YAML語言編寫)角色映射到 節點/虛擬機上,以對這些節點/虛擬機 進行編排有序的執行。Ansible支持ad-hoc任務:管理任務(沒必要冪等)以在多個節點/虛擬機上執行。Ansible具備無代理架構:你不須要在配置的節點/虛擬機上安裝Ansible(然而,這些節點必須安裝python環境),Ansible 經過SSH或者經過PowerShell(Windows機器)從單個控制機器上配置管理節點/虛擬機,而且可以支持並行配置多個節點。Ansible 能夠用來配置 類unix系統或 Windows節點/虛擬機。git
基本特色:github
如圖:docker
注:上圖是從官方介紹視頻中的截圖。用戶經過ansible 自動化引擎, 使用playbook ,插件、模塊去去管理被控制主機。並能夠結合CMDB管理系統。windows
2、Ansible運行環境centos
1.ansible的安裝支持多種方式。安全
官方建議:架構
2.控制機要求:運維
Ansible 能夠運行在有python 2.6或者2。7環境的類unix 環境。windows 暫不支持
3.被控制節點要求
控制節點須要和 Ansible 被控制節點通訊,一般使用ssh 進行鏈接。另外也須要python環境。
3、Ansible 安裝
1.控制管理機安裝(安裝方式有多種,源碼,pip等方式),咱們這裏使用git 源碼安裝方式進行部署
[root@docker ~]# git clone git://github.com/ansible/ansible.git --recursive [root@docker ~]# cd ansible/
進行源碼安裝
[root@docker ansible]# make && make install
先安裝pip包管理工具,而後安裝ansible 程序所使用的幾個python模塊
[root@docker ansible]# easy_install pip [root@docker ansible]# pip install paramiko PyYAML Jinja2 httplib2 six
更新ansible 代碼時用到的兩條命令
[root@docker ansible]# git pull --rebase Current branch devel is up to date. [root@docker ansible]# git submodule update --init --recursive
2.檢查驗證
做者:飛走不可,原文連接:http://www.cnblogs.com/hanyifeng/p/6110926.html
[root@docker ansible]# ansible --version ansible 2.3.0 config file = configured module search path = Default w/o overrides
3、配置Ansible 嘗試下管理主機
1.默認配置文件在你git下載源碼的目錄ansible目錄中
/root/ansible/bin/ansible
2.建立hosts存放目錄,並編寫hosts文件
[root@docker ansible]# mkdir -pv /etc/ansible/ mkdir: created directory '/etc/ansible/'
從安裝文件中,拷貝hosts
[root@docker ansible]# cp /root/ansible/examples/hosts /etc/ansible/.
編寫hosts文件,添加1個主機
3.建立倆docker 容器吧
[root@docker ~]# docker run -d -it --name centos-1 centos_sshd_1 b032a6c8b4014837181029059661104373db8a6190a1f854ae5ff701b961a546
[root@docker ~]# docker run -d -it --name centos-2 centos_sshd_1 cc647f916437df70b54096bcf676804114d1558124234b7716aee68271414f27
容器建立完,默認已經啓動了sshd 服務開啓22端口(這裏能夠查看後續我發的Docker 自定義鏡像的文章),咱們查看下它們的ip
[root@docker ~]# docker exec centos-1 hostname -I 172.17.0.2 [root@docker ~]# docker exec centos-2 hostname -I 172.17.0.3
4.將上面2個被控制主機的ip 添加到 hosts 文件中,並進行通訊測試
打開/etc/ansible/hosts文件,在末尾按照如下格式添加。
[cenots_group] 172.17.0.2 172.17.0.3
添加完成後,在控制主機上使用 ping 模塊進行測試,以下:(約定:被控主機稱爲client,控制主機稱爲managent,如下相似)
全部主機:
[root@docker ~]# ansible '*' -m ping --ask-pass SSH password: 172.17.0.3 | SUCCESS => { "changed": false, "ping": "pong" } 172.17.0.2 | SUCCESS => { "changed": false, "ping": "pong" }
指定組的方式:
[root@docker ~]# ansible centos_group -m ping --ask-pass SSH password: 172.17.0.2 | SUCCESS => { "changed": false, "ping": "pong" } 172.17.0.3 | SUCCESS => { "changed": false, "ping": "pong" }
指定單個主機的方式:
[root@docker ~]# ansible '172.17.0.3' -m ping --ask-pass SSH password: 172.17.0.3 | SUCCESS => { "changed": false, "ping": "pong" }
解釋:ansible 命令後面,跟的第一個參數,也就是咱們hosts 文件裏面的主機清單(能夠指定單個主機ip,也能夠是組,也支持正則匹配); 第二個參數是使用-m 指定模塊,這裏咱們用了 ping模塊。 --ask-pass 這個是當咱們使用主機密碼來進行ssh認證時的參數,屢次輸入後,會感受比較麻煩。推薦使用密鑰的方式,安全又方便。下面說下如何用公鑰
5.使用密鑰來進行ssh 遠程訪問
先在management 上生成公鑰私鑰對
[root@docker ~]# ssh-keygen -t rsa -C "management"
將公鑰放到使用 ssh-copy-id命令,上傳到client 上面去。
[root@docker ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.2 [root@docker ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.3
如今再試下管理命令,不用輸入密碼了
[root@docker ~]# ansible centos_group -a "/bin/echo Hello world" 172.17.0.3 | SUCCESS | rc=0 >> Hello world 172.17.0.2 | SUCCESS | rc=0 >> Hello world
ok,等下一次學習Inventory(資源清單)時,再來分享吧。
注:ansible是第二次開始寫的連載系列文章,若是喜歡能夠關注哦。若是感受有很差的地方,必定要不吝賜教哈。我會很是很是感激的。另外,若是你以爲本文對你有幫助,歡迎轉載,但務必要註明出處啊。
做者:飛走不可,原文連接:自動化運維工具之Ansible 介紹以及安裝:http://www.cnblogs.com/hanyifeng/p/6110926.html
參考連接:
http://docs.ansible.com/