一浦箱、Ansible概念介紹
1吸耿、Ansible概念
ansible就是一款運(yùn)用==Python語言開發(fā)==的自動(dòng)化運(yùn)維工具祠锣,==基于SSH協(xié)議==實(shí)現(xiàn)批量系統(tǒng)配置、批量程序部署咽安、批量運(yùn)行命令等功能 伴网。ansible不用配置配置文件,無需啟動(dòng)任何服務(wù)妆棒,不需要單獨(dú)安裝客戶端澡腾。
Ansible組成結(jié)構(gòu):
-
Ansible
Ansible的命令工具,核心執(zhí)行工具糕珊;一次性或臨時(shí)執(zhí)行的操作都是通過該命令執(zhí)行动分。
Ansible Playbook
是任務(wù)劇本(又稱任務(wù)集),編排定義Ansible任務(wù)集的配置文件红选,由Ansible順序依次執(zhí)行澜公,==yaml格式==。
-
Inventory
Ansible管理主機(jī)的清單喇肋,默認(rèn)是==/etc/ansible/hosts==文件玛瘸。
-
Modules
Ansible執(zhí)行命令的功能模塊,截止現(xiàn)在2.9版本共有3387個(gè)模塊苟蹈,==還可以自定義模塊==糊渊。
-
Plugins
插件,模塊功能的補(bǔ)充慧脱,常有連接類型插件渺绒、循環(huán)插件、變量插件菱鸥、過濾插件宗兼、插件功能用的較少。
-
API
提供給第三方程序調(diào)用的應(yīng)用程序編程接口氮采。
2殷绍、學(xué)習(xí)使用Ansible方法
==官方文檔==(推薦)、系統(tǒng)幫助文檔(ansible-doc 模塊名稱)鹊漠、網(wǎng)上博客文檔等三種方式
二主到、Ansible安裝流程
1、安裝軟件
yum -y install ansible
2躯概、編寫Inventory文件(管理主機(jī)清單)
(1)基于密碼口令連接
vim /etc/ansible/hosts
#方法一:主機(jī)+端口+用戶密碼
[web]
172.16.1.7 ansible_port=22 ansible_user=root ansible_password='123456'
172.16.1.8 ansible_port=22 ansible_user=root ansible_password='123456'
172.16.1.9 ansible_port=22 ansible_user=root ansible_password=123456'
#方法二:主機(jī)+用戶密碼
[web]
172.16.1.[7:9] ansible_user=root ansible_password='123456'
#方法三:主機(jī)+用戶密碼
[web]
172.16.1.[7:9]
[web:vars] #主機(jī)組變量
ansible_password='123456'
(2)基于密鑰連接
ssh-keygen #ansible主機(jī)創(chuàng)建密鑰
for i in {7..9}; do ssh-copy-id -i 172.16.1.$1; done #批量分發(fā)公鑰
vim /etc/ansible/hosts
[web]
172.16.1.[7:9]
3登钥、測(cè)試SSH連接是否正常
ssh 172.16.1.7
三、Ansible命令介紹
1娶靡、Ansible命令格式說明
2牧牢、示例
ansible web -m ping #指定主機(jī)組執(zhí)行命令
ansible 172.16.1.7,172.16.1.9 -m ping #指定多臺(tái)主機(jī)執(zhí)行命令
ansible all -m ping #指定所有主機(jī)執(zhí)行命令
四、Ansible常用模塊介紹
1、查看模塊幫助命令A(yù)nsible-doc
# ansible-doc -h
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j 以json格式顯示所有模塊信息
-l 列出所有的模塊
-s 查看模塊常用參數(shù)
#命令后直接跟模塊名塔鳍,顯示模塊所有信息
2伯铣、command模塊
ansible默認(rèn)的模塊,注意:shell中的=="<", ">", "|", ";", "&","$"==等特殊字符不能在command模塊中使用轮纫,如果需要使用腔寡,則用shell模塊 。==command模塊中命令別名失效蜡感。==
[root@m01 ~ 11:35:43]# ansible web -m command -a "ls -ld /etc"
172.16.1.7 | CHANGED | rc=0 >>
drwxr-xr-x. 89 root root 8192 Jul 23 20:27 /etc
[root@m01 ~ 11:35:51]# ansible web -a "ls -ld /etc"
172.16.1.7 | CHANGED | rc=0 >>
drwxr-xr-x. 89 root root 8192 Jul 23 20:27 /etc
[root@m01 ~ 11:40:09]# ansible web -a "ifconfig eth0|grep '10.0.0.7'"
172.16.1.7 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code
3蹬蚁、shell模塊
Ansible萬能模塊恃泪,專門用來執(zhí)行shell命令的模塊郑兴,和command模塊參數(shù)基本一樣,都有chdir贝乎、creates情连、removes等參數(shù)。==shell模塊不具備狀態(tài)監(jiān)測(cè)功能览效,會(huì)重復(fù)執(zhí)行==
[root@m01 ~ 11:40:30]# ansible web -m shell -a "ifconfig eth0|grep '10.0.0.7'"
172.16.1.7 | CHANGED | rc=0 >>
inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255
4却舀、copy模塊
用于管理端復(fù)制文件到遠(yuǎn)程主機(jī),并可以設(shè)置權(quán)限锤灿、屬組挽拔、屬主等
(1)示例
1)推送文件到遠(yuǎn)程主機(jī),并修改權(quán)限但校、屬組螃诅、屬主
[root@m01 ~ 12:09:21]# ansible web -m copy -a "src=/tmp/1.txt dest=/tmp mode=0600 owner=www group=www"
172.16.1.7 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/1.txt",
"gid": 1001,
"group": "www",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0600",
"owner": "www",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1595650245.49-7981-38715120566747/source",
"state": "file",
"uid": 1001
}
2)添加內(nèi)容到遠(yuǎn)程主機(jī)文件,并提前生成備份文件
[root@m01 ~ 12:10:46]# ansible web -m copy -a "content='zhenhao' dest=/tmp/1.txt backup=yes"
(2)模塊參數(shù)
src #指定管理端被推送的文件
dest #指定推送到客戶端哪兒
mode #指定推送到客戶端文件的權(quán)限設(shè)置
owner #指定推送到客戶端文件的屬主設(shè)置
group #指定推送到客戶端文件的屬組設(shè)置
backup #對(duì)推送到客戶端的文件進(jìn)行備份
content #添加內(nèi)容到客戶端文件里
5状囱、file模塊
用于對(duì)遠(yuǎn)程主機(jī)文件的處理术裸,創(chuàng)建,刪除亭枷,權(quán)限控制等
(1)示例
1)遠(yuǎn)程主機(jī)創(chuàng)建目錄并修改權(quán)限
[root@m01 ~ 16:49:19]# ansible web -m file -a "path=/tmp/oldboy state=directory mode=0744 owner=www group=www"
2)遠(yuǎn)程主機(jī)創(chuàng)建文件
[root@m01 ~ 16:54:24]# ansible web -m file -a "path=/tmp/2.txt state=touch"
3)遠(yuǎn)程主機(jī)創(chuàng)建軟鏈接文件
[root@m01 ~ 16:55:10]# ansible web -m file -a "src=/tmp/2.txt path=/tmp/hh state=link"
4)遠(yuǎn)程主機(jī)刪除文件
[root@m01 ~ 16:56:45]# ansible web -m file -a "path=/tmp/1.txt state=absent"
5)遞歸修改目錄及子目錄權(quán)限
[root@m01 ~ 17:00:38]# ansible web -m file -a "path=/tmp/oldboy state=directory recurse=yes mode=0600"
(2)模塊參數(shù)
src #指定鏈接的文件路徑
path #要管理設(shè)置的文件路徑
mode #指定遠(yuǎn)程主機(jī)文件的權(quán)限
owner #指定遠(yuǎn)程主機(jī)文件的屬主
group #指定遠(yuǎn)程主機(jī)文件的屬組
recurse #遞歸修改目錄及子目錄權(quán)限
state:
absent #刪除文件及目錄
directory #遞歸創(chuàng)建或修改目錄
file #默認(rèn)為文件袭艺,但如果文件不存在,不會(huì)創(chuàng)建文件
hard #創(chuàng)建或修改硬鏈接
link #創(chuàng)建或修改軟鏈接
touch #創(chuàng)建文件
6叨粘、script模塊
用于在遠(yuǎn)程主機(jī)上執(zhí)行腳本的模塊猾编,且遠(yuǎn)程主機(jī)上無需腳本
(1)示例
[root@m01 ~ 17:15:31]# cat >/tmp/hostname.sh <<'EOF'
> #!/bin/bash
> echo $(hostname)
> EOF
[root@m01 ~ 17:29:49]# ansible web -m script -a "/tmp/hostname.sh"
7、cron模塊
用于在遠(yuǎn)程主機(jī)上設(shè)置定時(shí)任務(wù)
(1)示例
1)創(chuàng)建定時(shí)任務(wù)
[root@m01 ~ 17:30:14]# ansible web -m cron -a "job='echo $(hostname)' minute=*/5 name=hostname"
2)注釋定時(shí)任務(wù)(==只能注釋ansible創(chuàng)建的定時(shí)任務(wù)==)
[root@m01 ~ 17:41:28]# ansible web -m cron -a "name=hostname disabled=yes job='echo $(hostname)'"
3)刪除定時(shí)任務(wù)(==只能刪除ansible創(chuàng)建的定時(shí)任務(wù)==)
[root@m01 ~ 17:41:54]# ansible web -m cron -a "name=hostname state=absent"
(2)模塊參數(shù)
minute #多少分鐘
hour #多少小時(shí)
day #多少日
month #多少月
weekday #多少周
job #執(zhí)行的定時(shí)任務(wù)命令
name #設(shè)置的定時(shí)任務(wù)名稱
disabled #對(duì)設(shè)置的定時(shí)任務(wù)進(jìn)行注釋
state:
absent #刪除設(shè)置的定時(shí)任務(wù)
8升敲、user模塊
用于對(duì)遠(yuǎn)程主機(jī)用戶的管理袍镀,用戶的創(chuàng)建、刪除冻晤、家目錄苇羡、屬組等設(shè)置
(1)示例
1)創(chuàng)建系統(tǒng)用戶
[root@m01 ~ 17:43:48]# ansible web -m user -a "uid=2020 group=www shell=/sbin/nologin name=www create_home=no"
2)刪除用戶
[root@m01 ~ 17:43:48]# ansible web -m user -a "name=www state=absent"
3)刪除用戶及家目錄
[root@m01 ~ 18:09:19]# ansible web -m user -a "name=hostname state=absent remove=yes"
(2)模塊參數(shù)
create_home:
no #不創(chuàng)建家目錄
group #指定用戶的用戶組名稱
home #指定用戶家目錄的路徑
name #用戶的名稱
remove:
yes #移除用戶家目錄
shell #指定用戶shell解釋器路徑
state:
absent #刪除用戶
uid #設(shè)置用戶uid
9、group模塊
用于對(duì)遠(yuǎn)程主機(jī)用戶組的管理
(1)示例
1)創(chuàng)建用戶組
[root@m01 ~ 18:10:52]# ansible web -m group -a "gid=2020 name=www"
2)刪除用戶組
[root@m01 ~ 18:10:52]# ansible web -m group -a "name=www state=absent"
(2)模塊參數(shù)
gid #指定用戶組GID
name #指定用戶組名稱
state:
absent #刪除用戶組
10、yum模塊
用于對(duì)遠(yuǎn)程主機(jī)軟件包的管理设江,下載锦茁、安裝、卸載叉存、升級(jí)等操作
(1)示例
1)安裝軟件
[root@m01 ~ 18:31:01]# ansible web -m yum -a "name=htop state=installed"
2)卸載軟件
[root@m01 ~ 18:31:01]# ansible web -m yum -a "name=htop state=removed"
(2)模塊參數(shù)
name #指定軟件包的名稱
state:
installed, present #安裝軟件包(兩者任選其一都可以)
removed, absent #卸載軟件包
latest #安裝最新軟件包
list:
installed #列出所有已安裝的軟件包
updates #列出所有可以更新的軟件包
repos #列出所有的yum倉(cāng)庫
11码俩、systemd模塊
服務(wù)模塊,用于對(duì)遠(yuǎn)程主機(jī)服務(wù)進(jìn)行管理歼捏,服務(wù)的啟動(dòng)稿存、關(guān)閉、開機(jī)自啟等 瞳秽,==和service模塊效果一樣==
(1)示例
1)開啟服務(wù)
[root@m01 ~ 18:31:01]# ansible web -m systemd -a "name=nginx state=started"
2)停止服務(wù)
[root@m01 ~ 18:31:01]# ansible web -m systemd -a "name=nginx state=stopped"
3)關(guān)閉開機(jī)自啟服務(wù)
[root@m01 ~ 18:44:42]# ansible web -m systemd -a "name=nginx enabled=no"
4)開啟開機(jī)自啟服務(wù)
[root@m01 ~ 18:46:34]# ansible web -m systemd -a "name=nginx state=started enabled=yes"
(2)模塊參數(shù)
enabled:
no #默認(rèn)瓣履,關(guān)閉開機(jī)自啟
yes #開啟開機(jī)自啟
name #服務(wù)名稱
state:
reloaded #重新加載服務(wù)
restarted #重啟服務(wù)
started #開啟服務(wù)
stopped #停止服務(wù)
12、mount模塊
用于管理遠(yuǎn)程主機(jī)掛載相關(guān)操作
(1)示例
1)掛載NFS目錄练俐,并寫入fstab文件
[root@m01 ~ 19:15:31]# ansible web -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs opts=defaults state=mounted"
2)卸載掛載目錄袖迎,并刪除寫入fstab的配置
[root@m01 ~ 19:16:13]# ansible web -m mount -a "path=/mnt state=unmounted"
(2)模塊參數(shù)
fstype #指定掛載系統(tǒng)文件類型
opts #指定掛載其他參數(shù)設(shè)置
path #掛載點(diǎn)路徑
src #需要掛載的設(shè)備路徑
state:
absent #卸載掛載點(diǎn)并刪除寫入fstab配置
mounted #進(jìn)行掛載并寫入fstab配置
present #只寫入fstab配置,不掛載
unmounted #只卸載掛載點(diǎn)腺晾,不刪除寫入fstab配置
remounted #強(qiáng)制重新掛載
13燕锥、unarchive模塊
用于解壓壓縮包到遠(yuǎn)程主機(jī),或在遠(yuǎn)程主機(jī)上解壓壓縮包
(1)示例
[root@m01 ~ 19:19:05]# ansible 172.16.1.31 -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/"
(2)模塊參數(shù)
src #指定需要解壓的壓縮包路徑
dest #指定解壓到哪兒
remote_src:
yes #指定壓縮包在遠(yuǎn)程主機(jī)上
14悯蝉、archive模塊
用于打包文件到遠(yuǎn)程主機(jī)归形,或在遠(yuǎn)程主機(jī)上進(jìn)行打包文件
(1)示例
[root@m01 ~ 19:16:13]# ansible 172.16.1.31 -m archive -a "path=/var/log/message dest=/tmp/log.tar.gz format=gz force_archive=true"
(2)模塊參數(shù)
force_archive:
yes #強(qiáng)制進(jìn)行壓縮存檔
format: #指定壓縮格式,默認(rèn)gz
bz2
gz
tar
xz
zip
path #需要壓縮的文件
dest #壓縮包名
remove: #壓縮存檔后鼻由,刪除壓縮源文件
no
yes
15暇榴、fetch模塊
用于從遠(yuǎn)程主機(jī)上面拉取文件,拉取下來的內(nèi)容會(huì)保留目錄結(jié)構(gòu)嗡靡,一般情況用在收集遠(yuǎn)程主機(jī)的日志文件等
(1)示例
[root@m01 ~ 20:00:59]# ansible web -m fetch -a "src=/tmp/2.txt dest=/tmp"
(2)模塊參數(shù)
src #指定拉取的文件路徑
dest #拉取到本地哪兒
#默認(rèn)會(huì)已管理節(jié)點(diǎn)地址創(chuàng)建一個(gè)目錄跺撼,并存放在內(nèi)
16、setup模塊
獲取遠(yuǎn)程主機(jī)信息
(1)示例
[root@m01 ~ 20:04:16]# ansible web -m setup