自动化运维–Ansible的使用及介绍
Ansible的简单介绍
Ansible是一款由Python编写的 IT 自动化工具,他能够进行应用更新,自动部署,执行操作等一些在多台机器中进行自动化操作,而它又是一款轻量级,不需要在各个节点上安装客户端,并且执行力强的工作,安装简便,不需要安装客户端。
对于Ansible来说,他只是一个框架,而真正实现自动化操作的是Python提供的。
环境准备
在我们安装之前首先要在各个主机之间做好环境,实现各个主机互连互通,因为ansible是通过ssh进行执行自动化的命令,所以我们前期的准备工作必须要做到各个主机实现使用主机名解析。
免密登录:
#首先我们先将每个主机实现免密连接
[root@haha ~]# ssh-keygen #创建密钥
[root@haha ~]# for i in {22.23};
> do
> ssh-copy-id 192.168.4.$i
> done #这里我的IP地址是23和23,如果大家和我的不一样可以进行更改
这样我们就可以进行管理机免密登陆,但是我们还要实现管理主机进行主机名解析,利用主机名就可以登录到被管理机器了
主机名称解析:
#利用/etc/hosts这个文件实现主机名解析
[root@haha ~]# vim /etc/hosts
192.168.4.22 host1 #再这个文件中添加上需要解析的主机IP和主机名称
192.168.4.23 host2
就可以实现利用主机名免密登录了
下载安装
首先我们要转变ansible的安装包,可以去官网下载[Ansible](Ansible is Simple IT Automation)利用下载来的tar包进行解压,然后再将解压的rpm包进行yum安装
这里我就由我手中所拥有的tar包进行安装的示范
依赖包安装示范
[root@haha ansible.rjb]# tar xf ansible_soft.tar.gz
[root@haha ansible.rjb]# cd ansible_soft/
[root@haha ansible_soft]# ls
ansible-2.8.5-2.el8.noarch.rpm python3-paramiko-2.4.3-1.el8.noarch.rpm
libsodium-1.0.18-2.el8.x86_64.rpm python3-pynacl-1.3.0-5.el8.x86_64.rpm
python3-bcrypt-3.1.6-2.el8.1.x86_64.rpm sshpass-1.06-9.el8.x86_64.rpm
[root@haha ansible_soft]# yum install -y ./*
这样就将所需要的依赖包进行了安装,如果你的挂载的yum软件仓库里面包很充足的话,当然你也不用去提前安装这些依赖包,会在安装ansible时候自动解决依赖关系,接下来就可以安装ansible了,因为我所使用的是Centos7的Linux操作系统,所以我的tar包也是Centos7的
Ansible安装示范
[root@haha ~]# tar xf ansible_centos7.tar.gz
[root@haha ansible.rjb]# cd ansible_centos7/
[root@haha ansible_centos7]# ls
ansible-2.8.5-1.el7.ans.noarch.rpm python-paramiko-2.1.1-9.el7.noarch.rpm
python-jinja2-2.7.2-4.el7.noarch.rpm sshpass-1.06-2.el7.x86_64.rpm
[root@haha ansible_centos7]# yum install -y ./*
这样的话我们就完成了自动化工具ansible的安装,但是如果想要使用的话就需要为他进行环境的准备
#首先为ansible创建一个工作目录,以后的操作都会在这个工作目录中进行操作
[root@haha ~]# mkdir ansible
[root@haha ~]# cd ansible
[root@haha ansible]# vim ansible.cfg
#编辑内容为:
[defaults]
inventory = hosts
#再创建新的文件
[root@haha ansible]# vim hosts
#编辑内容为:
[No1] <---#你设置的组名
host1 <---#你添加的主机
[No2]
host2
[NO3:children]
No1
No2
这样就完成了ansible的环境准备了,就可以在准备好的环境,接下来我们进行测试,是否可以进行
[root@haha ansible]# ansible all -m ping
host1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
表达的意思是对各个主机实施ping命令,返回值为pong表示我们ping成功,这样就完成了Ansible管理的环境准备,接下来就可以对下面的主机执行自动化任务了。
Ansible-playbook的编写示范
环境搭建完毕,Ansible可以用之后我们就可以制定剧本,在剧本中写入我们想执行的任务,这样就可以使用剧本管理主机集群。
接下来给大家做一些示范:
yum模块
#首先我们想要编写剧本就需要进行再yaml/yml文件里里面进行编写,所以我们首先创建yaml文件
[root@haha ~]# cd ansible
[root@haha ansible]# vim ./yum.yaml
--- #<--固定格式
- hosts: all #<--表示所执行的主机
tasks: #<--表示任务
- yum: #<--表示执行的任务是yum
name: httpd #<--所需要yum下载的软件包名字是
~
在我们写playbook时所写完同一级时都需要再空两行,表示等级关系,如果不按正确格式编写执行时候就会报错。
#接下来我们执行这个剧本
[root@haha ansible]# ansible-playbook yum.yaml
PLAY [all] **************************************************************************
TASK [Gathering Facts] **************************************************************
ok: [host2]
ok: [host1]
TASK [yum] **************************************************************************
ok: [host2]
changed: [host1]
PLAY RECAP **************************************************************************
host1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
#failed没有显示个数,表示没有执行失败的主机表示我们的任务都执行完毕。
其他的模块也大同小异,主要的是格式,每个等级直接必须要空格,ansible的模块有很多,我们在使用的时候要搞清楚使用的对象是什么,对使用的模块有个了解就可以利用anisble-doc命令进行模块的查询,在查询内容里就会更详细的呈现给我们
模块帮助查询示例
[root@haha ansible]# ansible-doc -l | wc -l
2834
#我们这里利用user模块进行举例
[root@haha ansible]# ansible-doc user
#就会显示出内容,在显示的内容里查找EXAMPLES <-例子,就可以按照官方给的例子进行编写
#示例:
- name: Add the user 'johnd' with a specific uid and a primary group of 'admin'
user:
name: johnd
comment: John Doe
uid: 1040
group: admin
总的来说,ansible现在还是对于自动化运维方面很有效,编辑好用的工具之一,如果进行深入的学习,掌握了工具的使用,那么对于多台服务器集群运维有很大帮助,如果想要深入的学习ansible还是要再进行python的更多了解。