Ansible入门初试

Ansible的基本概念和入门安装配置。

1、Intro

Ansible是一款使用python开发的自动化运维工具,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。

Ansible默认是通过SSH协议来远程连接集群中的各台设备并进行相关操作,因此我们只需要在一台设备上安装Ansible即可,安装、升级和卸载都只需要对一台设备进行操作,其余的设备上面并不会有软件的安装残留之类的问题。同时,由于是使用的SSH连接,Ansible也不需要在系统后台维持相关进程一直运行。

2、Version

因为Ansible的只需要在一台机器上安装,所以它的升级和卸载都十分简单,因此很多人会选择安装最新版的Ansible甚至是github上的开发版。Ansible的更新周期非常短,只有四个月,因此即使是出现了BUG,也能很快的在下一个版本中解决。

3、Install

在centos7上安装最新版本的ansible

Currently Ansible can be run from any machine with Python 2 (version 2.7) or Python 3 (versions 3.5 and higher) installed. Windows isn’t supported for the control node.

This includes Red Hat, Debian, CentOS, macOS, any of the BSDs, and so on.

从官网上我们可以看到,截止目前(2019.8.23),安装ansible需要python2.7以上或者是python3.5以上版本。

这里为了方便管理,我选择了epel源里面的python3.6版本进行安装,需要安装最新的python3可以参考这里

1
2
3
4
5
# 首先我们需要安装epel库
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# 安装python3.6
yum install python36 -y

1
2
# 接着我们查看一下ansible的最新版本
yum list | grep ansible

这里我们可以看到最新版是2.8.4,官网上显示的最新版也是2.8,这就没问题了。

然后我们直接安装

1
yum install ansible -y

4、Conf

存放目录

ansible的配置文件存放在/etc/ansible目录下:

图中的ansible.cfg文件就是对应的配置文件,默认情况下,里面的所有配置都是注释掉的,也就是说里面是没有任何默认配置的。

读取顺序

ansible读取配置文件的先后顺序如下:

  • ANSIBLE_CONFIG (environment variable if set)
  • ansible.cfg (in the current directory)
  • ~/.ansible.cfg (in the home directory)
  • /etc/ansible/ansible.cfg

ansible会根据上述顺序读取配置文件,并且使用第一个找到的配置文件并忽略剩余的配置文件。

ansible.cfg配置文件是ini配置文件,因此可以使用#;作为注释,但是如果需要在已经写了配置的同一行后添加注释,则只能使用;

1
2
# some basic default values...
inventory = /etc/ansible/hosts ; This points to the file that lists your hosts

ansible.cfg

这里为了方便我们配合git来进行版本控制,我们在github上面创建一个repo,然后clone到本地,接着把配置文件和之后会使用到的playbook都放入到这个文件夹内。

具体的git使用方法比较简单,我们不在这里赘述。

ansible.cfg文件的配置比较简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[defaults]
# hosts文件的存放位置
inventory = ./hosts
# 执行超级命令的用户
sudo_user = root
# 传输方式
transport = smart
# ssh的端口
remote_port = 22
# 执行sudo命令的时候使用的命令
sudo_exe = sudo
# 远程执行命令的默认用户
remote_user = tinychen
# log日志存放的地方
log_path = /var/log/ansible.log
# 默认使用的模块
module_name = command
# 默认使用的shell
executable = /bin/sh
# 使用rsa密钥进行验证登录而不是密码
private_key_file = /home/tinychen/.ssh/id_rsa

hosts文件中我们可以添加需要控制的主机的IP或者是hostname

1
2
[k8s]
192.168.100.22[0:6]

这里因为我的被控制主机的IP地址是连续的,因此我直接使用[]来表示,这里的k8s是这一堆被控制主机的组名,一个IP可以加入多个组,也可以一个组都不加入。

5、Test

接下来我们执行几条命令来测试一下

先执行一下ping模块看看能否连通

1
ansible k8s -m ping

这里可以看到是没有问题的(结果太长没有全部截图出来)

1
ansible k8s -m command -a "id"

可以看到这里已经是顺利执行了。