ansible 自動化運(yùn)維工具

一.ansible簡介

?ansible是自動化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。

ansible是基于模塊工作的,本身沒有批量部署的能力。ansible只是提供一種框架,并且基于模塊化工作,本身沒有批量部署的能力。真正具有批量部署的是ansible所運(yùn)行的模塊.

二.ansible的特點(diǎn):

1.部署簡單,只需在主控端部署Ansible環(huán)境,被控端無需做任何操作,輕量級,沒有agent,更新時,只需在操作機(jī)上進(jìn)行一次更新即可;

2.默認(rèn)使用SSH協(xié)議對設(shè)備進(jìn)行管理

3.有大量常規(guī)運(yùn)維操作模塊,可實(shí)現(xiàn)日常絕大部分操作

4.配置簡單、功能強(qiáng)大、擴(kuò)展性強(qiáng)

5.支持API及自定義模塊,可通過Python輕松擴(kuò)展

6.通過Playbooks(劇本)來定制強(qiáng)大的配置、狀態(tài)管理

7.提供一個功能強(qiáng)大、操作性強(qiáng)的Web管理界面和REST API接口

三.ansible的架構(gòu):

ansible的架構(gòu)

五個組成部分:

1)ansible:核心

2)modules:包括 Ansible 自帶的核心模塊(core modules)及自定義模塊(custom modules)

3)Plugins :完成模塊功能的補(bǔ)充,包括連接插件、郵件插件等

4)Playbooks : 劇本;定義 Ansible 多任務(wù)配置文件,由Ansible 自動執(zhí)行

5)host Inventory : 定義 Ansible 管理主機(jī)的清單

四.ansible工作流程:

ansible工作流程

簡單流程:

1)加載默認(rèn)的配置文件,默認(rèn)/etc/ansible/ansible.cfg

2)查找對應(yīng)的主機(jī)配置文件,找到要執(zhí)行的主機(jī)或者組

3)加載自己對應(yīng)的模塊文件,如command

4)?通過ansible將模塊或命令生成對應(yīng)的臨時py文件,并將該文件傳輸至遠(yuǎn)程服務(wù)器端

5)對應(yīng)執(zhí)行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件

6)給文件+x執(zhí)行,執(zhí)行并返回結(jié)果

7)刪除臨時py文件,sleep 0退出

五.安裝ansible

1.需要下載epel源才能安裝ansible.

yum install epel-release -y

2.yum install ansible? -y

版本介紹

3.主要配置文件和命令:

/etc/ansible/ansible.cfg? ? ? #主配置文件,配置ansible工作特性

/etc/ansible/hosts? ? ? ? #主機(jī)清單

/etc/ansible/roles/? ? ? ?#存放角色的目錄

/usr/bin/ansible? ? ? ? ? #主程序,臨時命令執(zhí)行工具

/usr/bin/ansible-doc #查看配置文檔,模塊功能查看工具

/usr/bin/ansible-galaxy? ? #下載/上傳代碼或Roles模塊的官網(wǎng)平臺

/usr/bin/ansible-playbook? ?#定制自動化任務(wù),編排劇本工具

/usr/bin/ansible-pull? ? ? ? ? #遠(yuǎn)程執(zhí)行命令的工具

/usr/bin/ansible-vault? ? ? ?#文件加密工具

/usr/bin/ansible-console? ? ? #基于Console界面與用戶交互的執(zhí)行工具

3.1.ansible默認(rèn)配置文件:

[defaults] 默認(rèn)配置

#inventory = /etc/ansible/hosts #主機(jī)列表配置文件

#library = /usr/share/my_modules/ #庫文件存放目錄

#module_utils = /usr/share/my_module_utils/ #模塊存放目錄

#remote_tmp = ~/.ansible/tmp #臨時py命令文件存放在遠(yuǎn)程主機(jī)目錄

#local_tmp = ~/.ansible/tmp #本機(jī)的臨時命令執(zhí)行目錄

#forks = 5 #默認(rèn)并發(fā)數(shù)?

#poll_interval = 15 #時間間隔

#sudo_user = root #默認(rèn)sudo用戶

#ask_sudo_pass = True #每次執(zhí)行ansible命令是否詢問sudo用戶密碼

