一、部署
Ansible官方网站:
1、安装ansible
关闭selinux;
使用yum直接安装:yum -y install ansible
2、部署ansible
有三个主要的文件需要关注:
ansible.cfg:ansible的配置文件
hosts文件:写入需要管理的主机的IP地址。
roles:角色目录
需提前确认管理主机已将SSH秘钥分发到被管理主机,否则无法登录被管理主机。
被管理主机不需要安装任何软件
3、测试管理主机
ansible没有守护进程,直接使用ansible命令来执行管理命令。
执行简单的测试来验证一下效果:获取所有被管理的主机的主机名
二、架构组成
- Inventory 主机清单
- Module 常用模块:
- 模块的应用语法格式:ansible [主机地址/主机名/主机组名/所有主机(all)] -m [模块名称] -a [执行动作] 参数之间要有空格
各个模块的使用需要参考官网的详细说明文档
1.COMMAND模块:
举例:ansible 192.168.80.128 -m command -a hostname
command模块的参数:command模块参数
chdir参数示例:ansible 192.168.80.128 -m command -a “chdir=/tmp/ touch test.txt”
其他常用参数还有:creates removes
2.SHELL模块
又叫万能模块,可以执行相当于在本地shell执行的所有命令。比command模块更强大。
3.script模块
可以将本地的脚本在远程主机上执行。(不需要将脚本拷贝至远程主机)
4.copy模块
批量数据分发
ansible [xxx.xxx.xxxx.xxx] -m copy -a “src=[需要分发的数据] dest=[保持目录]”
还有常用参数:owner :Name of the user that should own the file/directory, as would be fed to chown. 传输时修改属主
group :Name of the group that should own the file/directory, as would be fed to chown. 传输时修改属组
mode:The permissions of the destination file or directory. 修改权限
backup:在传输之前把文件做备份。=YES/NO
5.File模块
修改文件属性信息。
ansible [xxx.xxx.xxxx.xxx] -m file -a “dest=[目标文件/目录/链接] owner= group= mod=”
6.yum模块
ansible [xxx.xxx.xxxx.xxx] -m yum -a “name=wget state=installed”
installed:安装软件
absent:卸载软件
7.service模块
管理服务的运行:启动、停止、重启
ansible [xxx.xxx.xxxx.xxx] -m yum -a “name=sshd state=started enabled=yes”
name=服务名
state= started restarted stopped
enbled=是否开机自启
8.cron模块
批量设置定时任务
minute
hour
day
month
weekday
ansible [xxx.xxx.xxxx.xxx] -m cron -a “name=‘任务注释信息’ minute=0 hour=2 job=‘XXXX’”
每天2点执行
day/month/weekday不写则默认表示*。
job表示要执行的任务,用单引号包围。可选择性添加name注释
删除指定定时任务:
ansible [xxx.xxx.xxxx.xxx] -m cron -a “name=‘任务注释信息’ state=absent”
ansible只能删除ansible自己设置的任务,手动创建的任务无法删除。
9.mount模块
例子:
使用present参数:不会立即进行挂载,而是修改了/etc/fstab文件,开机才能挂载。
使用mounted参数:立即进行挂载,且修改/etc/fstab文件,开机自动挂载。
使用absent参数: 立即卸载,并删除/etc/fstab文件自动挂载
使用umounted参数: 立即卸载,但是不删除/etc/fstab文件自动挂载
更多模块使用方法可参考官网文档或者使用:
ansible-doc l 查看模块使用简介
ansible-doc -s shell 查看模块使用详细说明
10.user模块
批量管理用户
如果是创建用户密码,则需要通过密码生成密文,其中一种方法如下:msg后面的就是密文
再执行设置密码命令:
密文用单引号包围,否则会发生正则解析错误。
- Playbooks 剧本
编写规范:pyyaml
1.合理的缩进。且不能用Tab键缩进,用空格缩进。
2.冒号的用法。
hosts:
tasks:
冒号后面要有一个空格,但以冒号结尾或冒号出现在注释中时,可以不加空格。
3.短横线的用法。
短横线构成列表信息,后面需要有一个空格。
首先创建一个目录存放剧本文件,便于管理:/etc/ansible/ansible-playbook,剧本的扩展名为:yaml
例如编写剧本rsync_server.yaml
编写格式:
-name是注释信息编写完成后,检查语法格式,看是否有报错:
再执行一下“彩排”:-C参数不会正真修改远程主机。
如果没问题,再正真执行剧本:
以部署rsync服务服务端为例:
编写剧本:
如何配置主机清单:/etc/ansible/hosts
1、分组配置:vi /etc/ansible/hosts 执行时可用组名替代IP地址
2、使用匹配方式:使用主机名时需要有域名解析
或者这样不需要主机名解析也可以。
3、跟上端口号:如果被管理机远程端口变成25000,则可以在配置中修改。
4、跟上变量:这种方式可以不需要配置分发公钥就可连接远程主机。
5、IP地址前加上主机名:命令输出信息便于查看
6、组合并:合并后的组名需要加上一个特定字段children
7、变量引用:
剧本中可以使用主机清单的组对相同操作进行合并。
更多详细配置参考官网
剧本的扩展应用:
1.变量:可以在剧本中直接定义或者在命令行指定变量的值。
2、注册信息:例如如何验证服务端口是否启动
3、条件判断:
由于远程主机可能系统版本、架构、主机名等等各不相同,在执行命令时需要根据具体信息具体执行。这是就需要根据远程主机的信息进行判断,用setup模块可获取主机信息:
常用参数有很多,不一一举例:
以ansible_hostname为例:在条件中判断主机名为web01时,执行安装rsync操作:
4、触发信息:
5、剧本整合:
6、角色的功能
作用:让剧本编写更加规范。
在/etc/ansible/roles目录下创建角色目录,例如/etc/ansible/roles/rsync/,再在这个角色目录下创建几个固定的子目录:
files:保存需要分发的文件;
handles:保存触发器配置文件;
tasks:保存要执行的动作文件
templates:保存需要分发的模板文件;
vars:保存变量配置文件如何使用:
1、先写tasks文件:
该文件的内容即rsync_serive.yaml中tasks部分:注意缩进
2.编写变量配置文件:也是固定的文件名
文件内容就是变量定义,有多少变量写多少变量
3.将需要分发的配置文件保存在file目录中
那么tasks中的main.yaml文件就可修改一下:
4.编写目录handlers中的文件:
还是有个固定名称的文件:main.yaml
直接将红色部分复制到main.yaml文件中(service:前面多了个-,去掉)
5.在roles目录下创建一个剧本文件:rsync.yaml 名称可自定义
内容很简单:
再执行roles目录下的这个剧本:ansible-playbook rsync.yamltemplate目录作用:(可选)
可以将配置文件用包含变量的方式写成模板,将变量写在vars目录里,在tasks中调用配置文件时使用template模块去推送配置文件。