Ansible自动化部署工具简介
ansible 配置文件
Ansible 配置文件/etc/ansible/ansible.cfg ( 一般保持默认 )
[defaults]
#inventory= /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local tmp= $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks # 默认并发数
#sudo user= root # 默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass= True
#remote_port = 22
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
#log_path=/var/log/ansible.log #日志文件
ansible系列命令
ansible
ansible-doc
ansible-playbook
ansible-vault
ansible-console
ansible-galaxy
ansible-pull
ansible-doc显示模块帮助
ansible-doc [options] [module…
-a 显示所有模块的文档
-l, --list列出可用模块
-s,–snippet显示指定模块的playbook片段
示例
ansible-doc - 列出所有模块
ansible-doc ping 查看指定模块帮助用法
ansible-doc -s ping 查看指定模块帮助用法
ansible执行原理
ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
ansible [-m module name] [-a argsl
–version 显示版本
-m module 指定模块,默认为command
-v 详细过程 -vv -vVV更详细
–list-hosts 显示主机列表,可简写-list
-k,–ask-pass提示输入ssh连接密码,默认Key验证
-K,–ask-become-pass 提示输入sudo时的口令
-C,–check 检查,并不执行
-T,–timeout=TIMEOUT 执行命令的超时时间,默认10s
-u,–user=REMOTE_USER 执行远程执行的用户
-b,–become 代替旧版的sudo 切换
ansible主机清单
ansible的Host-pattern 匹配主机的列表。
All : 表示所有Inventory中的所有主机
ansible all -m ping
通配符
ansible "" -m ping
ansible 192.168.1. -m ping
ansible “*srVs”-m ping
或关系
ansible “websrvs:appsrvs” -m ping
ansible “192.168.1.10:192.168.1.20”-m ping
逻辑与
ansible “websrvs:&dbsrvs” -m ping
在websrvs组并目在dbsrvs组中的主机
逻辑非
ansible ‘websrvs:!dbsrvs’ -m ping
在websrvs组,但不在dbsrvs组中的主机
注意: 此处为单引号
综合逻辑
-m pingansible websrvs:dbsrvs;&appsrvs:!ftpsrvs’ -m ping
正则表达式
ansible “websrvs:&dbsrvs” -m ping
ansible “~(webldb).*.magedu.com"-m ping
ansible命令执行过程
ansible命令执行过程
1.加载自己的配置文件 默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如command
3.通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器的对应执行用户SHOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4.给文件+x执行
5.执行并返回结果
6.删除临时py文件,sleep o退出
执行状态
绿色: 执行成功并且不需要做改变的操作
黄色: 执行成功并且对目标主机做变更
红色 : 执行失败
ansible常用模块
command:远程主机执行
在远程主机执行命令,默认模块,可忽略-m选
ansible srvs -m command -a ‘service vsftpd start’ 不成功
ansible srvs -m command -a ‘echo magedu lpasswd --stdin wang’
此命令不支持 SVARNAME < >;& 等,用shell模块实现
shell:执行shell命令
和command相似,用shell执行命令
ansible srv -m shell -a 'echo magedu lpasswd -stdin wang
调用bash执行命令类似 cat /tmp/stanley.mdlawk -Fprint S1,S2y & >/tmp/example.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器
script:运行脚本
-a"/PATH/TO/SCRIPT FILE“
snsible websrvs -m script -a f1.sh
copy:复制文件
从服务器复制文件到客户端
ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2sh owner=wang mode=600backup=yes”
如目标存在,默认覆盖,此处指定先备份
ansible srv -m copy-a“content=‘test content n’ dest=/tmp/f1.txt” 利用内容,直接生成目标文件
fetch:客户端取文件
从客户端取文件至服务器端,copy相反,目录可先tar。
ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts’
file:设置文件属性。
ansible srv -m file -a "path=/root/a.sh owner=wang mode=755
ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link’
hostname:管理主机名
ansible node1 -m hostname -a “name=websrv’
cron:计划任务
支持时间 : minute , hour , day , month , weekday
ansible srv -m cron -a “minute=*/5 job=‘/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’ name=Synctime” 创建任务
ansible srv -m cron -a 'state=absent name=Synctime’删除任务
ansible al1 -m cron -a ‘minute=* weekday=l,3,5 job=“/usr/bin/wal1 FBI warning” name=warningcron’
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGmTYgPH-1680594607474)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404150612855.png)]
yum:管理包
ansible srv -m yum -a ‘name=httpd state=latest’ 安装
ansible srv -m yum -a 'name=httpd state=absent’ 删除
ansible a11-m yum -a ‘name=memcached,httpd’
安装已经下载好的rpm包,需要先copy到受控主机上。
ansible 192.168.30.101.192.168.30.102 -m yum ‘name=/root/vsftpd-3.0.2-22e17.x86 64.rpm’
service : 管理服务
ansible srv -m service -a 'name=httpd state=stopped!
ansible srv -m service -a 'name=httpd state=started!
ansible srv -m service -a 'name=httpd state=reloaded!
ansible sry -m service -a 'name=httpd state=restarted
user: 管理用户
ansible sry -m user -a 'name=user1 comment="test user” uid=2048 home=/app/user1 group=root
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 ’
ansible srv -m user -a ‘name=user1 state=absent remove=yes’ 删除用户及家目录等数据
group : 管理组
ansible srv -m group -a "name=testgroup system=yes“
ansible srv -m group -a "name=testgroup state=absent’
ansible-galaxy:roles仓库
连接 https://galaxy.ansible.com 下载相应的roles列出所有已安装的galaxy
ansible-galaxy list
安装galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis
ansible-pull:推送
推送命令至远程,效率无限提升,对运维要求较高
ansible-playbook:执行剧本
ansible-playbook hello.yml
cat hello.yml
#hello world yml file
hosts: websrvs
remote user: root
tasks:
- name: hello world
command: /usr/bin/wall hello world
ansible-console:交互执行命令
2.0+新增,可交互执行命令,支持tab
root@test (2)[f:10] S
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]S
设置并发数 : forks n 例如 : forks 10
切换组 : cd 主机组 例如 : cd web
列出当前组主机列表 : listW
列出所有的内置命令 : ?或help
示例 :
root@all (2)[f:5]S listroot@all (2)[f:5]S cd appsrvs
root@appsrvs (2)[f:5]S list
root@appsrvs (2)[f:5]S yum name=httpd state=present
root@appsrvs (2)[f:5]S service name=httpd state=started
常用操作命令
- shell删除用户
- yum卸载软件
- 查看某个服务
- 列出文件
- 查看用户账号
- 删除用户
- 查看rpm安装包的配置文件
- 查看受控机环境属性
用户工作流程
ansible管理受控机器工作流程。
playbook核心元素
Hosts 执行的远程主机列表
-
Tasks 任务集
-
Varniables 内置变量或自定义变量在playbook中调用Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件Handlers 和notity结合使用,由特定条件触发的操作,满条件方才执行,否则不执行
-
tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断
ansible-playbook -t tagsname useradd.yml
-
变量优先级:命令行>playbook>主机>分组变量
- handlers和notify结合使用触发条件
- Playbook中变量使用
- 使用变量文件
- Playbook中tags使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfiIFdXD-1680594607475)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404151137712.png)]
模板templates
jinjia2语法说明
when:满足条件执行
with_items:迭代:
- 示例 :迭代嵌套子变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6LKMpem-1680594607476)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404151505320.png)]
for循环
- playbook定义变量,j2模板使用变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ql16CQdm-1680594607476)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404094354399.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fKEravjS-1680594607477)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404094503654.png)]
if条件
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9fSgiL07-1680594607477)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404153302430.png)]
roles角色
- role目录编排方式
- role目录结构
- role各个目录作用
- 目录示例
- 完整的role架构
- role中playbook tags使用
参考资料
http://galaxy.ansible.com
https://galaxy.ansible.com/explore#
http://github.com/
http://ansible.com.cn/
https://github.com/ansible/ansible
79.png" alt=“image-20230404113055379” style=“zoom: 67%;” />
- role中playbook tags使用
参考资料
http://galaxy.ansible.com
https://galaxy.ansible.com/explore#
http://github.com/
http://ansible.com.cn/
https://github.com/ansible/ansible
https://github.com/ansible/ansible-examples