secce 发表于 2018-7-29 06:57:05

Ansible基础理论及安装

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风格
  
  
  
  
  
  
  
  
  
  从各个方面定义了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
页: [1]
查看完整版本: Ansible基础理论及安装