ansible自动化运维详细教程及playbook详解

前言

当下有许多的运维自动化工具( 配置管理 ),例如:Ansible、SaltStack、Puppet、Fabric 等。

Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建。

Ansible 特点:

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

Ansible 与 SaltStack:

  • 最大的区别是 Ansible 无需在被监控主机部署任何客户端代理,默认通过 SSH 通道进行远程命令执行或下发配置。
  • 相同点是都具备功能强大、灵活的系统管理、状态配置,都使用 YAML 格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、大数据都有很好的支持。

1 安装ansible

2 配置ansible

2.1 SSH秘钥认证

2.2 添加被管理主机

2.3 测试ansible

3 hosts主机文件

4 ansible常用模块

4.1 远程命令模块(command / script / shell)

4.1.1 command

command 作为 Ansible 的默认模块,可以运行远程权限范围所有的 shell 命令,不支持管道符。

4.1.2 script

4.1.3 shell

shell模块基本和command相同,但是shell支持管道符

4.2 copy模块

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

4.3 stat模块

获取远程文件状态信息,atime/ctime/mtime/md5/uid/gid 等信息

4.4 get_url

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

4.5 yum

软件包管理

4.6 corn

远程主机 crontab 配置

4.7 mount

远程主机分区挂载

4.8 service

远程主机系统服务管理

4.9 user

远程主机用户管理

5 ansible-playbook 详解

5.1 YAML语法

  1. YAML的语法和其他高阶语言类似并且可以简单表达清单、散列表、标量等数据结构。(列表用横杆表示,键值对用冒 分割,键值对里又可以嵌套另外的键值对)
  2. YAML文件扩展名通常为.yaml或者.yml。下面为示例
  3. 一定要对齐,只能使用空格

5.2 核心组件

  • tasks:任务
  • variables:变量
  • templates:模板
  • handlers:处理器
  • roles:角色

5.3 playbook简单示例

5.3.1 第一个示例

hosts 定义单个主机或组,vars定义变量,remote_user定义执行命令的远程用户,tasks定义执行哪些命令,handlers定义调用哪些处理器

vars(变量):

  • 变量命名: 字母数字下划线组成,只能以字母开头

  • 变量种类:

    1. facts(内置变量)

      由远程主机发回的主机属性信息,这些信息被保存在ansible变量当中

      例如:ansible 192.168.238.170 -m setup 来获取远程主机上的属性信息,这些属性信息保存在facts中

    2. 通过命令行传递

      通过命令行传递:ansible-playbook test.yml –extra-vars “host=www user=tom“(如果剧本中已有此处定义的变量则会被覆盖)

    3. 通过roles传递

    4. 主机变量

      在/etc/ansible/hosts中定义

    5. 组变量

hosts :

/etc/abible/hosts 中指定的远程主机,并用指定的属性进行连接

5.3.2 第二个示例

  • 在playbook中调用变量的方式为{{ variable }}
  • when语句用来条件测试
  • ansible_os_family 是facts中内置的属性信息 ansible_os_family的信息可以使用ansible all -m setup | grep ansible_os_family 查看
  • 在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表

5.3.3 第三个示例

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月2日
下一篇 2018年6月2日

相关推荐