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 安装 rpm ansible yum安装_运维

ansible配置

配置ssh免密登录

首先要知道ansible是依靠其自带ssh模块远程控制被监控主机的,配置ssh免密是必需的!

  1. 首先在你的控制端上生成密钥,按照如下操作
ssh-keygen
ssh-copy-id 被监控端主机IP地址
如:ssh-copy-id 192.168.111.111
  1. ansible主配置文件
    yum安装过的ansible配置文件就在/etc/ansible下
    我们需要编辑配置文件,关闭指纹验证。什么叫指纹验证?就是两个主机间第一次远程连接时会出现一长段,需要你输入yes or no,如果不开启忽略指纹验证,两主机第一次互信,即使配置了ssh免密钥登录,使用ansible时依旧失败。
vim /etc/ansible/ansible.cfg

ansible 安装 rpm ansible yum安装_配置文件_02

被监控主机清单的定义
vim /etc/ansible/hosts

格式如下:
[ ]框内可自定义名称,根据你的业务需求整个组取名字,方便后续批量操作
ps:如果写的是主机名,要求本机或者dns服务器能解析
ps2:主机【组】名称,尽量不使用符号起名

[webserver]
192.168.0.0
192.168.1.1
......
[testserver]
test-1
......

如果你不希望写在官方定义的配置文件下,你也可以选择自定义文件

ansible 安装 rpm ansible yum安装_服务器_03


命令如下:

ansible test -m yum -a "name=httpd state=present" -i /ansible/host

ansible 安装 rpm ansible yum安装_运维_04

ansible常用模块使用

写在前面

ansible的使用其实并不难,模块多,参数多是他的特点,因为篇幅限制,在这里是很难将所有模块以及他们的参数全都罗列出来的。所以在这里告诉大家一条万能命令ansible-doc,可以让大家很快熟悉ansible模块及参数

ansible-doc -l 查看所有模块
ansible-doc -l

ansible 安装 rpm ansible yum安装_配置文件_05

ansible-doc 模块名 :查看指定模块
ansible-doc file

file可以换成你想查看的所有模块,doc进去后,使用“ /EXAMPLE ” 匹配到ansible官方给你的例子,里面讲的很清楚,这个模块怎么用,需要什么参数。以file模块举例

ansible 安装 rpm ansible yum安装_服务器_06

ansible-doc -s -模块名:查看指定模块的参数
ansible-doc -s file

以file模块为例,可以查看到file模块的参数,但是大家也可以看到参数后面的解析一大堆,很难沉下心去看,所以建议使用上述第二条命令查看具体使用方法更好

ansible 安装 rpm ansible yum安装_ansible_07

常用模块详解:

  1. setup:查看远程主机的一些基本信息
ansible test -m setup
  1. ping: 用于测试远程主机的运行状态
ansible test -m ping
  1. 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"
  1. copy:复制文件到远程主机
    参数选项如下:
    backup: 在覆盖之前,将源文件备份,(yes/no)
    src:被复制的本地文件路径,如果是目录,则将递归复制
    dest:将控制端源文件复制到远程主机的绝对路径,若源文件是目录,那么路径也必须是目录且必须存在
    force:如果目标主机包含该文件,但内容不同,(=yes)将强制覆盖,(=no)则当目标主机目标位置不存在时才复制,默认为yes
    实例:
ansible test -m copy -a "src=/root/copy.txt dest=/tmp/copy.txt"
  1. command:在远程主机上执行命令
    相关选项:
    creates:创建文件,当文件名存在时,则不执行该指令
    removes:删除文件,当文件名不存在时,则不执行该指令
    chdir:在执行指令之前,先切换到该目录
    executeable:切换shell来执行该指令,执行路径必须是绝对路径
  2. shell:切换到某个shell执行指定的指令,参数与command相同,shell权限很高,但本人不太建议过多使用,使用时,通常会有warning提示你有更好的模块去使用。
    ps:与conmmand不同的是,command不支持管道符“|” ,shell模块支持。
  3. group、user模块:系统用户组管理,系统用户管理,需要注意的是,可以使用hash加密明文密码
  4. 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"
  1. yum: 软件包安装管理
    state=latest(最新)/present(当前)/absent(卸载)
    name=需要安装的包名
    实例:
    yum安装httpd服务
ansible test -m yum -a "name=httpd state=latest"
  1. unarchive: 解压模块,他要求远程被监控主机必须有解压工具,比如unzip,tar…
    copy=yes/no是否在本机寻找压缩文件
    简单解释一下这个参数,如果copy=yes,解压的文件直接从控制端寻找,不要求被监控端有这个压缩文件,copy=no,则要求被监控端必须存在该压缩文件,否则该命令执行失败
  2. cron:计划任务管理
    实例
    使用ansible添加一条定时任务
    ps:name选项的作用是注释定时任务,防止任务重复
ansible test -m cron -a "name='cron01' job=/bin/sh /test/job.sh"

查看定时任务列表,检查是否添加

crontab -l
  1. 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"
  1. firewalld/selinux:防火墙管理模块

总结

ansible有很多模块,涉及到的方向也很多,我们也没必要了解所有模块,只需要根据实际的业务场景了解相应的模块即可,而且ansible对用户使用十分贴心,分门别类的很清楚,还想了解更多可以参考官方手册,找到答案
官方模块索引参考