Ansible实战[一]——Ansible基础

一、Ansible简介

Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible本身只提供一个框架,真正工作的是它内置的各种模块,通过各模块的组装配合完成一系列操作。Ansible通常以执行脚本的方式去实现自动化运维,Ansible的脚本被称为playbook,基于yaml语法编写,一个playbook可以包含多个play,每个play中可以通过调用多个模块实现部署操作。

二、安装Ansible

在CentOS下直接yum即可安装

yum install ansible

输入ansible --version输出如下信息即代表安装成功
QQ截图20170310143837.png

Ansible的配置文件目录结构

-- /etc/ansible
  |-- ansible.cfg    # ansible的相关配置项
  |-- hosts          # 待连接的主机列表(可以配置独立主机或主机组)

三、基于命令行初探Ansible

3.1 写在前边

ansible主要还是以编写playbook脚本,然后执行playbook脚本来操作节点,比较少直接在控制端逐条地输入执行命令去操作受控节点,所以本小节只介绍ansible命令的简单用法,用于初步感受ansible的执行方式,后边章节将会讲解更为常用的playbook部分。

3.2 场景介绍

  • 控制终端 10.10.10.10
  • 受控节点

    • 11.11.11.11
    • 12.12.12.12

3.3 修改hosts文件配置主机列表

hosts文件里的初始备注已经列举了配置例子,看两眼基本都能懂,此处就不详细介绍语法了。本例中我们把受控节点的两个服务器ip归回test组,hosts文件配置如下

[test]
11.11.11.11
12.12.12.12

3.4 测试连接受控节点

输入如下命令

ansible test -m ping -u deploy -k

若执行结果返回的是pong则代表访问成功

11.11.11.11 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

例子详解

  • test 指定需要控制的主机组为test,若指定为all则hosts文件中所有的主机都将被控制
  • -m 指定将要执行的模块
  • ping 执行ansible的ping模块
  • -u 指定以哪个用户登录受控节点,例子中指定登录用户为deploy,若不指定默认为root
  • -k 提示输入 ssh 登录密码,当使用密码验证登录的时候用

3.5 配置免密登录

每次执行ansible命令都指定密码是非常不方便的,而把密码在配置文件中填写只能用明文保存,这样安全性很低。为解决这个问题,通常的做法是配置主机间免密登录,具体配置方式请参考《linux配置ssh免密登录》

3.6 命令参数

参见[《Ansible实战[附录一]——Ansible命令参数列表》](https://blog.leapmie.com/archives/312/)

四、主机管理进阶

4.1 组嵌套

利用组嵌套可实现组与组之间的层级关系,提高可管理性
以下配置指定了group1、group2隶属于test组下

[group1]
10.10.10.10
[group2]
11.11.11.11
[test:children]
group1
group2

4.2 变量

通过指定变量可以在ansible执行时自动获取相应变量,例如指定变量ansible_ssh_user后在连接到主机时将会自动以变量中指定的用户登录,无需每次敲写指定用户。除了ansible_ssh_user外还有许多其他的系统参数可以更改,如ansible_ssh_pass等;当然除了系统参数外,还可以填写自定义参数(在playbook中可以用到)。

4.2.1在hosts文件中指定变量
  • 方法一 在主机后直接带上变量

    [test]
    10.10.10.10 ansible_ssh_user=deploy1
    11.11.11.11 ansible_ssh_user=deploy2

  • 方法二 对一个指定变量

    [test]
    10.10.10.10
    11.11.11.11

    [test:vars]
    ansible_ssh_user=deploy

4.2.2 在外部添加变量

  • 所有主机共享变量

在/etc/ansible目录下创建host_vars文件,在该文件中可以指定特定变量,该变量将会对所有主机生效。
注意变量与值之间是用冒号而不是等号

ansible_ssh_user: deploy
ansible_ssh_pass: 123456
  • 组内共享变量

在/etc/ansible目录下创建group_vars目录,在该目录下以hosts文件中配置的组为文件名创建文件,如test,然后在新建的文件中指定变量则可实现组内共享变量。
注意变量与值之间是用冒号而不是等号

ansible_ssh_user: deploy
ansible_ssh_pass: 123456


[[目录]](https://blog.leapmie.com/archives/297/)
[[下一篇] Ansible实战[二]——playbook初探](https://blog.leapmie.com/archives/306/)


发表评论