Ansible

  • Ansible简介
  • Ansible特点
  • 概念解释
  • Ansible使用过程中的角色
  • Ansible通信机制
  • Ansible应用场景
  • Ansible工作机制
  • Ansible的目录结构
  • 部署Ansible
  • 部署环境
  • Ansible部署
  • 添加远程主机


Ansible简介

常见的部署管理工具有Chef、Puppet、Ansible、SaltStack、Fabric。
Ansible发布于2012年,其作者兼创始人是Michael DeHaan。
红帽2015收购了Ansible母公司。
官方文档:https://docs.ansible.com/

Ansible 是一个极其简单的 IT 自动化引擎,可自动执行云供应、配置管理、应用程序部署、服务内编排和许多其他 IT 需求。

Ansible主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率。可以理解为是一种配置管理工具

常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。

Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。

Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。

Ansible特点

ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible所运行的模块
ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的

在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。

Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,这点非常诱人。

Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux系统

概念解释

  • Control node控制节点
    任何安装了 Ansible 的机器。可以通过从任何控制节点调用ansibleoransible-playbook命令来运行 Ansible 命令和 playbook 。可以使用任何安装了 Python 的计算机作为控制节点——笔记本电脑、共享桌面和服务器都可以运行 Ansible。但是,不能将 Windows 机器用作控制节点。可以有多个控制节点。
  • Playbooks
    已保存的有序任务列表,可以按该顺序重复运行这些任务。剧本可以包括变量和任务。Playbooks 是用 YAML 编写的,易于阅读、编写、共享和理解。Ansible Playbooks 提供了一个可重复、可重用、简单的配置管理和多机部署系统,非常适合部署复杂的应用程序。如果需要多次使用 Ansible 执行任务,编写剧本并将其置于源代码控制之下。然后可以使用 playbook 推送新配置或确认远程系统的配置。
  • Managed nodes托管节点
    使用 Ansible 管理的网络设备(和/或服务器)。受管节点有时也称为“主机”。Ansible 未安装在受管节点上。
  • Inventory=:
    受管节点列表。清单文件有时也称为“主机文件”。清单可以为每个受管节点指定 IP 地址等信息。清单还可以组织受管节点,创建和嵌套组以便于扩展。
  • Collections
    集合是 Ansible 内容的分发格式,可以包括剧本、角色、模块和插件。
  • Modules:
    Ansible 执行的代码单元。每个模块都有特定的用途,从管理特定类型数据库上的用户到管理特定类型网络设备上的 VLAN 接口。可以使用任务调用单个模块,或调用剧本中的多个不同模块。从 Ansible 2.10 开始,模块被分组到集合中。
  • Tasks
    Ansible 中的动作单元。可以使用临时命令执行一次单个任务。

Ansible使用过程中的角色

1、使用者

  • CMDB存储和管理着企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
  • 基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口:PHP、Python等。
  • 直接使用Ad-Hoc临时命令集调用Ansible工具集来完成任务执行。
  • 通过执行Playbooks中预先编排好的任务集按序完成任务执行。

2、Ansible工具集(ansible命令是Ansible的核心工具,总指挥)

  • INVENTORY:命令执行的目标对象配置文件
  • API:供第三方程序调用的应用程序编程接口
  • MODULES:丰富的内置模块
  • PLUGINS:内置和可自定义的插件

3、作用对象

Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。

ansible file模块 创建多个目录 ansible creates_linux

Ansible通信机制

Ansible主推的卖点是其无需任何Daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的SSH安全连接。

无客户端,只需安装SSH、Python即可。

基于OpenSSH通信,底层基于SSH协议(Windows基于PowerShell)。

支持密码和SSH认证,建议使用公私钥方式认证,因为密码认证方式的密码需明文写配置文件,虽然配置文件可加密,但会增加Ansible使用的复杂度。

支持Windows,但仅支持客户端,服务端必须是Linux系统。

Ansible应用场景

  • 应用部署
    Ansible内置网络、应用、系统、第三方云平台扩展等完善的功能模块,协助运维快速完成应用的安装、卸载、升级、启停、配置等部署类工作,即使对跨平台或知名的商业硬件也同样支持。
  • 配置管理
    Ansible内置File、Template,结合Jinja、Lineinfile等内置模块,同时无缝结合GitHub、GitLab、Git、SVN、Jenkins等主流版本控制和CI持续集成工具,助力配置管理自动化。
  • 任务流编排
    有效保证Tasks任务流按既定规则和顺序完成事先制订的目标和计划,同时Roles编排方式又能在一定程度上从书写习惯和代码层编排上保证整体项目的可架构性和规范性,协助控制项目维护成本不致过高。
  • 适用于网络管理员、系统运维、应用运维、桌面运维、DevOps、基础架构运维等多领域运维行业,上手快,效率高。

Ansible工作机制

Ansible为多层部署而设计,Ansible 通过描述所有系统如何相互关联来为您的 IT 基础架构建模,而不仅仅是一次管理一个系统。
它不使用代理,也没有额外的自定义安全基础设施,因此易于部署。最重要的是,它使用一种非常简单的语言(YAML,以 Ansible Playbooks 的形式),描述自动化任务。

ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台。

ansible file模块 创建多个目录 ansible creates_devops_02

核心: ansible
Core Modules: ansible自带的模块
Custom Modules: 核心模块功能不足时,用户可以添加扩展模块
Plugins: 通过插件来实现记录日志,发送邮件或其他功能
Playbooks: 剧本,YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
Connectior Plugins: ansible基于连接插件连接到各个主机上,默认是使用ssh
Host Inventory: 记录由Ansible管理的主机信息,包括端口、密码、ip等

Ansible的目录结构

配置文件: /etc/ansible/
执行文件目录: /usr/bin/
lib依赖库: /usr/lib/python2.7/site-packages/ansible/
help文件: /usr/lib/python2.7/site-packages/ansible

部署Ansible

部署环境

rhel7.6的系统缺少最新版ansible的依赖项,所以如果要下载ansible最新版建议使用rhel8以上系统
#我安装的是旧版本的,python支持也是2,最新版的是3

三台虚拟机:rhel7.6的OS
server1		192.168.122.11		ansible管理端
server2		192.168.122.12		远程主机
server3		192.168.122.13		远程主机

Ansible部署

在真机将源放到aoache发布目录下(包含离线安装包和一些依赖源)

ansible file模块 创建多个目录 ansible creates_运维_03


在server1添加真机的ansible源

[ansible]
name=ansible
baseurl=http://192.168.122.1/ansible
gpgcheck=0

列出源没问题

ansible file模块 创建多个目录 ansible creates_ansible_04


安装ansible

ansible file模块 创建多个目录 ansible creates_运维_05


我装的是2.8.5版本

ansible file模块 创建多个目录 ansible creates_linux_06

添加远程主机

进入配置文件目录

ansible file模块 创建多个目录 ansible creates_linux_07


修改主机文件,指定远程主机,如下图将两台主机分配到了test组(如果不指定组别,那就是默认情况下未分配组,Ungrouped)

ansible file模块 创建多个目录 ansible creates_devops_08

ansible管理主机需要与这些主机提前做好ssh免密

如果不做免密,会出现如下情况

ansible file模块 创建多个目录 ansible creates_运维开发_09

所以需要对管理的主机做免密

ssh-keygen
ssh-copy-id server2
ssh-copy-id server3

ansible file模块 创建多个目录 ansible creates_运维_10


调用ansible下的ping这个模块(-m指定模块)测试成功!

ansible file模块 创建多个目录 ansible creates_devops_11