介紹python
ansible官方文檔裏寫道web
Ansible is a radically simple IT automation enginesql
即:Ansible是一款極其簡單的IT自動化工具服務器
它基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。網絡
ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:架構
(1)、鏈接插件connection plugins:負責和被監控端實現通訊;併發
(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;框架
(3)、各類模塊核心模塊、command模塊、自定義模塊;運維
(4)、藉助於插件完成記錄日誌郵件等功能;python2.7
(5)、playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。
基本框架圖
組件介紹
Ansible:Ansible核心程序。
connection plugins :鏈接插件,負責和被監控端實現通訊。
HostInventory:記錄由Ansible管理的主機信息,包括端口、密碼、ip等。
Playbooks:」劇本」YAML格式文件,多個任務定義在一個文件中,定義主機須要調用哪些模塊來完成的功能。
CoreModules:核心模塊,主要操做是經過調用核心模塊來完成管理任務。
CustomModules:自定義模塊,完成核心模塊沒法完成的功能,支持多種語言。
ansible特色
部署簡單,只需在主控端部署Ansible環境,被控端無需作任何操做,默認使用SSH協議對設備進行管理;
有大量常規運維操做模塊,可實現平常絕大部分操做。
配置簡單、功能強大、擴展性強;
支持API及自定義模塊,可經過Python輕鬆擴展;
經過Playbooks來定製強大的配置、狀態管理;
輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;
提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺。
冪等性 冪等性不會重複執行相同的指令。例如不會重複安裝軟件。
工做原理圖
測試環境
名稱 | IP | 系統 |
ansible | 192.168.10.10 | CenOS7 |
PC1 | 192.168.10.11 | CenOS7 |
PC2 | 192.168.10.12 | CenOS7 |
安裝
安裝ansible很是簡單,直接YUM安裝就能夠。
# yum install epel-release -y # yum install ansible -y # ansible --version #查看版本 ansible 2.7.0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
ansible.cfg爲ansible的主配置文件,他主要定義了roles_path路徑,主機清單路徑,鏈接清單中的主機方式等。
hosts是咱們定義主機清單的配置文件。
# cd /etc/ansible/ # ls ansible.cfg hosts roles
主配置文件的一些解釋
[defaults] # some basic default values... #inventory = /etc/ansible/hosts //定義資源清單文件的位置 #library = /usr/share/my_modules/ //library指向ansible模塊的目錄 #module_utils = /usr/share/my_module_utils/#remote_tmp = ~/.ansible/tmp#local_tmp = ~/.ansible/tmp #plugin_filters_cfg = /etc/ansible/plugin_filters.yml #forks = 5 //多少個進程能夠同時工做 #poll_interval = 15 #sudo_user = root //設置默認執行命令的用戶 #ask_sudo_pass = True //執行ansible命令是否詢問ssh密碼,每次都詢問 #ask_pass = True //和上面一塊兒的 #transport = smart #remote_port = 22 //鏈接被管理的端口,默認22 #module_lang = C #module_set_locale = False //第一次使用ansible鏈接客戶端的提示開關 # SSH timeout#timeout = 10 //SSH鏈接超時的間隔,單位是秒
定義一個[組名]把地址或主機名加進去
我本身定義的兩臺主機,我把它分爲了兩個組。
[web]192.168.10.11 [sql]192.168.10.12
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界面可與用戶交互的命令執行工具
SSH與公私鑰
在主機執行如下命令,將公鑰發送到兩臺被鏈接主機。
#ssh-keygen -t rsa #建立公鑰與私鑰 #ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.11 #將公鑰傳輸給對端服務器
此時服務器能夠免密碼登陸
測試
這裏用一個PING模塊來驗證一下是否鏈接成功,下一篇博客咱們再研究另外的經常使用模塊。
命令格式:
ansible<host-pattern> [options]
命令參數
-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 # 後臺等待秒數
--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 ## 顯示版本號
ping模塊測試:
# ansible all -m ping 192.168.10.11 | SUCCESS => {"changed": false, "ping": "pong"} 192.168.10.12 | SUCCESS => {"changed": false, "ping": "pong"}
看到兩臺主機都返回了成功ping通,至此咱們就能夠愉快的使用ansible對區域內的服務器開始管理工做啦!