Ansible基础理论及安装

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible基础理论及安装相关的知识,希望对你有一定的参考价值。

Ansible介绍及安装

一. ansible自动化运维完成的功能

在运维工程中,我们部署一台使其能够在生产环境中使用大致经过一下步骤:

技术分享图片

  1. 安装主机。
  2. 部署中间件,运行环境等。
  3. 安装我们实际生产的应用程序。

这一系列步骤如果人工一步步去配置话,需要花费大量的时间。特别是在生产环境中,我们为了提高线上环境的可用性,要尽量减少不可用时间,我们可以使用高可用以增加可用性。尽管有高可用但在实际情况下,也会导致生产环境不可用,例如自然灾害等不可抗力。那么我们就需要有一种工具能快速部署线上环境,在主机只用几百来台的情况下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

以上是关于Ansible基础理论及安装的主要内容,如果未能解决你的问题,请参考以下文章

Ansible palybook简介及基础安装Apache实例

Ansible及Ansible Tower安装

自动化运维工具-Ansible基础

Ansible安装及简单了解

Ansible系列-基础篇-Ansible 的安装、配置和基本使用

Ansible基础知识