目錄:php
1、ansible簡介html
1.一、ansible是什麼node
1.二、ansible如何工做python
1.三、ansible優缺點linux
1.四、ansible安裝方式git
1.五、ansible文件簡單介紹github
1.六、ansible簡單使用web
2、ansible-shell簡介shell
2.一、ansible-shell是什麼編程
2.二、ansible-shell安裝方式
2.三、ansible-shell簡單使用
3、使用ansible的authorized_key模塊批量推送公鑰到遠程主機
3.一、生產祕鑰對
3.二、使用ansible-playbook來生成推送公鑰
4、相關站點的推薦
ansible是個什麼東西呢?官方的title是「Ansible is Simple IT Automation」——簡單的自動化IT工具。這個工具的目標有這麼幾項:讓咱們自動化部署APP;自動化管理配置項;自動化的持續交付;自動化的(AWS)雲服務管理。
下面這是摘自36氪的一段介紹,很詳細:
AnsibleWorks成立於2012年,由自動化工具Cobbler及Func的開發者Michael DeHaan建立。其Ansible平臺是一個開源的配置及計算機管理平臺。可實現多節點的軟件部署,執行特定任務並進行配置管理。
Ansible 跟其餘IT自動化技術的區別在於其關注點並不是配置管理、應用部署或IT流程工做流,而是提供一個統一的界面來協調全部的IT自動化功能,所以 Ansible的系統更加易用,部署更快。受管理的節點無需安裝額外的遠程控制軟件,由平臺經過SSH(Secure SHell)對其進行管理,所以十分方便。其模塊支持JSON等標準輸出格式,可採用任何編程語言重寫。
Ansible可讓用戶避免編寫腳本或代碼來管理應用,同時還能搭建工做流實現IT任務的自動化執行。IT自動化能夠下降技術門檻及對傳統IT的依賴,從而加快項目的交付速度。
目前,Ansible已有30萬用戶,每個月下載量接近3萬次。其客戶包括AppDynamics、Evernote 、MapR以及金融服務、電信、醫療保健、媒體業的財富500強公司。
免費版:http://www.ansibleworks.com/docs/
ansible執行過程大致過程以下圖,其中暖色調的表明已經模塊化。
圖片來源於:http://ju.outofmemory.cn/entry/67581
ansible有以下優勢:
1.3.一、輕量級,他不須要去客戶端安裝agent,更新時,只須要在操做機上進行一次更新便可
1.3.二、批量任務執行能夠寫成腳本,並且不用分發到遠程就能夠執行
1.3.三、使用python編寫的,維護更簡單
1.3.四、支持sudo
缺點:
1.3.五、對於幾千臺、上萬臺機器的操做,還不清楚性能、效率狀況如何,須要進一步瞭解。
1.4.一、安裝前提Control Machine Requirements
Currently Ansible can be from any machine with Python 2.6 installed (Windows isn’t supported for the control machine).
This includes Red Hat, Debian, CentOS, OS X, any of the BSDs, and so on.
Managed Node Requirements
On the managed nodes, you only need Python 2.4 or later, but if you are are running less than Python 2.5 on the remotes, you will also need:
python-simplejson
1.4.二、源碼安裝1.4.三、pip安裝1.4.四、yum安裝
1234 [root@ansible ~]#[root@ansible ~]# rpm -qa | grep ansible # 檢查是否安裝ansible-1.5.3-1.el6.noarch[root@ansible ~]# yum install ansible -y # 沒有安裝的話,使用這個安裝便可
1.5.一、包含文件介紹
123456 [root@ansible ~]# tree /etc/ansible//etc/ansible/├── ansible.cfg # ansible的配置文件└── hosts # ansible的主倉庫 用來存儲須要管理的遠程主機的相關信息0 directories, 2 files[root@ansible ~]#
1.5.二、ansible其餘組件介紹ansible-doc 模塊文檔查看器,頗有用,使用ansible -l 顯示全部module列表,使用 ansible-doc <module_x> 來查看module_x的詳細文檔,這裏不作太多介紹
ansible-playbook 傳說中的配置管理工具,若是你用過puppet或者saltstack,這個能夠不用介紹了,若是你沒用過,也不要緊,花費20分鐘看下官方的 Video。 掌握一件事情最好的辦法就是使用它,你能夠下載官方的example來學習
ansible-galaxy 和三星不要緊,你能夠把他理解成ansible的pip,能夠從galaxy.ansible.com下載官方收錄的playbooks
ansible-pull 支持直接從git下載playbook執行,須要遵循其規定的目錄格式,用處不是特別大,能夠不關注
ansible-vault 若是你的配置文件中含有敏感信息,你可能並不但願他能被人看到,vault能夠幫你加密/解密這個配置文件,高級用法,請參照http: //blog.ansibleworks.com/2014/02/19/ansible-vault/
1.5.三、ansible的 Inventory 介紹ansible.cfg文件不用去管,咱們只須要配置hosts文件便可,hosts文件也就是官方說的Inventory,hosts文件配置的幾種格式:單純的寫主機名或ip,所屬組爲all
12 #blue.example.com#192.168.100.1定義一個組
1234 #[webservers]#alpha.example.org#beta.example.org#192.168.1.100組成員可使用通配符來匹配 www[001:006].example.com若是你沒有使用公鑰,想要使用密碼,你也能夠這樣寫(適用於第一次登錄控制)格式:【主機名】 【主機地址】 【主機密碼】 默認是root用戶來進行的
123 [keepalived]keepalived1 ansible_ssh_host=192.168.146.136 ansible_ssh_pass="test"keepalived2 ansible_ssh_host=192.168.146.137 ansible_ssh_pass="test"
hosts文件設置的參數官方給出的:
1.六、ansible的簡單使用
1.6.一、上傳公鑰到遠程主機
定義好了倉庫,那麼咱們就須要把控制端的公鑰推送到遠程主機上 (稍後會有講到)
方法:一、使用expect+shell方式批量推送
方法:二、本身手動一個一個的推送
1.6.二、牛刀小試看看效果如何
好了,公鑰都傳到對方主機了,那麼咱們來簡單的使用來試用下
123456 [root@ansible ~]# ansible keepalived -a "uptime" # 默認使用command模塊keepalived1 | success | rc=0 >>13:07:24 up 7:59, 1 user, load average: 0.00, 0.00, 0.00keepalived2 | success | rc=0 >>13:07:31 up 7:58, 1 user, load average: 0.00, 0.00, 0.00[root@ansible ~]#
經常使用模塊:
yum、service、shell、raw
yum模塊經常使用來安裝軟件
service模塊經常使用來對服務的開關操做
shell模塊能夠用來執行命令以及腳本
raw和command、shell相似,可是它能夠傳遞管道
123456789101112131415161718192021222324252627282930313233343536373839404142434445 [root@ansible ~]# ansible keepalived -m raw -a "rpm -qa | grep xinetd" # 使用raw模塊查看遠程服務器上是否安裝了xinetd服務keepalived1 | FAILED | rc=1 >>keepalived2 | FAILED | rc=1 >>[root@ansible ~]# ansible keepalived -m yum -a "name=xinetd state=latest" # 使用yum模塊進行安裝yum源裏最新版的xinetd軟件keepalived1 | success >> {"changed": true,"msg": "","rc": 0,"results": ["Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * epel: ftp.riken.jp\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package xinetd.x86_64 2:2.3.14-39.el6_4 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n xinetd x86_64 2:2.3.14-39.el6_4 base 121 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 121 k\nInstalled size: 259 k\nDownloading Packages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Installing : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\r Verifying : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\nInstalled:\n xinetd.x86_64 2:2.3.14-39.el6_4 \n\nComplete!\n"]}keepalived2 | success >> {"changed": true,"msg": "","rc": 0,"results": ["Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * epel: mirrors.yun-idc.com\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package xinetd.x86_64 2:2.3.14-39.el6_4 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n xinetd x86_64 2:2.3.14-39.el6_4 base 121 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 121 k\nInstalled size: 259 k\nDownloading Packages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Installing : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\r Verifying : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\nInstalled:\n xinetd.x86_64 2:2.3.14-39.el6_4 \n\nComplete!\n"]}[root@ansible ~]# ansible keepalived -m raw -a "rpm -qa | grep xinetd" # 再次使用raw模塊查看xinetd是否安裝keepalived1 | success | rc=0 >>xinetd-2.3.14-39.el6_4.x86_64keepalived2 | success | rc=0 >>xinetd-2.3.14-39.el6_4.x86_64[root@ansible ~]# ansible keepalived -m shell -a "service xinetd restart" # 使用shell模塊啓動xinetd服務keepalived2 | success | rc=0 >>Stopping xinetd: [FAILED]Starting xinetd: [ OK ]keepalived1 | success | rc=0 >>Stopping xinetd: [FAILED]Starting xinetd: [ OK ][root@ansible ~]#[root@ansible ~]# ansible keepalived -m service -a "name=xinetd state=restarted" # 一樣你也可使用service模塊進行服務的啓動,關閉和重啓keepalived1 | success >> {"changed": true,"name": "xinetd","state": "started"}keepalived2 | success >> {"changed": true,"name": "xinetd","state": "started"}[root@ansible ~]#
NOTE:
通俗點說,ansible執行管理的時候分兩部分:
一、Ad-Hoc(咱們剛纔1.6所演示的就是屬於Ad-Hoc)
What’s an ad-hoc command?
An ad-hoc command is something that you might type in to do something really quick, but don’t want to save for later.
詳情請查看:http://www.ansible.cn/docs/intro_adhoc.html
二、Playbooks
Playbooks are Ansible’s configuration, deployment, and orchestration language. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT process.
詳情請查看:http://www.ansible.cn/docs/#playbooks
項目地址:https://github.com/dominis/ansible-shell
1
2
|
[root@ansible ~]# git clone https://github.com/dominis/ansible-shell.git
[root@ansible ~]# pip install -e ./ansible-shell
|
2.三、ansible-shell簡單使用
ansible-shell內置的命令主要有四個:
cd : 切換到指定的組/表達式篩選的機器集合上
list: 顯示目前的機器集合,list groups 能夠列出全部的組(對咱們可能沒啥用)
serial: 運行時的併發度,默認是2
help: 顧名思義,他能生成簡單的模塊幫助信息,方便即時查詢
固然,ansible-shell的功能不止這些,這裏只是作下簡單的演示而已,咱們後期會繼續更新相關內容
若是你python不錯的話,能夠在ansible-shell的基礎上進行修改,更新,確保更加適合你的環境。
好 了,ansible和ansible-shell大體講解了一下,「知道的越多,肩上的責任越重「,隨之而來是你如何在一個很大的環境中來使用 ansible,由於ansible是依託於ssh的,難到你要手動的去ssh-copy-id到幾十臺,幾百臺甚至上千臺機器上麼,估計等你公鑰都傳完 了,早已通過了項目上線的時間,在這裏咱們使用ansible來進行公鑰的批量推送,如下幾個是我我的思路,若是你有更好的方式請告知
一、shell 腳本 + expect
二、scp 腳本 + expect + 修改authorized_keys文件權限
三、ansible直接推送腳本
我的感受:
第一個坑:1和2兩條的主要問題是,第一次ssh到遠程主機上的時候,遠程主機會對你進行公鑰驗證,因此這是一個坑,
第二個坑:針對scp上傳以後,文件不對又是另一個坑
第三個坑:若是隻是簡單的使用expect的話,remote host主機密碼要統一,不統一的話又是一個大坑
第四個坑:使用ansible推送公鑰的話,第一次操做須要把遠程主機的信息,帳戶,密碼都寫到host文件中去,這是一項大的工程
廢話很少說,咱們繼續上乾貨
3、使用ansible的authorized_keys模塊+yaml實現批量上傳公鑰
這個命令會產生一個公鑰(~/.ssh/id_rsa.pub)和密鑰(~/.ssh/id_rsa),
-t dsa:表示使用密鑰的加密類型,能夠爲'rsa'和'dsa'
-P '':表示不須要密碼登陸
-f ~/.ssh/id_dsa:表示密鑰存放的路徑爲${USER}/.ssh/id_dsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@[ip,hostname] #若是你是單臺機器的話,可使用這種方式把公鑰文件傳遞到對方主機
無圖無真相,來看看咱們已經作好的一臺ansible機器上來羅列遠程主機上的authorized_keys的權限,若是你的機器不行,那就改成600便可
3.二、使用ansible-playbook來生成推送ymal文件
authoried_keys模塊參數介紹
修改ansible的hosts(Inventory)文件,以下圖所示,格式:
[主機名] [ssh鏈接帳戶] [ssh主機地址] [ssh鏈接帳戶對應的密碼]
下面演示咱們使用ansible-playbook來推送咱們寫好的ymal文件
再次查看hosts文件內容
到了這裏你能夠對着大片的服務器說,管理大家so easy,今後你不用在爲不會except而發愁,解放你的雙手,讓你更從容,更快速便捷的來管理你的服務器羣組!若是你會python,那就是如虎添翼了!
4、相關站點的推薦
國內一個團隊把1.3的官方文檔所有移過來了,今後你不再用擔憂閱讀官方文檔被牆了,感謝他們。。。
對應官方的1.3版本的手冊:http://www.ansible.cn/docs/
想要了解yaml的同窗能夠移步到這裏:
YAML的官方網站:http://www.yaml.org
後續主要針對ansible-playbook對線上環境的使用博客,敬請關注
參考文章:
http://www.kankanews.com/ICkengine/archives/136988.shtml
http://www.shencan.net/index.php/2014/04/10/ansible-好***-ansible-shell/
https://github.com/dominis/ansible-shell
https://linuxtoy.org/archives/hands-on-with-ansible.html
https://github.com/ansible/ansible
http://www.the5fire.com/explore-the-ansible.html
http://ju.outofmemory.cn/entry/67581