ansible安装部署
1.配置阿里云的eple源
我们使用yum命令安装ansible,需要阿里云的eple源
阿里云eple源下载地址
也可以通过下面命令获取
epel(RHEL 8) centos8版本按照如下配置
1)安装 epel 配置包
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
2)将 repo 配置中的地址替换为阿里云镜像站地址
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
epel(RHEL 7) centos7版本按照如下配置
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
清理yum源缓存并加载元数据
yum clean all
yum makecache
时间可能有点长,耐心等等…
安装ansible
yum install -y ansible
ansible配置
配置ssh免密登录
首先要知道ansible是依靠其自带ssh模块远程控制被监控主机的,配置ssh免密是必需的!
- 首先在你的控制端上生成密钥,按照如下操作
ssh-keygen
ssh-copy-id 被监控端主机IP地址
如:ssh-copy-id 192.168.111.111
- ansible主配置文件
yum安装过的ansible配置文件就在/etc/ansible下
我们需要编辑配置文件,关闭指纹验证。什么叫指纹验证?就是两个主机间第一次远程连接时会出现一长段,需要你输入yes or no,如果不开启忽略指纹验证,两主机第一次互信,即使配置了ssh免密钥登录,使用ansible时依旧失败。
vim /etc/ansible/ansible.cfg
被监控主机清单的定义
vim /etc/ansible/hosts
格式如下:
[ ]框内可自定义名称,根据你的业务需求整个组取名字,方便后续批量操作
ps:如果写的是主机名,要求本机或者dns服务器能解析
ps2:主机【组】名称,尽量不使用符号起名
[webserver]
192.168.0.0
192.168.1.1
......
[testserver]
test-1
......
如果你不希望写在官方定义的配置文件下,你也可以选择自定义文件
命令如下:
ansible test -m yum -a "name=httpd state=present" -i /ansible/host
ansible常用模块使用
写在前面
ansible的使用其实并不难,模块多,参数多是他的特点,因为篇幅限制,在这里是很难将所有模块以及他们的参数全都罗列出来的。所以在这里告诉大家一条万能命令ansible-doc,可以让大家很快熟悉ansible模块及参数
ansible-doc -l 查看所有模块
ansible-doc -l
ansible-doc 模块名 :查看指定模块
ansible-doc file
file可以换成你想查看的所有模块,doc进去后,使用“ /EXAMPLE ” 匹配到ansible官方给你的例子,里面讲的很清楚,这个模块怎么用,需要什么参数。以file模块举例
ansible-doc -s -模块名:查看指定模块的参数
ansible-doc -s file
以file模块为例,可以查看到file模块的参数,但是大家也可以看到参数后面的解析一大堆,很难沉下心去看,所以建议使用上述第二条命令查看具体使用方法更好
常用模块详解:
- setup:查看远程主机的一些基本信息
ansible test -m setup
- ping: 用于测试远程主机的运行状态
ansible test -m ping
- file:设置文件属性,使用该模块可以对文件进行增删查改:
创建文件(state=touch)、目录(state=directory)
ansible test -m file -a "path=/data/test.txt state=touch"
ansible test -m file -a "path=/data/test state=directory"
定义文件/目录的属组,权限,属主,路径
当你要设置属组与属主时,一定要注意是否有相应的组、主,否则定义失败
ansible test -m file -a "path=/root owner=root group=root mode=1777"
递归(rescurse=yes)设置目录的属性
ansible test -m file -a "path=/data/dir state=directory recurse=yes owner=root group=root"
创建(state=link)、删除(state=absent) 软连接
ansible test -m file -a "src=/etc/resolve.conf dest=/tmp/resolv.conf state=link"
ansible test -m file -a "path=/tmp/resolv.conf state=absent"
- copy:复制文件到远程主机
参数选项如下:
backup: 在覆盖之前,将源文件备份,(yes/no)
src:被复制的本地文件路径,如果是目录,则将递归复制
dest:将控制端源文件复制到远程主机的绝对路径,若源文件是目录,那么路径也必须是目录且必须存在
force:如果目标主机包含该文件,但内容不同,(=yes)将强制覆盖,(=no)则当目标主机目标位置不存在时才复制,默认为yes
实例:
ansible test -m copy -a "src=/root/copy.txt dest=/tmp/copy.txt"
-
command:在远程主机上执行命令
相关选项:
creates:创建文件,当文件名存在时,则不执行该指令
removes:删除文件,当文件名不存在时,则不执行该指令
chdir:在执行指令之前,先切换到该目录
executeable:切换shell来执行该指令,执行路径必须是绝对路径 -
shell:切换到某个shell执行指定的指令,参数与command相同,shell权限很高,但本人不太建议过多使用,使用时,通常会有warning提示你有更好的模块去使用。
ps:与conmmand不同的是,command不支持管道符“|” ,shell模块支持。 -
group、user模块:系统用户组管理,系统用户管理,需要注意的是,可以使用hash加密明文密码
-
service/systemd:系统服务管理模块,启动关闭服务等操作
注意:此处state状态必须是过去式,started,restarted,stopped,reloaded
实例:开启apache服务
ansible test -m service -a "name=httpd state=started "
设置开机自启
ansible test -m systemd -a "name=httpd enabled=yes"
- yum: 软件包安装管理
state=latest(最新)/present(当前)/absent(卸载)
name=需要安装的包名
实例:
yum安装httpd服务
ansible test -m yum -a "name=httpd state=latest"
- unarchive: 解压模块,他要求远程被监控主机必须有解压工具,比如unzip,tar…
copy=yes/no是否在本机寻找压缩文件
简单解释一下这个参数,如果copy=yes,解压的文件直接从控制端寻找,不要求被监控端有这个压缩文件,copy=no,则要求被监控端必须存在该压缩文件,否则该命令执行失败 - cron:计划任务管理
实例
使用ansible添加一条定时任务
ps:name选项的作用是注释定时任务,防止任务重复
ansible test -m cron -a "name='cron01' job=/bin/sh /test/job.sh"
查看定时任务列表,检查是否添加
crontab -l
- mount:挂载模块
state=
1) present(开机挂载,仅写入/etx/fstab,需要重启才能挂载,慎用,否则有可能出现开机失败)
2) mounted(挂载,并将配置写入/etc/fstab)
3)unmounted(卸载,但不清理/etc/fstab)
4)absent(卸载,并清理/etc/fstab写入的配置)
实例:nfs文件系统挂载
ansible test -m mount -a "src=192.168.x.x:/data/mount path=/data/mount fstype=nfs opts=default state=present/mounted"
nfs文件系统卸载
ansible test -m mount -a "src=192.168.x.x:/data/mount path=/data/mount fstype=nfs opts=default state=unmounted/absent"
- firewalld/selinux:防火墙管理模块
总结
ansible有很多模块,涉及到的方向也很多,我们也没必要了解所有模块,只需要根据实际的业务场景了解相应的模块即可,而且ansible对用户使用十分贴心,分门别类的很清楚,还想了解更多可以参考官方手册,找到答案
官方模块索引参考