#ask_pass = True #每次執(zhí)行ansible命令是否詢問ssh密碼

#transport = smart #傳輸方式

#remote_port = 22 #遠(yuǎn)程端口號

#module_lang = C

#module_set_locale = False

host_key_checking = False? #檢查對應(yīng)服務(wù)器的host_key,建議取消注釋.

log_path=/var/log/ansible.log #記錄日志及位置,默認(rèn)不記錄 建議取消注釋

4.免秘鑰登錄被管理的服務(wù)器:

操作步驟:ssh免秘鑰登錄

如果出現(xiàn)ssh鏈接較慢的現(xiàn)象,這里則需要修改sshd服務(wù)的兩個參數(shù)來解決該問題:

UseDNS no

GSSAPIAuthentication no

5.ansible主要參數(shù)詳解

ansible?<host-pattern> [-f forks] [-m module_name] [-a args]

-v :打印詳細(xì)模式

-i PATH :指定host文件路徑

-f NUM:指定fork開啟同步進(jìn)程的個數(shù),默認(rèn)是5

-m NAME:指定module模塊,默認(rèn)為command模塊

-a MODULE_ARGS:module模塊的參數(shù)或者命令

-k:輸入遠(yuǎn)程被管理端root的密碼,

-sudo:基于sudo執(zhí)行

-K:提示輸入sudo密碼與sudo一起使用

-u USERNAME:執(zhí)行執(zhí)行用戶

-C:測試執(zhí)行過程,不改變真實(shí)內(nèi)容,相當(dāng)于預(yù)演

-T TIMEOUT:執(zhí)行命令超時事件,默認(rèn)為10s

--version:查看Ansible軟件的版本信息

ansible-doc?-l --------->查看模塊列表

ansible-doc??-s 模塊名稱 --------->查看相關(guān)模塊參數(shù)

6.測試連接被控制服務(wù)器:

ansible? -m ping? ip地址

測試連接被控制服務(wù)器

7.主機(jī)清單中增加被控端主機(jī),需要注意的是,主機(jī)清單也支持分組模式,這里將三臺主機(jī)分為web_ceshi組

主機(jī)清單中增加被控端主機(jī)

/etc/ansible/host中存在三類主機(jī):未分組的主機(jī),有組的主機(jī)(一組屬于"webservers"組的主機(jī))和數(shù)據(jù)庫有關(guān)("dbservers"組中的數(shù)據(jù)庫服務(wù)器集合)

六.模塊的使用

1.ping模塊的使用:

測試分組服務(wù)器進(jìn)行存活性檢測:

分組服務(wù)器進(jìn)行存活性檢測

2.command模塊:

選項(xiàng):

1)chdir? ? # 在執(zhí)行命令之前,先切換到該目錄

改變目錄

2)creates? # 一個文件名,當(dāng)這個文件存在,則該命令不執(zhí)行,可以用來做判斷

存在不創(chuàng)建文件

removes? ? ? # 一個文件名,這個文件不存在,則該命令不執(zhí)行,與creates相反的判斷

不存在不執(zhí)行

3.shell模塊: -a 的參數(shù)就是shell命令

shell模塊

4.copy模塊

報(bào)錯:Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!

解決方法(被控制端操作):

yum install libselinux-python -y??

關(guān)閉selinux

1)指定文件復(fù)制

文件復(fù)制

2)指定內(nèi)容復(fù)制:

指定文件復(fù)制

5.file模塊

1)創(chuàng)建目錄:?

-a 'path=目錄位置 state=directory group=屬組 ower=屬主? mode=權(quán)限'

2)創(chuàng)建鏈接:

-a 'path=鏈接文件位置? src=源文件位置 state=link '

-a ' src=源文件位置? dest=鏈接文件位置 state=hard '? ?------>硬鏈接

3)刪除文件:

-a 'path=文件位置? state=absent'

6.fetch

1)拉取遠(yuǎn)程主機(jī)文件到本地:

拉取文件

7.cron計(jì)劃任務(wù)模塊:

參數(shù):

1)action:

cron backup=? #如果設(shè)置,創(chuàng)建一個crontab備份 【yes|no】

cron_file=? ? #如果指定, 使用這個文件cron.d,而不是單個用戶

