ansible部署
ansible的特性:基于Python語(yǔ)言實(shí)現(xiàn),由paramiko,PyYAML和jinjia2三個(gè)關(guān)鍵模塊 部署簡(jiǎn)單,agentless
?默認(rèn)使用ssh協(xié)議
?? ??? ?(1) 基于秘鑰認(rèn)證方式
?? ??? ?(2)在inventory文件中配置賬號(hào)密碼
主從模式:
?? ??? ?master:ansible,ssh client
?? ??? ?slave:ssh server
支持自定義模塊:支持各種編程語(yǔ)言
支持Playbook
基于“模塊”完成各種“任務(wù)”
首先,安裝ansible,在管理端和被管理端配置秘鑰信息;
/etc/ansible/hosts文件下,配置被管理端的組信息。
yum list all *ansible* yum info ansible yum install ansible -y rpm -ql ansible安裝依賴于epel源
配置文件:/etc/ansible/ansible.cfg
invertory:/etc/ansible/hosts
ls /etc/ansible? ?
ansible.cfg hosts roles
ansible.cfg 是 Ansible 工具的配置文件;
hosts 用來(lái)配置被管理的機(jī)器;
roles 是一個(gè)目錄,playbook 將使用它
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、Ansible 管理機(jī)與被管理機(jī)做秘鑰認(rèn)證
ssh-keygen??????? # 生成秘鑰
ssh-copy-id -i /root/.ssh/id_rsa.pub "-p 22 root@ip地址"???? # 將公鑰寫入被管理機(jī)
ssh root@ip地址 'ntpdate 另一個(gè)ip地址'? ??? ??? ??? ?#同步時(shí)間和另一個(gè)服務(wù)器時(shí)間相同。
2、hosts 文件添加被管理機(jī)
vim /etc/ansible/hosts
如何查看模塊幫助;
man ansible-doc ansible-doc -l 查看ansible支持的所有的模塊。 ansible-doc -s MODULE_NAME 查看某些模塊如何使用的。 ansible-doc -s yum 查看yum如何使用 ansible-doc -s commandansible命令應(yīng)用基礎(chǔ):
語(yǔ)法:ansible <host-pattern> [-f forks] [-m module_name] [-a args]
host-pattern:對(duì)哪些主機(jī)生效。
-f forks:一批處理多少主機(jī),啟動(dòng)的并發(fā)線程數(shù)。
-m module_name:要使用的模塊。
-a args:模塊特有的參數(shù)。
一.常見(jiàn)模塊:
ansible-doc -s MODULE_NAME
1) command:命令模塊,默認(rèn)模塊,用于遠(yuǎn)程執(zhí)行命令
ansible all -a 'data'
ansible 192.168.133.2 -m command -a 'data'?? ?#出現(xiàn)success表示成功。
192.168.12.129 | SUCCESS |rc=0 >>
TUE JUN 23 16:56:41 CST 2018
ansible webservers -m command -a 'data'
ansible all -m command -a 'data'
ansible 192.168.133.2 -m command -a 'tail -2 /etc/passwd'
2)cron模塊
cron:
?? ?state:
?? ??? ?present:安裝
?? ??? ?absent:移除
ansible-doc -s cron:查看如何使用參數(shù),該參數(shù)-a后面添加(minute,job,name皆為參數(shù)的內(nèi)容。)
比如在webservers集群中寫個(gè)定時(shí)計(jì)劃任務(wù):每隔10分鐘輸出hello
ansible webservers -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'?? ??? ?
ansible webservers -a 'crontab -l'? 查看同步任務(wù)列表
ansible webservers -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'
移除同步任務(wù)。默認(rèn)沒(méi)有state是安裝。
3)user用戶模塊
name=:指明創(chuàng)建用戶的名字。
ansible-doc -s user
ansible all -m user -a 'name="user"'
ansible all -m user -a 'name="user" state=absent'
4)group模塊
ansible-doc -s group
ansible webservers -m group -a 'name=mysql gid=306 system=yes'
ansible webservers -m user -a 'name=mysql uid=306 system=yes group=mysql'
5)copy文件模塊
src=:定義本地源文件路徑
dest=:定義遠(yuǎn)程目標(biāo)文件路徑
content:取代src=,表示直接用此處生成的信息生成為目標(biāo)文件的內(nèi)容。
ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible ower=root mode=640'
ansible all -m copy -a 'connect="Hello Ansible\nHi Mageedu" dest=/tmp/test.ansible'? \n是轉(zhuǎn)譯。
6)file:設(shè)定文件屬性
path=:指定文件路徑,可以使用name或dest來(lái)替換
創(chuàng)建文件符號(hào)鏈接:
?? ?src=:指明源文件
?? ?path=:指明符號(hào)鏈接文件路徑
7)ping:測(cè)試主機(jī)是否能連接。
ansible -a 'ping'
8)service:指定運(yùn)行狀態(tài)
enabled=:是否開(kāi)機(jī)自動(dòng)啟動(dòng),取值為true或者false
name=:服務(wù)名稱
state=:狀態(tài),取值為started,stopped,restarted
9)shell:在遠(yuǎn)程主機(jī)上運(yùn)行命令
尤其是用到管道等功能的復(fù)雜命令時(shí)候。
ansible all -m user -a 'name=user1'
ansible all -m command -a 'echo passwd |passwd --stdin user1'
在遠(yuǎn)程主機(jī)上查看發(fā)現(xiàn)密碼沒(méi)改變,是因?yàn)樗J(rèn)可能認(rèn)為是本機(jī)的命令
ansible all -m shell -a 'echo passwd |passwd --stdin user1'
10)script:本地腳本命令復(fù)制到遠(yuǎn)程并且運(yùn)行之。該shell腳本只支持相對(duì)路徑
11)yum:安裝程序包
name=:指明要安裝的程序包,可以帶上版本號(hào)
state=:present,lastest表示安裝,absent表示卸載
ansible all -m yum -a 'name=zsh'
ansible all -m yum -a 'name=zsh state=absent'
12)setup:收集遠(yuǎn)程主機(jī)的facts
每個(gè)被管理的節(jié)點(diǎn)在接受并運(yùn)行管理命令之前,會(huì)將自己的主機(jī)相關(guān)信息,如操作系統(tǒng),ip地址等報(bào)告給遠(yuǎn)程的ansible主機(jī)。
ansible 192.168.133.4 -m setup?? ?
nginx配置文件中有個(gè)work_processes=物理核心數(shù)(processor_core * processor_count)-1或者-2
13)get_url 模塊(實(shí)現(xiàn)在遠(yuǎn)程主機(jī)下載指定 URL 到本地,支持 sha256sum 文件校驗(yàn))
ansible Client -m get_utl -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
14) stat 模塊(獲取遠(yuǎn)程文件狀態(tài)信息,atime/ctime/mtime/md5/uid/gid 等信息)
ansible Client -m stat -a "path=/etc/syctl.conf"
15) mount 模塊(遠(yuǎn)程主機(jī)分區(qū)掛載)
ansible Client -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"
綜合
ansible-doc -s 模塊名
command
?? ?-a 'COMMAND'
user
?? ?-a 'name= state={present|absent}' system= uid= '
group
?? ?-a 'name= gid= state= system='
cron
?? ?-a 'name= minute= hour= day= mounth= weekday= job= user= state='
copy
?? ?-a 'dest= src= mode= owner= group= '
file
?? ?-a 'path= mode= owner= group= state={directory|link|present|absent} src='
ping
?? ?無(wú)參數(shù)
yum
?? ?-a 'name= state={present|lastest|absent}'
service
?? ?-a 'name- state={started|stopped|restarted} enabled='
shell
?? ?-a 'COMMAND'
script
?? ?-a '/path/to/script'
setup
轉(zhuǎn)載于:https://www.cnblogs.com/fengzhongzhuzu/p/9129732.html
總結(jié)
- 上一篇: 7、Node.js EventEmitt
- 下一篇: 多线程利器-队列(queue)