Ansible自动化部署工具简介

文章介绍了Ansible这个自动化部署工具的配置文件、常用命令、执行原理以及如何通过主机清单进行管理。它通过SSH实现功能,并支持密钥认证。Ansible使用包括command、shell、script、copy、fetch、file、hostname、cron在内的多个模块来执行不同任务。此外,文章还提到了Ansible的playbook和roles概念,以及它们在自动化运维中的重要性。
摘要由CSDN通过智能技术生成

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到受控主机上。

image-20230403163905936

ansible 192.168.30.101.192.168.30.102 -m yum ‘name=/root/vsftpd-3.0.2-22e17.x86 64.rpm’

image-20230404150631350
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删除用户
image-20230404104453567
  • yum卸载软件
image-20230404104609294
  • 查看某个服务
image-20230404104953741
  • 列出文件
image-20230404105029759
  • 查看用户账号
image-20230404105058922
  • 删除用户
image-20230404105403739
  • 查看rpm安装包的配置文件
image-20230404112431199
  • 查看受控机环境属性
image-20230404112757837

用户工作流程

ansible管理受控机器工作流程。

image-20230403172939602

playbook核心元素

Hosts 执行的远程主机列表

  • Tasks 任务集

  • Varniables 内置变量或自定义变量在playbook中调用Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件Handlers 和notity结合使用,由特定条件触发的操作,满条件方才执行,否则不执行

  • tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

    ansible-playbook -t tagsname useradd.yml

  • 变量优先级:命令行>playbook>主机>分组变量

image-20230404150753352 image-20230404150822507 image-20230404150941295 image-20230404151002573
  • handlers和notify结合使用触发条件
image-20230404151024686 image-20230404151036704 image-20230404151053100
  • Playbook中变量使用
image-20230404151112596 image-20230404151202171 image-20230404151229892
  • 使用变量文件
image-20230404151254441
  • Playbook中tags使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfiIFdXD-1680594607475)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20230404151137712.png)]

模板templates

jinjia2语法说明
image-20230404151323756
when:满足条件执行
image-20230404151357596
with_items:迭代:
image-20230404151423134 image-20230404151441972
  • 示例 :迭代嵌套子变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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角色

image-20230404153346313
  • role目录编排方式
image-20230404102500464
  • role目录结构
image-20230404102334872
  • role各个目录作用
image-20230404102630321
  • 目录示例
image-20230404104209708 image-20230404104232096 image-20230404104112581
  • 完整的role架构
image-20230404113055379
  • role中playbook tags使用
image-20230404113114820

参考资料

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使用
image-20230404113114820

参考资料

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值