自動化運維工具Ansible部署詳解與基本使用

一、基礎簡介


1、Ansible簡介

Ansible是一款基於Python開發的自動化運維工具,主要是實現批量系統配置、批量程序部署、批量運行命令、批量執行任務等等諸多功能。Ansible是一款靈活的開源工具,能夠很大程度簡化運維中的配置管理與流程控制方式,它利用推送方式對客戶系統加以配置,這樣所有工作都可在主服務器端完成。Asible是基於模塊工作的,其本身沒有批量部署的能力,總之只要明白Ansible是一款運維自動化的神器就好了~!


2、功能特性

wKiom1U5ETizSQtfAAGN9PZOd1E031.jpg

#######################################################################

3、工作機制

wKioL1U5EcDxtNOhAAKYzdCorKY259.jpg

4、特性

(1)、no agents:不需要在被管控主機上安裝任何客戶端;

(2)、no server:無服務器端,使用時直接運行命令即可;

(3)、modules in any languages:基於模塊工作,可使用任意語言開發模塊;

(4)、yaml,not code:使用yaml語言定製劇本playbook;

(5)、ssh by default:基於SSH工作;

(6)、strong multi-tier solution:可實現多級指揮。


5、優點
(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
(2)、批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;
(3)、使用python編寫,維護更簡單,ruby語法過於複雜;
(4)、支持sudo。

##############################以上爲網絡摘取信息###########################


二、安裝

##########################################

注:本文的演示環境

Ansible 主機:CentOS 6.5 x64   

兩臺測試機:CentOS 6.5 x64  


已關閉 iptables

已關閉 selinux


已安裝組件:Development tools,Server Platform Development

##########################################

1、默認系統是沒有Ansible的yum源的,需要添加epel源

wKiom1U5F0Hwb_xzAAFxZ9c3EZA809.jpg

2、由於源不好找,找了半天在同門博客找到了,順便做個鏈接,http://wdllife.blog.51cto.com/6615958/1631964(快樂就好),於是轉載過來了,使用的是aliyun的epel源.

[root@lvs03]# vim /etc/yum.repos.d/CentOS-Base.repo

wKiom1U5HSOQGFo9AAKKzXbZjiU067.jpg

[root@lvs03]# yum install ansible   //阿里雲的包裏面的軟件還是很新的,另外由於它是python開發的,依賴基本也是python相關的包

wKioL1U5Hvmy8Wy6AASqhJCpXzQ923.jpg

[root@lvs03]# rpm -ql ansible    //主要文件說明
/etc/ansible/ansible.cfg  //主配置文件
/etc/ansible/hosts  //主機分組定義庫
/usr/bin/ansible-doc  //獲取ansible內部信息的文檔
/usr/bin/ansible-vault  //加密存放 /usr/bin/ansible-playbook 讀取時解密/usr/bin/ansible-playbook 文件


3、打開Ansible 主機分組定義庫,配置測試主機

wKiom1U5owaT6l6TAAIFS7j_RYY983.jpg

4、測試配置好的節點是否能正常運行,這裏提示SSH權限問題,如圖

說明:第一次運行時,需要輸入一下“yes”'進行公鑰驗證',後續無需再次輸入。

wKioL1U5qM3SaaS8AAKVYLwYb34654.jpg

於是加一個命令參數 "-k" 

[root@lvs03 ansible]# ansible host -m command -a 'date' -k

wKioL1U5qjPiAv-UAAGDy8fAu5M687.jpg

上面提示需要安裝sshpass

[root@lvs03 ansible]# yum install -y sshpass

安裝好sshpass後在進行測試

wKiom1U5qbCwdMWrAADwoQF_nSY827.jpg

5、到這裏我們對Ansible參數進行下講解

Usage:ansible <host-pattern> [options]
Options:

-m MODULE_NAME,--module-name=MODULE_NAME  //要執行的模塊,默認爲command

-a MODULE_ARGS,--args=MODULE_ARGS  //模塊的參數

-u REMOTE_USER,--user=REMOTE_USER  //ssh連接的用戶名,默認用root,ansible.cfg 中可以配置

-k,--ask-pass  //提示輸入ssh登錄密碼,當使用密碼驗證登錄的時候用

-s,--sudo  //sudo運行

-U SUDO_USER,--sudo-user=SUDO_USER  //sudo到哪個用戶,默認爲root

-K,--ask-sudo-pass  //提示輸入sudo密碼,當不是NOPASSWD模式時使用

-B SECONDS,--background=SECONDS  //runasynchronously,failingafterXseconds(default=N/A)

-P POLL_INTERVAL,--poll=POLL_INTERVAL  //setthepollintervalifusing-B(default=15)

-C,--check  //只是測試一下會改變什麼內容,不會真正去執行

-c CONNECTION  //連接類型(default=smart)

-f FORKS,--forks=FORKS  //fork多少個進程併發處理,默認5

-i INVENTORY,--inventory-file=INVENTORY  //指定hosts文件路徑,默認default=/etc/ansible/hosts

-l SUBSET,--limit=SUBSET  //指定一個pattern,對<host_pattern>已經匹配的主機中再過濾一次

--list-hosts  //只打印有哪些主機會執行這個playbook文件,不是實際執行該playboo

-M MODULE_PATH,--module-path=MODULE_PATH  //要執行的模塊的路徑,默認爲/usr/share/ansible/

-o,--one-line  //壓縮輸出,摘要輸出

--private-key=PRIVATE_KEY_FILE  //私鑰路徑

-T TIMEOUT,--timeout=TIMEOUT  //ssh連接超時時間,默認10秒

-t TREE,--tree=TREE  //日誌輸出到該目錄,日誌文件名會以主機名命名

-v,--verbose  //verbose mode(-vvv for more,-vvvv to enable connection debugging)

wKiom1U5sNyiq8xEAACZ5aL6gS4904.jpg

wKiom1U5sTjT-Mz6AAC4FM_8kv0990.jpg


6、免密鑰執行命令(不過這樣的話極爲不安全的)

注:hosts文件內部支持的一些特定指令(inventory參數)

ansible_ssh_host:指定主機別名對應的真實IP,如:251ansible_ssh_host=183.60.41.251,隨後連接該主機無須指定完整IP,只需指定251就行

ansible_ssh_port:指定連接到這個主機的ssh端口,默認22

ansible_ssh_user:連接到該主機的ssh用戶

ansible_ssh_pass:連接到該主機的ssh密碼(連-k選項都省了),安全考慮還是建議使用私鑰或在命令行指定-k選項輸入

ansible_sudo_pass:sudo密碼

ansible_sudo_exe(v1.8+的新特性):sudo命令路徑

ansible_connection:連接類型,可以是local、ssh或paramiko,ansible1.2之前默認爲paramiko

ansible_ssh_private_key_file:私鑰文件路徑

ansible_shell_type:目標系統的shell類型,默認爲sh,如果設置csh/fish,那麼命令需要遵循它們語法

ansible_python_interpreter:python解釋器路徑,默認是/usr/bin/python,但是如要要連*BSD系統的話,就需要該指令修改python路徑

ansible_*_interpreter:這裏的"*"可以是ruby或perl或其他語言的解釋器,作用和ansible_python_interpreter類似


wKiom1U5sv3R7WIBAAIRuuYaZCk780.jpg

wKioL1U5tSOgOCE-AAEr6G6PvaE636.jpg


7、查看測試主機的相關信息(舉例)

wKioL1U5t32SqhupAAGoypOUz6c644.jpg


8、查看Ansible相關的模塊,通過“ansible-doc -l ” 查看Ansible所有的模塊

[root@lvs03 ansible]# ansible-doc -l
less 436
Copyright (C) 1984-2009 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
a10_server                    Manage A10 Networks AX/SoftAX/Thunder/vThunder...
a10_service_group             Manage A10 Networks AX/SoftAX/Thunder/vThunder...
a10_virtual_server            Manage A10 Networks AX/SoftAX/Thunder/vThunder...
acl                           Sets and retrieves file ACL information.      
add_host                      add a host (and alternatively a group) to the ...
airbrake_deployment           Notify airbrake about app deployments         
alternatives                  Manages alternative programs for common comman...
apache2_module                enables/disables a module of the Apache2 webse...
apt                           Manages apt-packages                          
apt_key                       Add or remove an apt key                      
apt_repository                Add and remove APT repositories               
apt_rpm                       apt_rpm package manager                       
assemble                      Assembles a configuration file from fragments 
assert                        Fail with custom message                      
at                            Schedule the execution of a command or script ...
authorized_key                Adds or removes an SSH authorized key         
azure                         create or terminate a virtual machine in azure
bigip_facts                   Collect facts from F5 BIG-IP devices          
bigip_monitor_http            Manages F5 BIG-IP LTM http monitors           
bigip_monitor_tcp             Manages F5 BIG-IP LTM tcp monitors 

(由於模塊太多, 不一一例舉了)
(如果查看某個“模塊”相關信息,可以 “ansible-doc 模塊名” ) 
例如:ansible-doc user 可以查看user這個模塊的相關信息

9、使用模塊的舉例

例如:使用user模塊爲兩臺測試機添加賬號及密碼

wKiom1U5uzCAYcFyAAINgGKMgyg263.jpg


查看遠程測試機是否添加成功

wKioL1U5vOvSqpN3AADnsY1QTLc683.jpg

wKioL1U5vR6waMZ0AADI5f5MSU8809.jpg


複製(copy模塊)的舉例的演示

wKioL1U53Fnh_YV5AAPG3phHfbE730.jpg

關於copy的 src、dest兩個參數的說明

= dest
        Remote absolute path where the file should be copied to. If
        src is a directory, this must be a directory too. [Default:
        None]
        
- src
        Local path to a file to copy to the remote server; can be
        absolute or relative. If path is a directory, it is copied
        recursively. In this case, if path ends with "/", only inside
        contents of that directory are copied to destination.
        Otherwise, if it does not end with "/", the directory itself
        with all contents is copied. This behavior is similar to
        Rsync. [Default: None]

舉例:批量創建cron定時任務

[root@lvs03 opt]# ansible host -m cron -a 'name="sync time" minute="*/3" job="/usr/sbin/ntpdate 202.120.2.101 &> /dev/null"'

舉例:批量創建file文件

[root@lvs03 opt]# ansible host -m file -a 'path=/opt/sss.txt state=touch'


常用模塊:

command

user

copy

cron

file

filesystem

group

hostname

mount

ping

yum

shell

service

script


獲取模塊幫助:

    ansible-doc -l

    ansible-doc  MODULENAME


尾記:至於其他的模塊的功能請,就不一一介紹了。請自行研究~!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章