Ansible介绍
# 1. Ansible 介绍
Ansible 是2012年推出的一种通用自动化工具,可用于配置管理或工作流程自动化。配置管理是一种" 基础架构代码 "实践,它将事物编码,例如应该在系统上安装什么包和版本,或者应该运行什么守护进程。工作流自动化可能是从配置基础架构到部署软件的任何事情。Ansible 在2015年时被Redhat公司收购。
Ansible是用Python编写的,它使用SSH在不同的机器上执行命令。Ansible是无代理的,这使得入手更容易。您只需要在相关机器上安装SSH和Python。Ansible使用声明式YAML语言"playbook"将一组主机("hosts")映射到定义明确的角色。声明性用于指示Ansible如何设置或更改事物,Ansible才进行必要的更改。
# Ansible 的目标
一切自动化
# Ansible的使用范围
- 自动化部署应用
- 自动化管理配置
- 自动化的持续交付
- 自动化的云服务管理
- 自动化网络设备管理
# Ansible是怎么工作的
从上图可以看出,运行ansible的先决条件是,安装ansible到管理节点,定义主机清单,并有一些playbooks定义。
简要的步骤
- 在控制节点上安装
ansible
- 配置主机清单: 将被控节点的连接信息配置到主机清单中。
- 定义playbook: 指定运行主机和执行任务
可以用动图说明下此次过程。
# 对管理主机的要求
目前,只要机器上安装了 Python 2(版本2.6或2.7)或Python 3(版本3.5及更高版本)都可以运行Ansible 【windows系统不可以做管理主机】 管理主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本。
# 对节点主机的要求
通常我们使用 ssh 与节点通信,默认使用 sftp. 如果 sftp 不可用,可在 ansible.cfg 配置文件中配置成 scp 的方式. 在节点上也需要安装Python 2(2.6或更高版本)或Python 3(3.5或更高版本)
# Ansible命令执行来源
1> USER,普通用户,即SYSTEM ADMINISTRATOR
2> CMDB(配置管理数据库) API 调用
3> PUBLIC/PRIVATE CLOUD API调用 (公有私有云的API接口调用)
4> USER-> Ansible Playbook -> Ansibile
2
3
4
# Ansible 概念
# 控制节点(Control node):
任何装有Ansible的机器可称为 控制节点 。 您可以从任何控制节点运行命令和剧本,并调用/usr/bin/ansible
或/usr/bin/ansible-playbook
。 您可以将任何安装了Python的计算机用作控制节点,笔记本电脑,共享桌面和服务器都可以运行Ansible。 但是,不能将Windows计算机用作控制节点。您也可以有多个控制节点。
# 管理节点(Managed nodes):
使用Ansible管理的网络设备或服务器可称为 管理节点。 受管节点有时也称为 主机 。 受管节点上是不需要安装Ansible的。
# 主机清单(Inventory):
托管节点的列表。库存文件有时也称为主机文件。您的目录可以为每个托管节点指定诸如IP地址之类的信息。库存还可以组织托管节点,创建和嵌套组,以便于扩展。要了解更多关于库存的信息。
# 模块(Modules):
Ansible执行的具体代码。每个模块都有特定的用途,从管理特定类型数据库的用户到管理特定类型网络设备上的VLAN接口。您可以使用任务调用单个模块,也可以调用剧本中的几个不同模块。要了解Ansible包含多少个模块。
# 任务(Tasks):
Ansible的行动单位。tasks包含一组由module组成的任务列表, 您可以使用特别的命令一次性执行单个任务。
# 剧本(Playbooks):
保存了已排序的任务列表,因此可以按此顺序重复运行这些任务。剧本可以包括变量和任务。剧本是用 YAML 编写的,易于阅读、编写、共享和理解。要了解更多关于剧本的信息。
# Ansible 特性
- 模块化:调用特定的模块,完成特定任务
- Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
- 支持自定义模块
- 基于Python语言实现
- 部署简单,基于python和SSH(默认已安装),agentless
- 安全,基于OpenSSH
- 支持playbook编排任务
- 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
- 无需代理不依赖PKI(无需ssl)
- 可使用任何编程语言写模块
- YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案
# Ansible 注意事项
- 执行ansible的主机一般称为主控端,中控,master或堡垒机
- 主控端Python版本需要2.6或以上
- 被控端Python版本小于2.4需要安装python-simplejson
- 被控端如开启SELinux需要安装libselinux-python
- windows不能做为主控端
- ansible不是服务,不会一直启动,只是需要的时候启动
# 社区活跃
统计时间: 2022年04月20日
Ansible releases
441
Ansible modules
3387
Galaxy Roles
30,862
Github Starts
528,000
Github Fork
218,000
# Ansible项目
Ansible Galaxy是一个用于查找,共享,使用Ansible role的在线社区。https://galaxy.ansible.com/
Ansible Container是一个开源项目,旨在实现整个容器构建,部署和管理过程的自动化。https://github.com/ansible/ansible-container
Ansible tower 商业项目,使用可视化仪表板,基于角色的访问控制,作业调度,集成通知和图形库存管理来集中和控制IT基础架构。https://www.ansible.com/products/tower
# Ansible 与其它配置管理的对比
笔者选择了目前几款主流的与 Ansible 功能类似的配置管理软件chef、 Puppet、Saltstack,这里所做的对比不针对各个软件的性能作比较,只是对各个软件的特性做个对比。
Ansible | Chef | Puppet | SaltStack | |
---|---|---|---|---|
程序语言 | Python | Ruby,Erlang | C++, Clojure | Python2 |
配置文件语言 | YAML,JSON | Ruby | Propfietary | YAML |
数据库 | 否 | PostgreSQL | PuppetDB | 无 |
传输方式 | Ssh | RabbitMQ | Mcollective | ZeroMQ |
发布方式 | Push | Pull | Pull | Push |
管理节点 | A,B,L,O,S | Linux | Linux | L,B |
客户端 | 否 | A,B,L,O,S,W | A,B,L,O,S,W | A,B,L,O,S,W |
无代理 | 是 | 否 | 否 | 否 |
公有云版本 | AM | AM/AZ/PR | 否 | 否 |
公有云管理 | AM/AZ/OS/GCP | Fog driver | AM/AZ/VM/GCP | salt Cloud |
架构 | Server | server/client | server/client | server/client |
逐步部署 | 是 | 是 | 否 | 否 |
企业版UI | Ansible Tower | opscode Manage | Puppet Enterprise | SaltStack Enterprise |
开源版UI | Semaphore | Chef Manage | Foreman | Slatpad,Saltshaker |
企业版本 | 是 | 是 | 是 | 是 |
创建时间 | 2012年3月6日 | 2009年1月16日 | 2010年9月15日 | 2011年2月21日 |
Github Starts | 42,547 | 6,198 | 5,710 | 10,747 |
Github Forks | 18,764 | 2,417 | 2,138 | 4,815 |
Contributors | 4,955 | 586 | 536 | 2,078 |
Commits | 49,775 | 26,017 | 31,751 | 106,129 |
统计时间: 2020年04月06日
# 资源
- 源码:https://github.com/ansible/ansible
- 官方文档: http://docs.ansible.com/
- Jinja2 中文文档: http://docs.jinkan.org/docs/jinja2/
- yaml语法: http://www.yaml.org/
- ansible 电子书: https://www.ansible.com/resources/ebooks
- 白皮书: https://www.ansible.com/resources/whitepapers
- 用户案例: https://www.ansible.com/resources/case-studies