什么是ansible?
这是一个python语言编写的一个自动化运维工具,有些人也许会问,这东西有什么用?我们如果模拟生产环境,每次最多也就操作七八台机器,但是在真正的生产环境中我们可能会管理几百台几千台机器,这时候我们再去一台一台的做什么操作未免显得很傻,而ansible就帮我们去管理这些机器,在我看来,这个东西特别别好用,因为它是基于ssh协议的,这也就意味着我们可以远程操作机器就能用ansible去管理这些机器。
模块化工具
这是一个模块化的工具,什么是模块化呢?又有什么用呢?在我看来模块化就相当于是把一个功能用模块封装起来,不同模块实现不同的功能,这将会使这个工具有无限多的功能,只要有需求,就会有人网上增加模块,也就意味着功能越来越多,最重要的这东西是开源的,我们可以在github上找到这个工具:一直在变大的ansible。
ansible的安装
我们可以通过在github上下载那个压缩包,解压缩后用目录中的steup.py这个python脚本去编译安装ansible,当然这个涵盖的模块非常多,在这里就不再演示,我们还可以通过epel源直接yum安装。首先配置好yum源,这里用的是清华大学的 镜像。
[root@localhost ~]# vim /etc/yum.repos.d/tsinghua.repo
[epel]
name=Fedora EPEL
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
gpgcheck=0
[root@localhost ~]# yum -y install ansible
模拟环境演示
安装完成后来模拟部署一下环境
ansible主机(centos7) | 172.18.254.123 |
host1(centos7) | 172.18.254.220 |
host2(centos7) | 172.18.254.221 |
host3(centos6) | 172.18.254.120 |
因为ansiblle的模块及功能太多,在这里就不再一一做例,只演示其中几个模块的用法,如果想要了解诶别的模块用法,可用命令自行查看
上面便说了,这是基于ssh协议的一个工具,所以我们要先配置ssh的等效性
在ansible主机上
[root@localhost ~]# ssh 172.18.254.220 #先以ssh连接其中一台远程主机,生成.shh目录
[root@localhost ~]# cd .ssh/
[root@localhost ~]# ssh-keygen #可以一直Enter下去,生产中建议设置密码
[root@localhost .ssh]# ssh-copy-id -i id_rsa.pub root@172.18.254.123
#先将公钥拷给自己
[root@localhost .ssh]# scp -rp /root/.ssh/ root@172.18.254.220:/root/
[root@localhost .ssh]# scp -rp /root/.ssh/ root@172.18.254.221:/root/
[root@localhost .ssh]# scp -rp /root/.ssh/ root@172.18.254.120:/root/
#直接将.ssh目录拷给其他三台机器
如果这样使用ansible的话仍然会报错,为什么呢?
这是因为我们ssh连接的时候会询问yes,所以我们要将次询问取消了
在其他三台远程主机上
[root@localhost ~]# vim /etc/ssh/ssh_config
StrictHostKeyChecking no
这时我们即可在ansible主机上填写机器ip去管理他们了
[root@localhost ~]# vim /etc/ansible/hosts
[nodeA]
172.18.254.220
[nodeB]
172.18.254.221
[nodeC]
172.18.254.120
[node:children]
nodeA
nodeB
nodeC
这里的中括号中的是什么意思呢?这可以算是一个清单,一个清单下可以写多个一个网段或者是具有某个相同功能的IP地址,
而最后一个的是总清单。下面来测试一下
[root@localhost ~]# ansible nodeA -m ping
172.18.254.220 | SUCCESS => {
"changed": false,
"ping": "pong"
}
我这里看不到颜色,正常来说,颜色应该是绿色的字体
[root@localhost ~]# ansible all -m ping
172.18.254.220 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.18.254.120 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.18.254.221 | SUCCESS => {
"changed": false,
"ping": "pong"
}
all是测试所有的,可以看到都成功了。
模块测试
上面的ping就是ansible的一个模块,上面就提到有特别多的模块,ansible-doc -l 可以列出各个模块
ansible-doc -s ping 可以了解某个模块更详细的用法
来说一下fetch模块
将控制的某台主机的文件拿到本地的某个目录下 -m表示调用某个模块
[root@localhost ~]# ansible nodeA -m fetch -a "src=/etc/fstab dest=/app"
src表示远程主机的文件路径,dest表示本地目录,当让这些路径都要存在,不然会报错
copy模块
copy模块
将ansible主机上的文件拷到远程主机上
参数:
src 指定需要拷贝的文件或目录
dest 指定拷到远程主机的哪个目录 (必须参数)
content 不使用src拷贝的时候可以用此选项指定文件内容,和src两个选项必须有一个
force 远程主机目标路径存在同名文件时,并且内容不同时,是否强制覆盖,可选yes或no
bakup 远程主机目标路径存在同名文件,并且内容不同时,是否对远程主机文件
进行拷贝,可选yes或no
ower 指定文件拷到远程主机的属主,远程主机必须有对应用户
group ...数组...
mode 指定文件拷到远程主机后的权限
[root@localhost ~]# ansible nodeA -m copy -a "src=/etc/fstab dest=/app"
在第一台主机上查看
[root@localhost ~]# cd /app/
[root@localhost app]# ls
fstab
上面的选项都跟这个用法是差不多的,不再一一说明。
因为模块太多了,这样说根本是说不完的,等我总结总结再慢慢更新ansible模块吧