第三階段基礎(chǔ)
時 ?間:2023年7月13日
參加人:全班人員
內(nèi) ?容:
Ansible自動化運(yùn)維工具
目錄
一、Ansible概述
二、Ansible特點
三、Ansible應(yīng)用
(一)使用者
(二)Ansible工具集合
(三)作用對象
四、Ansible的搭建
五、Ansible配置
六、Ansible命令
(一)ansible
(二)Ansible-doc
(三)ansible-playbook
(四)ansible-console
七、Ansible模塊
(一)command模塊
(二)shell模塊
(三)raw模塊
(四)copy模塊
(五)hostname模塊
(六)yum模塊
(七)service模塊
一、Ansible概述
Ansible是最近非常火的一款開源運(yùn)維自動化工具,通過Ansible可以實現(xiàn)運(yùn)維自動化,提高運(yùn)維工程師的工作效率,減少人為失誤;
Ansible可以通過本身集成的非常豐富的模塊實現(xiàn)各種管理任務(wù),其自帶模塊數(shù)量已超過上千個,更為重要的是,它的操作非常簡單,即使新手也比較容易上手;
Ansible提供的功能卻非常豐富,在運(yùn)維領(lǐng)域,幾乎可以實現(xiàn)任何事情。目
前屬于RedHat公司產(chǎn)品,官方地址:
Ansible is Simple IT Automation。
二、Ansible特點
Ansible自2012年發(fā)布以來,很快在全球流行!
其特點表現(xiàn)如下:
1、基于python開發(fā),運(yùn)維工程師對其二次開發(fā)相對容易;
2、擁有豐富的內(nèi)置模塊,基本可以滿足一切要求;
3、管理模式非常簡單,一條命令可以影響上千臺機(jī)器;
4、無客戶端模式設(shè)計,底層基于SSH通信;
5、Ansible發(fā)布后也陸續(xù)被AWS,Google,Cloud Platfrom,Microsoft Azure,Cisco,HP,VMware,Twitter等大公司接納并投入使用。
三、Ansible應(yīng)用
Ansible沒有客戶端,也不需要在被管理主機(jī)添加任何代理程序,通過SSH完成底層通信,而SSH在Linux的發(fā)型版本中默認(rèn)已經(jīng)安裝并啟用,而在Windows系統(tǒng)下則依賴于PowerShell。
Ansible要求管理端必須是Linux系統(tǒng),在管理節(jié)點通過應(yīng)用模塊將指令發(fā)送到被管理主機(jī)上,并在執(zhí)行完畢后自動刪除產(chǎn)生的臨時文件,根據(jù)Ansible使用過程中不同角色,可將其分為三個部分:
1、使用者如何使用Ansible實現(xiàn)自動化運(yùn)維?
2、Ansible的工具集,Ansible可以實現(xiàn)的功能?
3、作用對象,Ansible可以影響哪些主機(jī)?
(一)使用者
如圖所示:Ansible使用者可以采用多種方式和Ansible交互,圖中我們展示了四種方式
CMDB:CMDB系統(tǒng)存儲和管理著企業(yè)IT架構(gòu)中的各種配置信息,是構(gòu)建ITL項目核心工具,運(yùn)維人員可以組合CMDB和Ansible,通過CMDB直接下發(fā)指令調(diào)用Ansible工具完成操作者所希望達(dá)到的目標(biāo)。
PUBLIC/PRIVATE方式:Ansible除了豐富的內(nèi)置模塊外,同時提供豐富的API語言接口,如PHP,Pythone,PERL等多種流行語言,基于PUBLIC/PRIVATE,Ansible以API調(diào)用的方式運(yùn)行。
Ad-Hoc命令集:Users直接通過Ad-Hoc命令集調(diào)用Ansible工具來完成工作。
Playbooks:Users預(yù)先編寫好Ansible Playbooks,通過執(zhí)行Playbooks中預(yù)先編排好的任務(wù)集按序執(zhí)行命令。
(二)Ansible工具集合
Ansible工具集合了inventory,Moudles,Plugins和API。其中:
inventory用來管理設(shè)備列表,可以通過分組(不同的業(yè)務(wù))實現(xiàn),對組的調(diào)用直接影響組內(nèi)所有的主機(jī);Moudles是各種執(zhí)行模塊,幾乎所有的管理任務(wù)都是通過模塊來執(zhí)行的;Plugins提供了各種附加功能;API為編程人員提供了一個調(diào)用接口,可以做Ansible的二次開發(fā)具體表現(xiàn)如下:
1、Ansible Playbook:任務(wù)腳本,編排定義Ansible任務(wù)集的配置文件,由Ansible按序依次執(zhí)行,通常是JSON格式的YML/YAML文件;
2、inventory:Ansible管理主機(jī)清單;
3、Moudle:Ansible執(zhí)行命令功能模塊,多數(shù)為內(nèi)置的核心模塊也可以用戶自定義;
4、Plugins:模塊功能的補(bǔ)充,如連接類型插件,循環(huán)插件,變量插件,過濾插件等,該功能不常用;
5、API:提供第三方程序調(diào)用的應(yīng)用程序編程接口;
Ansible:該部分圖中表示的,組合inventory,API,Moudles,Plugins可以理解為Ansible命令工具其核心執(zhí)行工具。
(三)作用對象
Ansible的作用對象不僅僅是Linux和非Linux操作系統(tǒng)的主機(jī),也可以作用于各類PUBLIC/PRIVATE,商業(yè)和非商業(yè)設(shè)備的網(wǎng)絡(luò)設(shè)施。
使用者使用Ansible或Ansible-playbooks時,在服務(wù)器終端輸入Ansible的Ad-Hoc命令集或playbooks后,Ansible會遵循預(yù)先定義安排的規(guī)則將Playbooks逐步拆解為Play,再將Play組織成Ansible可以識別的任務(wù),隨后調(diào)用任務(wù)涉及的所有模板和插件,根據(jù)inventory中自定義的主機(jī)列表通過SSH將任務(wù)集以臨時文件或命令的形式傳輸給遠(yuǎn)程客戶端執(zhí)行并返回執(zhí)行結(jié)果,如果是臨時文件則執(zhí)行完畢后自動刪除。
四、Ansible的搭建
接下來我們來學(xué)習(xí)Ansible的安裝和部署。Ansible的安裝部署非常簡單,以RPM安裝為例,配置好阿里云的yum源直接安裝就可以了,Ansible的管理端只能是Linux,如Redhat,Debian,CentOS。下面介紹在CentOS7.x上安裝部署Ansible:
實驗環(huán)境:
服務(wù)器準(zhǔn)備:
角色 |
ip地址 |
主機(jī)名 |
Ansible |
192.168.59.137 |
huyang1 |
Client |
192.168.59.138 |
huyang2 |
Client |
192.168.59.140 |
huyang3 |
環(huán)境配置:【所有服務(wù)器操作】
1、關(guān)閉防火墻
systemctl stop firewalld
iptables -F
setenforce 0
2、配置免密登錄
【huyang1】ssh-keygen
【huyang1】ssh-copy-id 192.168.59.138
【huyang1】ssh-copy-id 192.168.59.140
登錄測試:
【huyang1】ssh 192.168.59.138
【huyang1】ssh 192.168.59.140
五、Ansible配置
步驟一:下載安裝ansible軟件
yum -y install ansible
步驟二:修改配置文件
vim /etc/ansible/hosts
修改配置如下:
步驟三:ping測試;批量顯示hu組中的磁盤使用情況
ansible -i /etc/ansible/hosts hu?-m ping
ansible hu -m command -a "df -hT" 不指定IP地址
ansible hu -m command -a "df -hT"? --limit 192.168.59.138 ? 指定IP地址
也可以:不指定組、但指定ip地址(在組內(nèi))
ansible 192.168.59.138 -m command -a "df -hT" ?
六、Ansible命令
Ansible的維護(hù)命令大多以ansible開頭,在終端輸入ansible后連續(xù)按兩次tab鍵,會補(bǔ)全所有以ansible字母開頭的命令,下面介紹Ansible的一些常用命令。
(一)ansible
Ansible是生產(chǎn)環(huán)境中使用非常頻繁的命令之一,
主要在以下場景應(yīng)用:
1、非固化需求;
2、臨時一次性操作;
3、二次開發(fā)接口調(diào)用;
非固化需求是指臨時性的維護(hù),如查看hu服務(wù)器組的磁盤使用情況,復(fù)制一個文件到其他機(jī)器等,類似這些沒有規(guī)律的,臨時需要做的任務(wù),我們稱為非固化需求,臨時一次性操作。
語法:ansible <host-pattern> [options]
可用選項如下:
-v(--verbose):輸出詳細(xì)的執(zhí)行過程信息,可以得到執(zhí)行過程所有信息;
-i PATH(inventory=PATH):指定inventory信息,默認(rèn)為/etc/ansible/hosts;
-f NUM(--forks=NUM):并發(fā)線程數(shù),默認(rèn)為5個線程
--private-key=PRIVATE_KEY_FILE:指定密鑰文件
-m NAME,--moudle-name=NAME:指定執(zhí)行時使用的模塊
-M DIRECTORY(--module-path=DIRECTORY):指定模塊存放路徑,默認(rèn)為/usr/share/ansible,也可以通過ANSIBLE_LIBRARY設(shè)定默認(rèn)目錄
-a ARGUMENTS(--args=ARGUMENTS):指定模塊參數(shù)
-u USERNAME(--user=USERNAME):指定遠(yuǎn)程主機(jī)USERNAME運(yùn)行命令
-l subset(--limit=SUBSET):限定運(yùn)行主機(jī)
--list-hosts:列出符合條件的主機(jī)列表,不執(zhí)行任何命令
實驗:(當(dāng)前組內(nèi)只有2個服務(wù)器)
1.檢查所有主機(jī)是否存活,ping服務(wù)器,同時ping!
ansible all -f 5 -m ping???
ansible all -m ping??兩者效果一樣,默認(rèn)同時ping5個
2.列出hu組中所有主機(jī)列表
ansible hu --list-host
Ansible的返回結(jié)果非常友好,一般會用三種顏色執(zhí)行結(jié)果:
紅色,綠色和橘黃色,其中:
紅色表示執(zhí)行過程中有異常;
橘黃色表示命令執(zhí)行后目標(biāo)有狀態(tài)變化;
綠色表示執(zhí)行成功且沒有對目標(biāo)機(jī)器做修改。
(二)Ansible-doc
ansible-doc用來查詢ansible模塊文檔的說明,類似于man命令,針對每個模塊都有詳細(xì)的用法說明及應(yīng)用案例介紹:
ansible-doc -l #查看總幫助
ansible-doc -s shell #查看shell模塊的幫助
ansible-doc -s raw
語法:ansible-doc [options] [module……]
實驗:
1.列出支持的模塊
ansible-doc -l
2.查詢ping模塊的說明信息
ansible-doc ping???類似于ansible-doc -s ping?
(三)ansible-playbook
Ansible-playbook是日常應(yīng)用中使用頻率最高的命令,類似于Linux系統(tǒng)中的sh或source命令,用來執(zhí)行系列任務(wù),其工作機(jī)制是:
通過讀取編寫好的playbook文件實現(xiàn)集中處理任務(wù),ansible-playbook命令后跟yml或者yaml格式的playbook文件,playbook文件存放了要執(zhí)行的任務(wù)代碼,命令使用方式如下
語法:ansible-playbook playbook.yml
ansible-playbook需要之前編譯好、建議寫playbook.yml文件的絕對路徑
此處為重點,將在明天的文章中體現(xiàn)?。。?/p>
(四)ansible-console
?ansible-console是ansible為用戶提供的一款交互式工具,類似于Windows中的cmd以及Linux中的shell;
用戶可以在ansible-console虛擬出來的終端上做像shell一樣使用ansible內(nèi)置的各種命令;
這為習(xí)慣于使用shell交互方式的用戶提供了良好的體驗,在終端輸入ansible-console命令后顯示如下:
所有操作與shell類似,而且支持Tab鍵補(bǔ)全,按快捷鍵Ctrl+D或Ctrl+C或exit即可退出當(dāng)前的虛擬終端。
七、Ansible模塊
(一)command模塊
command模塊在遠(yuǎn)程主機(jī)執(zhí)行命令,但是不支持管道,重定向等shell的特征,常用參數(shù)如下(不支持管道,不建議使用):
chdir:在遠(yuǎn)程主機(jī)上運(yùn)行命令前要提前進(jìn)入的目錄;
creates:在命令運(yùn)行時創(chuàng)建一個文件,如果文件已經(jīng)存在,則不會創(chuàng)建任務(wù);
removes:在命令運(yùn)行時移除一個文件,如果文件不存在,則不會執(zhí)行移除任務(wù);
executable:指明運(yùn)行命令的shell程序。
實驗:
新建文件,可以成功,但是在重定向和使用管道符統(tǒng)計信息時,command模塊不支持!
(二)shell模塊
shell模塊在遠(yuǎn)程主機(jī)執(zhí)行命令,相當(dāng)于調(diào)用遠(yuǎn)程主機(jī)的shell進(jìn)程,然后在該shell下打開一個子shell運(yùn)行命令,和command模塊的區(qū)別:
它支持shell特征,如管道,重定向等
實驗:
1、重定向(單個ip和一組)
ansible 192.168.59.138?-m shell -a "echo hello?> 1.txt"
ansible hu?-m shell -a "echo hello?> 1.txt"
2、測試管道符
ansible Rich -m shell -a “ifconfig ens32 | awk ‘NR==2{print $2}’”
?????? 通過上述實驗可以得知,shell模塊相比于command,在command的使用基礎(chǔ)上,支持重定向和管道符;但是ansible在使用過程中也有一些短處,如上實驗,在選擇顯示ip地址時,ansible只能顯示當(dāng)前行,卻不能選擇列。
(三)raw模塊
最原始的方式運(yùn)行命令(不依賴python,僅通過ssh實現(xiàn))
實驗:
清除yum緩存
ansible hu?-m raw -a "yum clean all"
ansible hu?-m shell?-a "yum clean all"
相比與使用shell有一些區(qū)別
(四)copy模塊
copy模塊用于復(fù)制指定主機(jī)文件到遠(yuǎn)程主機(jī)的指定位置,常見參數(shù)如下:
dest:指出復(fù)制文件的目標(biāo)目錄位置,使用絕對路徑。如果源是目錄,指目標(biāo)也要是目錄,如果目標(biāo)文件已經(jīng)存在會覆蓋原有內(nèi)容。
src:指出源文件的路徑,可以使用相對路徑或絕對路徑,支持直接指定目錄,如果源是目錄則目標(biāo)也要是目錄
mode:指出復(fù)制時,目標(biāo)文件的權(quán)限 可選
owner:指出復(fù)制時,目標(biāo)文件的屬主 可選
group:指出復(fù)制時,目標(biāo)文件的屬組 可選
content:指出復(fù)制到目標(biāo)主機(jī)上的內(nèi)容,不能與src一起使用,相當(dāng)于復(fù)制content指明的數(shù)據(jù)到目標(biāo)文件中
特別提示:
參數(shù):backup=yes===>意思是,如果目標(biāo)路徑下,有與我同名但不同內(nèi)容的文件時,在覆蓋前,對目標(biāo)文件先進(jìn)行備份。
所有被管理端節(jié)點必須安裝libselinux-python包
實 驗:
將hu組中主機(jī)的/root/a.txt文件拷貝到/root下
指定權(quán)限為777 屬主為root 屬組為root
ansible hu?-m copy -a "src=/root/a.txt?dest=/root?mode=777 owner=root?group=root"
(五)hostname模塊
hostname模塊用于管理遠(yuǎn)程主機(jī)上的主機(jī)名,常用參數(shù)如下:
name:指明主機(jī)名
實驗:
更改huyang2(192.168.59.138)的主機(jī)名為hu
?ansible 192.168.59.138?-m hostname -a "name=hu"
(六)yum模塊
yum模塊基于yum機(jī)制,對遠(yuǎn)程主機(jī)管理程序包,常用參數(shù)如下:
name:程序包的名稱,可以帶上版本號,如不指定版本號默認(rèn)安裝為最新版本;
state=present | latest | absent:指明對程序包執(zhí)行的操作,present表示安裝程序包,latest表示安裝最新版本的程序包,absent表示卸載程序包;
disablerepo:在用yum安裝時禁用某個倉庫的ID;
enablerepo:在用yum安裝時啟用某個參考的ID;
conf_file:yum運(yùn)行時的配置文件而不是使用默認(rèn)的配置文件;
diable_gpg_check=yes | no:是否啟用完整性校驗功能。
實驗:
注意實驗前要在服務(wù)器端配置yum倉庫;
管理員只是發(fā)送yum命令道被管理端,被管理端要存在可用的yum倉庫才可以成功安裝。
1. client端yum安裝httpd,安裝需要時間
?ansible hu -m yum -a "name=httpd?state=present"
(七)service模塊
service模塊為用來管理遠(yuǎn)程主機(jī)上的服務(wù)的模塊,常見參數(shù)如下:
name:被管理的服務(wù)名稱
state=started | stopped | restarted:動作包含啟動關(guān)機(jī)或重啟
enabled=yes | no:表示是否設(shè)置該服務(wù)開機(jī)自啟動
runlevel:如果設(shè)定了enabled開機(jī)自啟動,則要定義在哪些運(yùn)行目標(biāo)下自啟動
實驗:
啟動httpd服務(wù)并設(shè)置為開啟自啟動
服務(wù)器端準(zhǔn)備操作 #如果沒有需要進(jìn)行安裝
ansible hu?-m service -a "name=httpd state=started enabled=yes"文章來源:http://www.zghlxwxcb.cn/news/detail-598412.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-598412.html
到了這里,關(guān)于從小白到大神之路之學(xué)習(xí)運(yùn)維第60天--------Ansible自動化運(yùn)維工具(安裝、操作、簡單使用,模塊的作用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!