2)crontab

  day=? ? #日應(yīng)該運(yùn)行的工作(1-31, *, */2, )

  hour=? # 小時 (0-23, *, */2, )

  minute=? ? #分鐘(0-59, *, */2, )

  month=? ? #月(1-12, *, /2, )

  weekday? # 周 ( 0-6forSunday-Saturday,, )

  job=? ? ? #指明運(yùn)行的命令是什么

  name=? #定時任務(wù)描述

  reboot? ? # 任務(wù)在重啟時運(yùn)行,不建議使用,建議使用special_time

  special_time? #特殊的時間范圍,參數(shù):reboot(重啟時),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小時)

  state? #指定狀態(tài),present表示添加定時任務(wù),也是默認(rèn)設(shè)置,absent表示刪除定時任務(wù)

  user? ? #以哪個用戶的身份執(zhí)行

實(shí)例:

ansible web-ceshi? -m cron -a "name='Clear the iptable' minute=*/5? job='/sbin/iptables? -F'?state=absent"

ansible web-ceshi? -m cron -a 'name="list df every hour" special_time=hourly job="/bin/df -lh >> /app/disk_total &> /dev/null"

ansible web-ceshi? -m cron -a "name='Clear the iptable'?minute=*/5?job='/sbin/iptables -F'? "

8.yum模塊:

實(shí)例1:ansible web-ceshi? -m yum -a "name=/app/zabbix-release-3.4-2.el7.noarch.rpm?state=present disable_gpg_check=yes"

參數(shù):

name:#所安裝的包的名稱

state= #present安裝, latest安裝最新的, absent 卸載軟件。

disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest’。

9.user模塊,group模塊:

1)user模塊是請求的是useradd, userdel, usermod三個指令。

常用參數(shù)

參數(shù)名選項(xiàng)說明

home???指定用戶的家目錄,需要與create home配合使

groups???指定用戶的屬組

uid???指定用的uid

password???指定用戶的密碼

name???指定用戶名

createhome???是否創(chuàng)建家目錄 yes|no

system???是否為系統(tǒng)用戶

remove???當(dāng)state=absent時,remove=yes則表示連同家目錄一起刪除,等價(jià)于userdel -r

state???是創(chuàng)建還是刪除

shell???指定用戶的shell環(huán)境

指定password參數(shù)時,不能使用明文密碼,因?yàn)楹竺孢@一串密碼會被直接傳送到被管理主機(jī)的/etc/shadow文件中,所以需要先將密碼字符串進(jìn)行加密處理。然后將得到的字符串放到password中即可。不同的發(fā)行版默認(rèn)使用的加密方式可能會有區(qū)別,具體可以查看/etc/login.defs文件確認(rèn),centos 6.5版本使用的是SHA512加密算法

eg:創(chuàng)建用戶along01,uid=1111,組為along,家目錄在/app/along01 下

ansible web-ceshi? -m user?-a 'name=along01?comment="along01 is along" uid=1111 group=along shell=/bin/bash home=/app/along01'

ansible web-ceshi? -m?shell?-a "cat /etc/passwd |grep along01" 查看

ansible web-ceshi -m?user?-a "name=along01 state=absent" 刪除用戶

ansible web-ceshi? -m group? -a 'name=along state=present'

10.遠(yuǎn)端執(zhí)行腳本:

?ansible? -m script? web-ceshi? -a '腳本名稱'?

11.setup模塊

查詢?nèi)啃畔?/div>

1)ansible all -m setup --tree /tmp/facts?

將所有主機(jī)的信息輸入到監(jiān)控端的/tmp/facts目錄下,每臺主機(jī)的信息輸入到主機(jī)名文件中

2)查看部分詳細(xì)信息:

過濾信息

13.?get_url模塊

目的:將http://192.168.1.115/favicon.ico文件下載到指定節(jié)點(diǎn)的/tmp目錄下

命令:ansible web-ceshi? -m get_url -a 'url=http://192.168.1.115/favicon.ico? dest=/tmp'


要想更好更簡便的使用,請多參考官網(wǎng)的幫助文檔http://docs.ansible.com/ansible/latest/intro_adhoc.html?或者使用ansible-hoc 模塊名查看!!!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容