一、自動(dòng)化運(yùn)維工具—Ansible
1、運(yùn)維工具特點(diǎn)
Ansible 與 Saltstack 均是基于 Python 語(yǔ)言開(kāi)發(fā),Ansible 只需要在一臺(tái)普通的服務(wù)器上運(yùn)行即可,不需要在客戶(hù)端服務(wù)器上安裝客戶(hù)端。因?yàn)?Ansible 是基于 SSH 遠(yuǎn)程管理,而Linux服務(wù)器大都離不開(kāi)SSH,所以Ansible不需要為配置工作添加額外的支持。
Ansible 安裝使用非常簡(jiǎn)單,而且基于上千個(gè)插件和模塊實(shí)現(xiàn)各種軟件、平臺(tái)、版本的管理,支持虛擬容器多層級(jí)的部署。很多讀者在使用 Ansible 工具時(shí),認(rèn)為 Ansible比 Saltstatck 執(zhí)行效率慢,其實(shí)不是軟件本身慢,是由于 SSH 服務(wù)慢,可以?xún)?yōu)化 SSH 連接速度及使用 Ansible 加速模塊,滿(mǎn)足企業(yè)上萬(wàn)臺(tái)服務(wù)器的維護(hù)和管理。
2、Ansible運(yùn)維工具原理
Ansible分為控制端和被控制端,主要是基于SSH協(xié)議去管理客戶(hù)端,被控制端是不需要安裝agent插件的Ansible會(huì)讀取控制端的host文件 ,根據(jù)文件中定義的IP列表信息,調(diào)取本地的各個(gè)模塊對(duì)被控端機(jī)器實(shí)現(xiàn)批量、并發(fā)的配置管理和維護(hù),如果任務(wù)比較復(fù)雜可以寫(xiě)成PlayBook劇本進(jìn)行分發(fā)管理。
自動(dòng)運(yùn)維管理工具優(yōu)點(diǎn)
- 輕量級(jí),更新時(shí),只需要在操作機(jī)上進(jìn)行一次更新即可;
- 采用 SSH 協(xié)議;
- 不需要去客戶(hù)端安裝 agent;
- 批量任務(wù)執(zhí)行可以寫(xiě)成腳本,而且不用分發(fā)到遠(yuǎn)程就可以執(zhí)行;
- 使用 python 編寫(xiě)的,維護(hù)更簡(jiǎn)單;
- 支持 sudo 普通用戶(hù)命令;
- 去中心化管理。
3、Ansible自動(dòng)化運(yùn)維工具流程
(1)加載自己的配置文件,默認(rèn)/etc/ansible/ansible.cfg
(2)查找對(duì)應(yīng)的主機(jī)配置文件,找到要執(zhí)行的主機(jī)或組
(3)加載自己對(duì)應(yīng)的模塊文件,如command yum ping
(4)通過(guò)ansible將模塊命令生成對(duì)應(yīng)臨時(shí)py文件(pyhton),并將該文件傳輸至遠(yuǎn)程服務(wù)器上
(5)對(duì)應(yīng)執(zhí)行用戶(hù)的家目錄的.ansible/tmp/xxx/xxxx.py文件
(6)給文件+執(zhí)行權(quán)限
(7)執(zhí)行并返回結(jié)果,刪除臨時(shí)文件,sleep 0 退出
二、安裝Ansible
管理端Ansible:192.168.10.135
被管理端:192.168.10.136
被管理端:192.168.10.137
1、安裝準(zhǔn)備
[root@localhost ~]#setenforce 0
[root@localhost ~]#systemctl stop firewalld #關(guān)閉防火墻
2、Ansible控制端安裝epel擴(kuò)展源
安裝ansible自動(dòng)化管理工具
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install ansible -y
[root@localhost ~]#tree /etc/ansible/ #目錄結(jié)構(gòu)
/etc/ansible/
├── ansible.cfg #ansible的配置文件,一般無(wú)需修改
├── hosts #ansible的主機(jī)清單,用于存儲(chǔ)需要管理的遠(yuǎn)程主機(jī)的相關(guān)信息
└── roles #公共角色目錄
3、配置主機(jī)清單
[root@localhost ~]#vim /etc/ansible/hosts
[webservers]
192.168.10.136
[dbservers]
192.168.10.137
#保存退出
4、配置密鑰對(duì)驗(yàn)證
[root@Ansible ~]#ssh-keygen -t rsa #一路回車(chē)就OK
[root@Ansible ~]#sshpass -p '123123' ssh-copy-id root@192.168.10.136
[root@Ansible ~]#sshpass -p '123123' ssh-copy-id root@192.168.10.137
##驗(yàn)證
[root@Ansible ~]#ssh 192.168.10.136
[root@Ansible ~]#ssh 192.168.10.137
5、查詢(xún)webserver組中主機(jī)的日期
[root@Ansible ~]#ansible dbservers -m command -a 'date'
192.168.10.137 | CHANGED | rc=0 >>
2023年 04月 27日 星期四 15:10:25 CST
[root@Ansible ~]#ansible webservers -m command -a 'date'
192.168.10.136 | CHANGED | rc=0 >>
2023年 04月 27日 星期四 15:10:31 CST
三、Ansible命令模塊
1、command模塊
在遠(yuǎn)程主機(jī)執(zhí)行命令,不支持管道 重定向shell等
[root@Ansible ~]#ansible-doc -l #列出所有已安裝的模塊,按q退出
[root@Ansible ~]#ansible all -m command -a 'date'
#所有主機(jī)執(zhí)行date命令,其中all可以換成IP或者分類(lèi)名稱(chēng)
192.168.10.136 | CHANGED | rc=0 >>
2023年 04月 27日 星期四 15:15:04 CST
192.168.10.137 | CHANGED | rc=0 >>
2023年 04月 27日 星期四 15:15:04 CST
[root@Ansible ~]#ansible all -a 'date'
#不加-m模塊,則默認(rèn)使用command模塊
192.168.10.137 | CHANGED | rc=0 >>
2023年 04月 27日 星期四 15:15:14 CST
192.168.10.136 | CHANGED | rc=0 >>
2023年 04月 27日 星期四 15:15:14 CST
2、cron模塊
在遠(yuǎn)程主機(jī)定時(shí)計(jì)劃任務(wù)兩種狀態(tài)(state):present表示添加(可以省略),absent表示移除
[root@Ansible ~]#ansible-doc -s cron
[root@Ansible ~]#ansible webservers -m cron -a 'minute="*/1" job="/usr/bin/echo hello" name="test"'
#webserver:分類(lèi) -m指定模塊 -a輸出模塊內(nèi)的指令 分鐘:每分鐘,工作:輸出hello,工作名稱(chēng):test
[root@Ansible ~]#ansible 192.168.10.136 -a 'crontab -l'
#查看計(jì)劃任務(wù)命令
[root@Ansible ~]#ansible 192.168.10.136 -m cron -a 'name=test state=absent'
#移除計(jì)劃任務(wù)
3、user模塊
用戶(hù)管理模塊user模塊是請(qǐng)求三條指令,useradd,userdel,usermod
[root@Ansible ~]#ansible all -m user -a 'name=lisi' #為所有主機(jī)創(chuàng)建一個(gè)用戶(hù)
[root@Ansible ~]#ansible all -m command -a 'tail -1 /etc/passwd' #查看是否創(chuàng)建成功
[root@Ansible ~]#ansible all -m user -a 'user=lisi state=absent' #移除用戶(hù)
4、group模塊
用戶(hù)組管理的模塊group模塊請(qǐng)求的是groupadd、groupdel、groupmod模塊
[root@Ansible ~]#ansible-doc -s group #查看模塊信息
[root@Ansible ~]#ansible dbservers -m group -a 'name=lisi system=yes' #system=yes創(chuàng)建系統(tǒng)組
[root@Ansible ~]#ansible dbservers -a 'tail -1 /etc/group' #查看組賬號(hào)信息
[root@Ansible ~]#ansible dbservers -m user -a 'name=wangwu uid=1221 group=lisi system=yes'
[root@Ansible ~]#ansible dbservers -a 'id wangwu'
5、copy模塊
用于復(fù)制指定主機(jī)文件到遠(yuǎn)程主機(jī)文件
[root@Ansible ~]#ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak'
[root@Ansible ~]#ansible dbservers -a 'cat /opt/fstab.bak'
[root@Ansible ~]#ansible dbservers -m copy -a 'content="zz is good student" dest=/opt/zz.txt'
[root@Ansible ~]#ansible dbservers -a 'cat /opt/zz.txt'
6、file模塊
設(shè)置文件屬性
[root@Ansible ~]#ansible dbservers -m user -a 'name=dbservers system=yes'
[root@Ansible ~]#ansible dbservers -m file -a 'owner=dbservers group=dbservers mode=600 path=/opt/zz.txt'
[root@Ansible ~]#ansible dbservers -a 'ls -l /opt/zz.txt'
[root@Ansible ~]#ansible dbservers -m file -a 'src=/opt/zz.txt path=/opt/zz.txt.link state=link'
[root@Ansible ~]#ansible dbservers -a 'ls -l /opt'
7、ping模塊
檢測(cè)遠(yuǎn)程主機(jī)的連通性
[root@Ansible ~]#ansible all -m ping
8、service/systemd模塊
用于管理遠(yuǎn)程主機(jī)上的管理服務(wù)的運(yùn)行狀態(tài)
在192.168.10.137安裝httpd
[root@Client2 ~]#yum install -y httpd
[root@Ansible ~]#ansible dbservers -a 'systemctl status httpd'
[root@Ansible ~]#ansible dbservers -m service -a 'enabled=true name=httpd state=started'
#回到dbservers主機(jī)驗(yàn)證
[root@Client2 ~]#systemctl status httpd
[root@Client2 ~]#systemctl is-enabled httpd
enabled
9、Shell模塊
在遠(yuǎn)程主機(jī)執(zhí)行命令,相當(dāng)于調(diào)用遠(yuǎn)程主機(jī)的shell進(jìn)程,然后再該shell下打開(kāi)一個(gè)子shell運(yùn)行命令
[root@Ansible ~]#ansible dbservers -m user -a 'name=wangwu'
[root@Ansible ~]#ansible dbservers -m shell -a 'echo 123123 | passwd --stdin wangwu'
10、script模塊
實(shí)現(xiàn)遠(yuǎn)程批量運(yùn)行本地shell腳本
[root@Ansible ~]#vim test.sh
[root@Ansible ~]#chmod +x test.sh
[root@Ansible ~]#ansible all -m script -a 'test.sh'
[root@Ansible ~]#ansible all -a 'cat /opt/script.txt'
11、yum模塊
在遠(yuǎn)程主機(jī)上安裝與卸載軟件包
[root@Ansible ~]#ansible dbservers -m yum -a 'name=httpd'
[root@Ansible ~]#ansible dbservers -a 'rpm -q httpd'
[root@Ansible ~]#ansible dbservers -m yum -a 'name=httpd state=absent'
[root@Ansible ~]#ansible dbservers -a 'rpm -q httpd'
12、Setup模塊
facts是用來(lái)收集被管理節(jié)點(diǎn)的信息,使用setup可以獲取這些信息Ansible facts 是遠(yuǎn)程系統(tǒng)的信息,主要包含IP地址,操作系統(tǒng),以太網(wǎng)設(shè)備,mac 地址,時(shí)間/日期相關(guān)數(shù)據(jù),硬件信息等信息。
[root@Ansible ~]#ansible dbservers -m setup
13、hostname模塊
用于管理遠(yuǎn)程主機(jī)上的主機(jī)名
[root@Ansible ~]#ansible dbservers -m hostname -a "name=mysql01"
四、inventory主機(jī)清單
1、inventory介紹
hosts配置文件位置:/etc/ansible/hosts
Inventory支持對(duì)主機(jī)進(jìn)行分組,每個(gè)組內(nèi)可以定義多個(gè)主機(jī),每個(gè)主機(jī)都可以定義在任何一個(gè)或多個(gè)主機(jī)組內(nèi)。
2、inventory中的變量
- ansible_host ansible連接節(jié)點(diǎn)是的IP地址。
- ansible_port 連接對(duì)方的端口號(hào),ssh連接時(shí)默認(rèn)為22。
- ansible_user 連接對(duì)方主機(jī)時(shí)使用的主機(jī)名,將使用執(zhí)行ansible或ansible-playbook命令的用戶(hù)。
- nsible_password 連接時(shí)的用戶(hù)的ssh密碼,僅在未使用密鑰對(duì)驗(yàn)證的情況下有效。
- ansible_ssh_private_key_file 指定密鑰認(rèn)證ssh連接時(shí)的私鑰文件。
- ansible_ssh_common_args 提供給ssh sftp scp命令的額外參數(shù)。
- ansible_become 允許進(jìn)行權(quán)限提升。
- ansible_become_method 指定提升權(quán)限的方式,例如可使用/sudo/su/runas等方式。
- ansible_become_user 提升為哪個(gè)用戶(hù)的權(quán)限,默認(rèn)提升為root。
- ansible_becom_password 提升為指定用戶(hù)權(quán)限時(shí)的密碼。
3、主機(jī)變量
[webservers]
192.168.10.136 ansible_port=22 ansible_user=root ansible_password=abs123
4、組變量
[webservers:vars] #表示為webservers組內(nèi)所有主機(jī)自定義變量
ansible_user=root
ansible_password=abc123
[all:vars] #表示為所有組內(nèi)的所有主機(jī)自定義變量
ansible_port=22
5、嵌套組
[nginx]
192.168.10.135
192.168.10.136
192.168.10.137
[apahce]
192.168.10.3[0:3]
[webs:children] #表示為webs主機(jī)組中包含了nginx和apache組內(nèi)所有主機(jī)
apache
nginx
總結(jié)
(1)Ansible其中一個(gè)比較鮮明的特性Agentless,即無(wú)Agent的存在,只需在某個(gè)作為控制節(jié)點(diǎn)的主機(jī)上安裝一次Ansible即可,通常它基于ssh連接來(lái)控制遠(yuǎn)程主機(jī),遠(yuǎn)程主機(jī)上不需要安裝Ansible或其它額外的服務(wù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-429624.html
(2)Ansible的另一個(gè)比較鮮明的特性是它的絕大多數(shù)模塊都具備冪等性(idempotence)。所謂冪等性,指的是多次操作或多次執(zhí)行對(duì)系統(tǒng)資源的影響是一致的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429624.html
到了這里,關(guān)于Ansible自動(dòng)化部署工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!