Ansible介绍及安装
一. ansible自动化运维完成的功能
在运维工程中,我们部署一台使其能够在生产环境中使用大致经过一下步骤:
- 安装主机。
- 部署中间件,运行环境等。
- 安装我们实际生产的应用程序。
这一系列步骤如果人工一步步去配置话,需要花费大量的时间。特别是在生产环境中,我们为了提高线上环境的可用性,要尽量减少不可用时间,我们可以使用高可用以增加可用性。尽管有高可用但在实际情况下,也会导致生产环境不可用,例如自然灾害等不可抗力。那么我们就需要有一种工具能快速部署线上环境,在主机只用几百来台的情况下ansible就是一个不错的选择。
Ansible自动化运维完成的功能:
- 实现多主机并行执行命令
- 批量安装部署线上环境
简而言之,他可以实现OS以上的全部功能。注意安装操作系统这一功能现在处于实际测试环境下,不能使用。
二. Ansible简介
ansible运维工具,他不需要在被管理的主机上安装代理程序已接收ansible发来的指令,ansible管理被主机是通过ssh连接来管理。它属于无agent运维工具。相反像zabbix我们需要在被管理主机上安装zabbix-agant程序包,故zabbix是有agent端运维工具。
1. Ansible特点
- 部署简单,只需在主控端部署ansible环境
- 幂等性,同一命令能够执行多次,但要注意的是实行的命令要具备幂等性特性,否则会报错。
- 默认使用SSH协议管理主机。
- 提供了丰富的模块,并支持自主开发新模块。
- 通过playbook编排,管理。并且playbook使用yaml语法。
- 支持云平台和大数据。
2. Ansible架构图
Ansible核心组件说明
- Ansible:Ansible的核心程序,后面会详细介绍ansible的使用
- Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。默认资产文件是在/etc/ansible/hosts中定义。
- Playbooks:YAML格式文件,组织了多个模块功能,在统一调用。
- Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
- Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
- Connection Plugins:连接插件,Ansible和Host通信使用
ansible大致工作流程:
用户向ansible发送请求,但ansible不处理任何请求,所用的请求都由相应的模块完成,core模块是自带,用户也可以自己写模块以完成相应的功能。而命令执行的主机来自inventory file。连接主机使用连接引擎,默认是使用ssh引擎。而playbook是将一个完成任务的命令放在一个文件中执行。
三. Ansible基础环境的安装和配置
1. Ansible安装及重要文件介绍
安装
~] yum install ansible
二进制文件
~] rpm -ql ansible | less
/usr/bin/ansible : 用于在指定主机上运行任务。
/usr/bin/playbook : 用于运行playbook。
/usr/bin/ansible-doc : 用于查看ansible中个模块的使用方法。
Inventory资产清单
/etc/ansible/hosts
ansible配置文件
/etc/ansible/ansible.cfg
配置文件使用的类似ini风格
[defaults]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
从各个方面定义了ansible的默认行为,以及特性。详细介绍请看官方文档配置文件介绍
相关配置
- inventory = /etc/ansible/hosts :设置inventory文件目录
- gathering = implicit :是否获取被控主机参数信息
implicit:默认获取主机facts, 使用gather_facts=False关闭 explicit:默认不获取主机facts,使用gather_facts=True关闭
- gather_subset = all :指明获取被控主机那些facts信息,最终作为变量可以被yaml和jinja2文件应用
他将主机的信息分为多个子系统: all - 获取所有子系统的信息 network - 获取网络facts hardware - 获取主机硬件facts virtual - 获取虚拟化fact facter - 从factoer中获取facts ohai - 从ohai获取facts
2. 配置SSH连接
Ansible master主控端:192.168.200.135
Ansible node1 节点机:192.168.200.136
Ansible node2 节点机: 192.168.200.137
Ansible主控端配置 :
生成rsa算法密钥对
默认即可,直接回车,生成的密钥对默认情况下放在家目录中隐藏目录.ssh。
其中,id_rsa为私钥,id_rsa.pub为公钥。
拷贝公钥到被管理主机
此命令会将私钥文件本机id_rsa.pub文件的内容复制到192.168.200.136的/root/.ssh/authorized_keys文件中,如下图
本机在/root/.ssh/known_hosts中记录了远程主机的信息,如下图
测试远程连接是否成功
由上图可看出远程登录成功。
3. 测试Ansible功能
表明Ansible配置成功了。
四. 术语
术语 | 解释 |
---|---|
Action | 它是一个task的具体表现,而一个action是模块和其对应参数的运行 |
Facts | 它是远程主机的信息,使用setup模块获取,可在配置文件通过gather_subset设置获取的值 |
Forks | Ansible主控端连接主机可并发运行,默认是5,可在配置文件修改forks参数设置 |
Handlers | 触发器,它实际也是一个task,这个task只会被notify触发,例如,我们配置文件修改后会重启服务。一个Handlers如果被多个task调用只会执行一次。handlers运行顺序是其列出来的顺序而不是触发的顺序。 |
Inventory | 它是一个文件,用于描述主机和组 |
Jinja2 | 他像一个插入型语言,例如php,jsp可以进行变量替换,运算等 |
Notify | 用于task中,给task注册了一个事件,一旦发生改变就会触发对应的task执行, |
paramiko | ansible默认使用的库,用户ssh连接 |
Playbooks | 它是一种语言,ansible用其编排,配置,管理,部署系统 |
Roles | 它是一个组织单元,以实现一个特殊的功能,例如安装一个nginx,他就可以编写成一个role。这样方便重复利用 |
Tags | playbook中用于标记一个task,在执行时可以只执行指定的task,也可跳过指定的的task |
Templates | 它使用jinga2的模板引擎,可以使用fact变量,host变量,group变量 |
When | 用于task中。是判断语句,当判断为假是task不会执行 |
YAML | 使用yaml定义palybook |
原文地址:http://blog.51cto.com/13589448/2068250