Ansible是一个开源产品,用于自动执行资源的配置管理和应用程序部署。
概述
Ansible是什么?
Ansible作为自动化运维工具,基于Python开发,可实现批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
Ansible特点
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 有大量常规运维操作模块,可实现日常绝大部分操作;
- 配置简单、功能强大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
- 模块化:调用特定的模块,完成特定任务
- 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
- 支持自定义模块
- 基于Python语言实现
- 部署简单,基于python和SSH(默认已安装),agentless
- 安全,基于OpenSSH
- 支持playbook编排任务
- 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
- 无需代理不依赖PKI(无需ssl)
- 可使用任何编程语言写模块
- YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案
基本概念
在使用Ansible前,您需要了解以下核心概念:
Ansible playbook
Ansible playbook是Ansible的配置、部署和编排语言。它们可以通过YAML的格式描述您希望远程系统执行的一套运维实施策略或一般IT流程中的一系列步骤。
Ansible模块
Ansible 模块是Ansible执行任务的核心。这些模块是独立的代码,可以通过命令行或者Playbook执行。Ansible模块应该具有幂等性。
Ansibel架构图
Ansible任务执行流程
安装
YUM安装
1 | yum install epel-release -y |
配置文件
ansible 的默认配置文件为/etc/ansible/ansible.cfg
常见参数:
1 | inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置 |
主机清单
Ansible可同时操作属于一个组的多台主机。组和主机之间的关系通过Inventory文件配置。Ansible Inventory分为静态Inventory和动态Inventory。当被管理主机比较少的情况下,直接在静态Inventory的host文件中管理即可;当主机越来越多,不断变化时,可以通过动态Inventory来管理。
https://docs.ansible.com/ansible/2.8/user_guide/intro_inventory.html
默认清单文件为/etc/ansible/host
,也可以使用-i
参数指定清单文件,比如
1 | ansible -i hosts-tmp all -m ping |
主机和组
1 | # 不归属于任何组,单独的主机 |
非标准端口
1 | badwolf.example.com:5309 |
相似主机
1 | [zzz] |
主机变量
1 | [atlanta] |
组变量
1 | [atlanta] |
默认组
有两个默认组:all
和ungrouped
。
all
包含每个主机。 ungrouped
包含除 之外没有其他组的所有主机all
。
内置参数
参数 | 说明 |
---|---|
ansible_ssh_host | 将要连接的远程主机名 |
ansible_ssh_port | ssh端口号 |
ansible_ssh_user | ssh 用户名 |
ansible_ssh_pass | ssh 密码 |
ansible_connection | 与主机的连接类型,比如docker,localhost |
ansible_ssh_private_key_file | ssh 使用的私钥文件。如果使用多个密钥并且您不想使用 SSH 代理,则很有用。 |
ansible_shell_type | 目标主机的shell类型,比如csh、fish |
ansible_python_interpreter | 目标主机的python解释器。 |
常用命令
命令行工具
https://docs.ansible.com/ansible/2.8/user_guide/command_line_tools.html
- ansible,用于执行远程操作,单剧本模式
- ansible-config
- ansible-console
- ansible-doc
- ansible-galaxy
- ansible-inventory
- ansible-playbook
- ansible-pull
- ansible-vault
ansible-doc
用于获取模块信息、帮助文档
ansible-doc -s MOD_NAME
查看模块的帮助文档
1 | ansible-doc -s shell |
1 | ansible-doc -s command |
ansible
1 | ansible <host-pattern> [-f forks] [-m module_name] [-a args] |
demo
1 | # atlanta组的机器重启,并发数为10 |
ansible-playbook
demo
1 | # playbook.yaml |
1 | # ansible-playbook playbook.yaml |
显示输出
1 | # cat playbook.yaml |
API
https://docs.ansible.com/ansible/latest/dev_guide/developing_api.html#