1.ansible简介
ansible是一种基于python开发,可以批量系统配置、批量程序部署、批量运行命令的自动化运维工具
特点:
-
部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
-
默认使用SSH协议对设备进行管理;
-
有大量常规运维操作模块,可实现日常绝大部分操作;
-
配置简单、功能强大、扩展性强;
-
支持API及自定义模块,可通过Python轻松扩展;
-
通过Playbooks来定制强大的配置、状态管理;
-
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
ansible整体架构图
术语介绍
Ansible
:Ansible核心程序。
HostInventory
:记录由Ansible管理的主机信息,包括端口、密码、ip等。
Playbooks
:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules
:核心模块,主要操作是通过调用核心模块来完成管理任务。
CustomModules
:自定义模块,完成核心模块无法完成的功能,支持多种语言。 ConnectionPlugins
:连接插件,Ansible和Host通信使用,默认使用ssh通信
ansibel工作流程:
-
加载自己的配置文件,默认
/etc/ansible/ansible.cfg
; -
查找对应的主机配置文件,找到要执行的主机或者组;
-
加载自己对应的模块文件,如 command;
-
通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;
-
对应执行用户的家目录的
.ansible/tmp/XXX/XXX.PY
文件; -
给文件 +x 执行权限;
-
执行并返回结果;
-
删除临时py文件,
sleep 0
退出;
ansible任务执行模式
-
ad-hoc(基础用法)
用途:使用单个模块,支持批量执行单条命令,相当于bash中的一句话shell。
模式:点对点模式
用法:ansible <host-pattern> [-m module_name] [-a args]
常用的几个模块:
Command模块
- chdir # 在执行命令之前,先切换到该目录
-
executable # 切换shell来执行命令,需要使用命令的绝对路径
-
free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
-
creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
-
removes # 一个文件名,这个文件不存在,则该命令不执行
注意:command命令不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)
copy 模块
src
#被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"
content
#用于替换"src",可以直接指定文件的值
dest
#必选项,将源文件复制到的远程主机的绝对路径
backup
#当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息 directory_mode
#递归设定目录的权限,默认为系统默认权限
force
#当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
others
#所有的 file 模块中的选项可以在这里使用
还有fetch 模块、shell模块等等:https://www.cnblogs.com/keerya/p/7987886.html#_label4_1
2.playbook(进阶用法)
用途:playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。
模式:剧本模式
用法:ansible-playbook xxx.yml (通过yml语言编写"剧本")
yml格式:
1、文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。
2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
3、YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。
4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。
举例:vim mysql.yml
使用ansible-playbook运行playbook文件(ansible-playbook mysql.yml),得到如下输出信息,输出内容为JSON格式。 绿色代表执行成功,系统保持原样 黄色代表系统状态发生改变 红色代表执行失败,显示错误输出
执行有三个步骤:1、收集facts 2、执行tasks 3、报告结果
2.ansible应用
1.ansible环境搭建
-
两种安装ansible的方式:
-
pip install ansible
-
yum install -y ansible
cd /etc/ansible进入ansible的配置文件目录:
ansible.cfg:ansible的配置文件,默认配置了一些参数比如最大并发连接数,默认ssh连接端口还有执行命令的用户等等;
hosts:里面保存的是一些 ansible 需要连接管理的主机列表;
roles:层次性,结构化地组织playbook,更多用法请参考https://blog.csdn.net/sj349781478/article/details/104127029
配置主机清单:vim /etc/hosts
配置ssh公私钥实现免密登陆
主机连通性测试:
2.ansible应用-批量部署项目
安装docker:vim install_docker.yml
synchronize详细用法:https://blog.csdn.net/qq_28686911/article/details/117325826
Rsync详细用法:https://www.cnblogs.com/haw2106/p/9868753.html
debug模块:相当于python里的print语句 可以输出变量的内容或者随意的字符串
用法:https://blog.csdn.net/m0_46305762/article/details/107300078
3.总结
ansible是一款可以提高测试效率的自动化工具,支持管理linux和windows平台,安装简单、功能强大,想要学习更多有关ansible的内容可以参考以下链接:
ansible基础用法:https://www.cnblogs.com/keerya/p/7987886.html
Ansible playbook详解:https://www.cnblogs.com/keerya/p/7987886.html