集中化管理平台 — Ansible 详解

阅读目录

  • Ansible 简介
  • Ansible 安装及配置
  • Ansible 模块
  • playbook 介绍

Ansible 简介

Ansible 类似于 Saltstack,是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台。Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML两个关键模块构建。Ansible 具有以下特点:

  • 部署简单,只需要在主控端部署 Ansible 环境,被控端无需做任何操作;
  • 默认使用 SSH(Secure SHell)协议对设备进行管理;
  • 主从集中化管理;
  • 配置简单、功能强大、扩展性强;
  • 支持 API 及自定义模块,可通过 Python 轻松扩展;
  • 通过 Playbooks 来定制强大的配置、状态管理;
  • 对云计算平台、大数据都有很好的支持;
  • 提供一个功能强大、操作性强的 Web 管理界面和 REST API 接口——AWX 平台;
  • 幂等性:一种操作重复多次结果相同。

Ansible 与 Saltstack 最大的区别是 Ansible 无需在被控主机部署任何客户端代理,默认直接通过 SSH 通道进行远程命令执行或下发配置;相同点是都具备功能强大、灵活的系统管理、状态配置,都使用YAML格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、大数据都有很好的支持。Ansible 在GitHub 上的地址为 https://github.com/ansible/,可参考其中的配置。

Ansible 安装及配置

Ansible 只需在管理端部署环境即可,建议采用 yum 源方式来实现部署,需要安装 epel 扩展源。我的测试环境为:CentOS release 6.6,自带 Python 2.6.6。

Ansible 配置及测试

在 Ansible 的配置文件中添加主机信息,即可与目标主机进行通信,配置文件位置 /etc/ansible/hosts,其中,[webservers] 为主机组,可以批量控制主机组里面的所有主机,一个主机可以添加到多个组。

通过 ping 模块测试主机的连通性,出现下面的结果表示安装、测试成功。(需要配置主控机无密码 SSH 访问)

Ansible 命令集:

Ansible 参数:

 

Ansible 模块儿

1. 远程命令模块

(1)功能

包括 command、script、shell,都可以实现远程 shell 命令运行。command 作为 Ansible 的默认模块,可以运行远程权限范围所有的 shell 命令;script 功能是在远程主机执行主控端存储的 shell 脚本文件,相当于 scp+shell 组合;shell 功能是执行远程主机的 shell 脚本文件。

(2)实例

2. copy 模块

(1)功能

实现主控向目标主机拷贝文件,类似于 scp 功能。

(2)实例

以下示例实现拷贝 /root/install.log 文件至 webservers 组目标主机的 /tmp 目录下,并更新属组及权限(也可单独使用 file模块 实现权限的修改)。

3. stat 模块

(1)功能

获取远程文件状态信息,包括 atime、ctime、mtime、md5、uid、gid 等信息。

(2)实例

4. get_url 模块

(1)功能

实现在远程主机下载指定 url 到本地,支持 sha256sum 文件校验。

(2)实例

5. yum 模块

(1)功能

Linux 平台软件包管理操作,常见的有 yum、apt管理方式。

(2)实例

6. cron 模块

(1)功能

远程主机 crontab 配置。

(2)实例

7. mount 模块

(1)功能

远程主机分区挂载。

(2)实例

8. service 模块

(1)功能

远程主机系统服务管理。

(2)实例

9. sysctl 包管理模块

(1)功能

远程 Linux 主机 sysctl 配置。

(2)实例

10. user 服务模块

(1)功能

远程主机系统用户管理。

(2)实例

11. file 模块

(1)功能

设置文件属性。

(2)案例

12. fetch 模块

功能:从远程服务器拉取文件至本机,只能 fetch 文件,不能 fetch 目录。如果拉目录,先 tar/zip 再拉到本机即可。

13. group 模块

功能:组管理。

14. setup 模块

收集远程主机的系统景况。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如 redhat 系列用 yum 安装,而 debian系列用 apt 来安装软件。

15. selinux 模块

管理 selinux。

 

playbook 介绍

playbook 是一个不同于使用 ansible 命令行执行方式的模式,其功能更强大灵活。简单来说,playbook 是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步及异步方式。可以在 https://github.com/ansible/ansible-examples 找到大量的例子。playbook 是通过 YAML 格式来进行描述定义的,可以实现多台主机应用的部署,定义在 webservers 及 dbservers 组上执行特定指令步骤。下面介绍一个基本的playbook 实例:

其中,- hosts 定义主机与用户,指定了 webservers 组定义的主机,并定义了相关变量,变量的作用域只限于 webservers 组下的主机。通过 vars 参数定义了4个变量(配置模板用到),remote_user 为指定远程操作的用户名,默认为 root 账号,支持 sudo 方式,通过添加 sudo: yes 即可。

tasks 任务列表

所有的任务列表,playbook 将按定义的配置文件自上而下的顺序执行,定义的主机都将得到相同的任务,但执行的结果不一定相同,这取决于主机的环境及程序包的状态。playbook 可以通过 template 模块对本地配置模板文件进行渲染并同步到目标主机。以 nginx 配置文件为例,定义如下:

其中,src=/home/ansible/nginx/nginx2.conf 为管理端模板文件存放位置,dest=/etc/nginx/nginx.conf 为目标主机 nginx 配置文件位置。下面用一个例子来了解一下什么是模板。

Ansible 会根据定义好的模板渲染成真实的配置文件,模板用 YAML 语法,最终生成的 nginx 配置如下:

当目标主机配置文件发生变化后,通知处理程序(Handlers)来触发后续的动作,比如重启 nginx 服务。触发是通过 Handlers 定义的 name 标签来识别的,比如下面 notify 中的 “restart nginx” 与 handlers 中的 “name: restart nginx” 保持一致。

执行 playbook

更多参数说明请运行 ansible-playbook –help 。
注意:本文中的一些案列摘自刘天斯《 Python自动化运维》

作者:LeRoi
原文链接:http://www.cnblogs.com/waynechou/p/ansible_detail.html

文章分类 未分类

发表评论

电子邮件地址不会被公开。

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享