Ansible運維自動化html
目錄python
1、簡介ios
2、特性優勢程序員
一、特性web
二、優勢shell
3、ansible工做過程編程
4、Ansible應用場景vim
一、使用場景centos
二、命令執行api
三、Ansible企業應用場景分析
(1)Dev開發環境
(2)測試環境
(3)發佈環境
(4)生產環境
(5)灰度環境
5、ansible安裝部署
一、ansible安裝
二、目錄結構
三、添加認證
四、ansible工做原理
五、ansible主要組成部分
(1)Ansible playbooks
(2)INVENTORY
(3)Modeules
(4)Plugins
(5)API
ANSIBLE.
六、Ansible組件調用關係
七、Ansible命令集
(1)命令格式:
(2)命令參數
示例一、測試
示例二、測試以wang用戶執行命令
1、簡介
Ansible 是一個自動化運維工具,12年Mchael DeHanan開發。基於python開發,集合目前主流運維工具優勢,實現批量系統配置、程序部署、命令執行等功能。15年ansible被red hat 收購.想知道爲何被收購能夠去看看這篇文章http://www.infoq.com/cn/news/2015/10/Red-Hat-DevOps。關於ansblie更多的介紹各位能夠去官網看看http://docs.ansible.com/ansible/index.html
2、特性優勢
一、特性
no agents :不須要在被管控主機上安裝任何客戶端
no server :無服務器端,使用時直接運行命令便可
modules in any languages :基於模塊工具,可以使用任意語言開發模塊
yaml,not code :使用yaml語言定製劇本playbook
ssh by default:基於ssh工做
strong multi-tier solution:可實現多級指揮。
二、優勢
輕量級,不須要安裝客戶端,更新時,只須要在操做機上進行一次更新便可
批量任務執行能夠寫成腳本,並且不用分發到遠程就能夠執行
使用python編寫的,維護更簡單
冪等性 冪等性不會重複執行相同的指令。例如不會重複安裝軟件
3、ansible工做過程
ansible默認是經過SSH通道來管理的,也就是它所說的免客戶端方式管理
4、Ansible應用場景
一、使用場景
文件傳輸
二、命令執行
應用部署
配置管理
任務流編排
三、Ansible企業應用場景分析
一般狀況下在企業中運維功能的總體流程。
(1)Dev開發環境
使用者:程序員
功能:程序員開發軟件測試BUG的環境
管理者:千萬不能是運維,必定是要程序員自已
(2)測試環境
使用者:qa測試工程師
功能:測試通過Dev環境測試經過的軟件的功能
管理者:運維
備註:測試環境每每有多套(測試環境知足測試功能便可,不宜過多)
(1)測試同窗但願測試環境有多套
公司的產品多產品線併發,即多個版本,意味着多個版本同步測試
(2)一般狀況下,測試環境有多少套和產品線數量保持同樣
(3)發佈環境(代碼發佈機,有些公司堡壘機(安全屏障))
使用者:運維
功能:發佈代碼至生產環境
管理者:運維(有經驗的)
發佈機:每每須要有2臺(主備)
(4)生產環境
使用者:運維,只能是運維(極少數狀況下會開放權限給核心開發人員,極少數公司將該環境權限徹底開放給開發人員並讓開發人員維護)
功能:對用戶提供公司產品的服務
管理者:只能是運維
生產環境服務器數量:通常比較多,且應用很是重要。每每須要自動工具協助部署配置應用。機器數量具體和公司業務規模相關。
(5)灰度環境(生產環境的一部分)
使用者:運維
功能:在全量發佈代碼前將代碼的功能面向少許精準用戶發佈的環境
案例:
你們手頭100臺服務器,先發布其中的10臺服務器,這10臺服務器就是灰度服務器。
管理者:只能是運維
爲何灰度環境:每每該版本功能變動較大,爲保險起見特地先讓一部分用戶優化體驗該功能,待這部分用戶使用沒有重大問題的時候,再全量發佈至全部服務器。
5、ansible安裝部署
一、ansible安裝
Yum install ansible –y
Pip install ansible
二、目錄結構
配置文件目錄:
/etc/ansible/
配置文件
ansible.cfg:主要設置一些ansible初始化信息,好比日誌存放路徑、模塊、插件等配置信息。
Hosts:機器清單,進行分組管理
執行文件目錄:
/usr/bin/
Lib庫依賴目錄:
/usr/lib/pythonX.X/site-packages/ansible/
Help文檔目錄:
/usr/share/doc/ansible-X.X.X/
Man文檔目錄:
/usr/share/man/man1/
三、添加認證
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.250.90
[root@centos7_1 ~]# ansible 172.16.250.90 -m ping
16.252.18 | SUCCESS => {
"changed":false,
"ping": "pong"
四、ansible工做原理
五、ansible主要組成部分
(1)Ansibleplaybooks
任務劇本(任務集),編排定義ansible任務集的配置文件,有ansible順序依次執行,一般是JSON
格式的YML文件
(2)INVENTORY
ansible管理主機的清單,能夠定義單獨主機,也能夠定義主機組。
(3)Modeules
ansible執行命令的功能模塊,多數爲內置的核心模塊,也可自定義。Ansible2.2版本提供模塊有500多
個,下面應用到核心模塊有synchronize(備份)、copy(恢復)、shell(nas獲取)、cron(定時任務)、
user(密碼修改)、zypper(軟件包管理rpm)、setup(獲取facts);擴展模塊有UPStartItem(啓動項管
理)、UPInstall(軟件包管理)、UPUPload(文件上傳)
(4)Plugins
模塊功能的補充,如鏈接類型插件、循環插件、變量插件、過濾插件等,該功能不經常使用。
(5)API
供第三方程序調用的應用程序編程接口
ANSIBLE
該部分圖中表示不明顯,組合INVENTORY、API、MODULES、PLUGINS的綠框你們能夠理解
爲是ansible命令工具,其爲核心執行工具;
六、Ansible組件調用關係
使用者使用Ansible或Ansible-playbook(會額外讀取Playbook文件)時,在服務器終端輸入Ansible的Ad-
Hoc命令集或Playbook後,Ansible會遵循預先編排的規則將Playbooks逐條拆解爲Play,再將Play組織成
Ansible可識別的任務(Task),隨後調用任務涉及的全部模塊(Module)和插件(Plugin),根據
Inventory中定義的主機列表經過SSH(Linux默認)將任務集以臨時文件或命令的形式傳輸到遠程客戶
端執行並返回執行結果,若是是臨時文件則執行完畢後自動刪除。
七、Ansible命令集
/usr/bin/ansible # Ansibe AD-Hoc 臨時命令執行工具,經常使用於臨時命令的執行
/usr/bin/ansible-doc # Ansible 模塊功能查看工具
/usr/bin/ansible-galaxy # 下載/上傳優秀代碼或Roles模塊的官網平臺,基於網絡的
/usr/bin/ansible-playbook # Ansible 定製自動化的任務集編排工具
/usr/bin/ansible-pull # Ansible遠程執行命令的工具(使用較少,海量機器時使用,對運維的架構能力要求較高)
/usr/bin/ansible-vault # Ansible 文件加密工具
/usr/bin/ansible-console # Ansible基於Linux Consoble界面可與用戶交互的命令執行工具
(1)命令格式:
ansible<host-pattern> [options]
(2)命令參數
-a MODULE_ARGS, --args=MODULE_ARGS
module arguments # 指定Ansible調用的模塊
--ask-become-pass ask forprivilege escalation password # Ansible su切換用戶的時候使用該參數輸入密碼
-k,--ask-pass ask for SSHpassword # 以密碼認證
--ask-su-pass ask for supassword (deprecated, use become) # su的時候使用該參數
-K,--ask-sudo-pass ask for sudo password(deprecated, use become) # sudo的時候
--ask-vault-pass ask forvault password # ansible-valut 加密文件
-BSECONDS, --background=SECONDS # 後臺等待X秒
--become-user=BECOME_USER
run operations as thisuser (default=None) # su到哪一個用戶
-C,--check don't make any changes;instead, try to predict some
of the changes that mayoccur # 不執行命令只作命令執行檢查
-c CONNECTION, --connection=CONNECTION
connection type to use(default=smart)
-eEXTRA_VARS, --extra-vars=EXTRA_VARS # 調用外部變量
set additionalvariables as key=value or YAML/JSON
-fFORKS, --forks=FORKS # Ansible一次命令執行併發的線程數
-h,--help show this help messageand exit
-iINVENTORY, --inventory-file=INVENTORY #Ansible調用的Hosts文件,默認/etc/ansible/hosts
specify inventory hostfile
(default=/etc/ansible/hosts)
-lSUBSET, --limit=SUBSET # 限定主機列表中的某臺機器執行
further limit selectedhosts to an additional pattern
--list-hosts outputs alist of matching hosts; does not execute
anything else ## 列出主機列表中的主機
-mMODULE_NAME, --module-name=MODULE_NAME #Ansible 調用的執行模塊
-M MODULE_PATH, --module-path=MODULE_PATH #調用的模塊路徑
-S,--su run operations with su(deprecated, use become) #使用su和become結合使用
-RSU_USER, --su-user=SU_USER # su的話切換至哪一個用戶
-s,--sudo run operations withsudo (nopasswd) (deprecated, use
become) # 執行sudo命令
-USUDO_USER, --sudo-user=SUDO_USER # sudo
-TTIMEOUT, --timeout=TIMEOUT # 執行命令的超時時間
--vault-password-file=VAULT_PASSWORD_FILE ## ansible-vault加密的密碼文件
-v,--verbose verbose mode (-vvv formore, -vvvv to enable
connectiondebugging) # 顯示詳細信息 -vvvv
--version showprogram's version number and exit ## 顯示版本號
修改配置文件 指定目標主機
[root@centos7_1 ~]# vim/etc/ansible/hosts
[web]
172.16.252.18
示例一、測試
[root@centos7_1 ~]#ansible web -m ping 172.16.252.18 | SUCCESS => { "changed":false, "ping":"pong" } [root@centos7_1 ~]#
示例二、測試以wang用戶執行命令
[root@localhost~]# ansible web -m ping -u wang #很明顯下面報錯了。 172.16.250.90 | UNREACHABLE! => { "changed":false, "msg":"Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", "unreachable":true } [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa wang@172.16.250.90 #將密鑰傳輸到對方wang用戶 wang@172.16.250.90's password: Now try logging into the machine, with "ssh 'wang@172.16.250.90'",and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [root@localhost ~]# ansible web -m ping -u wang #再次執行命令成功 172.16.253.252 | SUCCESS => { "changed":false, "ping":"pong" } [root@localhost ~]#