本文介绍: ansible是新出现的自动化运维工具基于Python开发集合了众多老牌运维工(puppetcfenginechef、funcfabric) 的优点,实现批量系统配置批量程序部署批量运行命令功能ansible基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible运行模块,ansible只是提供一种框架。主要包括:(1)连接插件connection plugins:负责和被管控端实现通信;

目录

一.ansible简单介绍

二.Ansible的安装

三.主机清单

四.运行临时命令

五.Playbook剧本

5.1编写并运行play

5.2实施多个play


一.ansible简单介绍

        ansible是新出现的自动化运维工具,基于Python开发,集合了众多老牌运维工(puppet、cfengine、chef、func、 fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能
        ansible基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行模块,ansible只是提供一种框架。 主要包括:
        (1)连接插件connection plugins:负责和被管控端实现通信;
        (2) host inventory:指定操作主机,是一个配置文件里面定义管控的主机
        (3)各种模块核心模块command模块自定义模块;
        (4)借助于插件完成记录日志邮件功能;
        (5) playbook:剧本执行多个任务时,可以让被管控端一次性运行多 个任务

Ansible特性

◆(1) no agents:不需要在被管控主机安装任何客户端;

◆(2)noserver:无服务器端,使用时直接运行命令即可;
作机.上进行一次更新即可;

◆(3) modules in any languages:基于模块工作,可使用任意语言开发模块;
◆(4) yaml,not code:使用yaml语言定制剧本playbook;

◆(5) ssh by default: 基于SSH工作;

◆(6) strong multi_tier solution. 可实现多级指挥

Ansible优点

◆(1)轻量级,无需在客户端安装agent更新时,只需在操作机.上进行一次更新即可;
◆(2) 批量任务执行可以写成脚本,而且不用分发远程就可以执行;
◆(3)使用python编写,维护更简单ruby语法过于复杂;
◆(4)支持sudo
 

Ansible架构

Ansible系统架构
●核心引擎:即Ansibler
●核心模块(core modules ):这些都是Ansible自带的模块。
自定义模块(custem modules): 如果核心模块不足以完成某种功能, 可以添加自定义模块。
●插件(plugins): 完成模块功能的补充,借助于插件完成记录日志邮件等功能。
●剧本(playbook):定义Ansible任务配置文件, 可以将多个任务定义在一一个剧本中,由Ansible 自动执行,剧本执行支持多 个任务,可 以由控制主机运行多个任务,同时 对多台远程主机进行管理
●playbook是Ansible 的配置、部署和编排语言,可以描述一- 个你想要的远程系统执行策略,或一一组步骤的一般过程
●连接插件5connectior plugins) : Ansible 基连接插件连接到各个主机上,负 责私摄管节点实现
通信
●主机清单(host inventory): 定义Ansible管理的主机策略默认是在Ansible的hosts配置文件中定
义被管节点
 

Ansible工作原理
1、管理端支持local ssh, zeromq三种方式连接被管理端,默认使用基于ssh的连接—这部分对
基本架构图中的连接模块;
2、可以按应用类型方式进行Host Inventory (主机群)分类管理节点通过各类模块实现相应的操作—单个模块,单条命令的批量执行,我们可以称之为adhoc;
3、管理节点可以通过playbooks实现多个task集合实现一类功能,如web服 务的安装部署、数据库服务器的批量备份等。playbooks我们可 以简单理解为,系统通过组合多条adhoc操作配置文件。Ansible默认是通过SSH通道管理的,也就是它所说的免客户端方式管理,它 底层是通过paramiko 来实现的。
 

二.Ansible的安装

yum install ansible  -y

ansible  —version    //测试安装的版本

三.主机清单

定义清单
清单定义Ansible将要管理的一-批主机。 这些主机也可以分配到组中,以进行集中管理。组可以包
含子组,主机也可以是多个组的成员。清单还可以设置用到它所定义的主机和组的变量
可以通过两种方式定义主机清单。静态主机清单可以通过文本文件来定义。动态主机清单可以根据
需要使用外部信息提供程序通过脚本或其他程序来生成
 

使用静态清单指定受管主机
静态清单文件指定Ansible目标受管主机的文本文件。您可以使用多种不同的格式编写文件,
包括INI样式或YAML。INI 样式格式很常见,将用于课程中的大多数示例
 

在最简单的形式中,INI 样式静态清单文件是受管主机的主机名或IP地址列表每行一个:
web1. example . com
web2. example . com .
db1. example . com
db2. example . com
192.0.2.42
 

但通常而言,您可以将受管主机组织为主机组。通过主机组,您可以更加有效地对一系列系 统运行Ansible。这时,每一部分的开头为以方括号(])括起的主机组名称。其后为该组中每一受管主机的主机名或IP地址,每行一个
在以下示例中,主机清单定义了两个主机组: webservers 和dbservers。
[webservers] .
web1. example . com
web2. example . com
192.0.2.42
[dbservers]
db1. example . com
db2. example . com
 

主机可以在多个组中。事实上,建议您将主机组织为多个组,可以根据主机的角色、其物理位置
及是否在生产环境中等因素以不同的方式加以整理。这可让您轻松地将Ansible play应用到特定的
主机。
[webservers]
web1. example . com
web2. example . com
192.0.2.42
[db-sarvers
db1. example . com
db2. exanele . com
[east-datacenter]
web1. example . com
db1. example . com
[west-datacenter]
web2. example . com
db2. example . com
[production]
web1. example . com
web2. example . com
db1. example . com
db2. example . com
 

重要
两个主机组始终存在:
..all主机组含有清单中明确列出的每一个主机。
grouped主机组含有清单中明确列出、但不属于任何其他组的每-个主机。
 

定义嵌套
Ansible主机清单可以包含由多个主机组构成的组。这通过创建后缀为: children的生机组名称
实现。以下示例创建一个 名为north– america的新组,它包含来自usa和canada组的所有主
机。
(
washington1. example . com
washing ton2. example . com
[canada]
ontar i001. example . com
ontar i002. example. com
 

[north– amer ica: children]
canada
usa
一个组可以同时包含受管主机和子组作为其成员。例如,在上面的清单中,您可以添加一个拥有自
己的受管主机列表的[north- america]部分。这- –列表中的主机将与north- america组从其
子组中继承的其他主机合并
 

通过范围简化主机规格
可以通过指定主机名称或IP地址范围来简化Ansible主机清单。您可以指定数字字母范围。范
围具有下列语法:
[START:END]
范围匹配从START到END (含)的所有值。请思考以下示例:
同. 192.168.[4:列.[0:255]匹配192.168.4.0/22网络中的所有IPv4地址(192.168.4.0到)
192.168.7.255)。
server[01:20].example.com 匹配名为server01 .example.com到server20.example.com的所有主
机。
[a:c].dns.example.com匹配名为a.dns.example.com、b.dns.example.com 和c.dns example.com
的主机。
2001:db8::[a:] 匹配从2001:b::a到2001:db8::f的所有IPv6地址。
 

如果数字范围中包含前置零,其模式中会使用它们。上方第 二个示例不匹配
server1. example . com,但匹配server07. example.com。若要进行演示,可参见以下例
子;它使用范围来简化前面示例中的[usa]和[canada]组定义:
[usa]
washington[1:2]. example . com
[canada]
ontario[01:02] . example . com
 

配置文件优先级
ansible的配置文件名为ansible.cfg,它一般会存在于四个地方: 
●ANSIBLE_ CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量指向配置文件
复制
下划线↓划词鬮译:」 编撒文字。撤除
●./ansible.cfg: 当前L1F日水,即当刚MmJaIste指令目录,如果ANSIBEL_ _CONFIG环境变量未定义, 则优先使
用该配置文件
●~/.ansible.ctg) 当前用户家目录下的一-个隐藏文件,如果当前工作目录下不存在ansible.cfg5置文件, 则会查找
用户家目录下的该隐藏文件
●/etc/ansible/ansible.cfg: 默认配置文件,如果上面两个路径下的ansible.cfg都不存在,则使用该文件
需要说明的是,配置文件中所有的配置项都可以通过环境变量的方式来定义,而
环境变量定义的配置项具有最高优先级,会覆盖掉所有配置文件中的配置项
 

Ansible 配置文件由几个部分组成,每一个分包含由键值对形式定义的设置。每部分的标题由方括号包 含。对于基本操作,可以使用以下两部分:

●[defaults] 部分设置 Ansible 操作默认值

●[privilege_escalation] 配置 Ansible 如何在受管主机上执行特权升级

以下是一个简单的配置文件案例

inventory: 指定清单文件的路径

remote_user: 要在受管主机上登陆的用户名

●ask_pass: 是否提示输入 SSH 密码,如果使用证书登陆,则可以是 false

●become: 连接后是否自动在受管主机上切换用户,通常切换root

●become_method: 切换方法,通常为 sudo

●become_user: 切换到的用户,通常是 root

●become_ask_pass: 是否需要为 become_method 提示输入密码,默认false

配置连接:

        ●Ansbile 需要知道如何与受管主机通信更改配置文件的一个最常见的原因是为了控制 Ansible 使 用什么方法用户来管理受管主机。需要的一些信息包括:

        ●列出受管主机和主机组的清单的位置

        ●列出受管主机和主机组的清单的位置

        ●要在受管主机上使用哪个用户,可以是root用户或者其他非特权用户。

        如果远程用户为非特权用户,需要知道是否应尝试将特权用户升级为 root 以及如何进行升级。

        ●是否提示输入 SSH 密码或 sudo 密码以进行登陆或者获取特权。

修改配置文件:

选择主机和组:

1>配所有主机
        all 或★

2>匹配指定的主机或主机组
        ( 1)匹配单个组
        [student@workstation ansible]$ ansible  dev  —listhosts
        hosts ( 1):
                servera
        (2)匹配单个主机
        [student@workstation ansible]$ ansible  servera  —listhosts
        hosts ( 1):
                servera
        ( 3)匹配多个主机
        [student@workstation ansible]$ ansible  ‘servera,serverc’  —listhosts
                hosts (2):
                        servera
                        serverc
        [student@workstation ansible]$ ansible  ‘servera:serverc’  —list-hosts
                hosts (2)∶
                        servera
                        serverc

        (4)匹配多个组
                [student@workstation ansible]$ ansible  ‘dev:test‘  —list-hosts
                        hosts (2) :
                                servera
                                serverb
                [student@workstation ansible]$ ansible  ‘dev,test‘  —list-hosts
                        hosts ( 2) ∶
                                servera
                                serverb
        (5)匹配不属于任何组的主机
                [student@workstation ansible]$ ansible ungrouped –list-hosts

3>通配符匹配
[student@workstation ansible]$ ansible server* –list-hosts
        hosts ( 4) :
                servera
                serverb
                serverc
                serverd

4>通配符组合匹配
        (1)逻辑非!
                在webs组,但不在test
                ansible ‘webs, !test‘ –list-hosts
        (2)逻辑与&
                同时在webs组和test组
                ansible ‘webs, &test’ –list-hosts

四.运行临时命令

使用临时命令可以快速执行单个 Ansible 命令,你不需要保存下来供以后执行,它们是简单在线操 作,无需编写 playbook。

临时命令格式:

常用模块:

案例

三个模块:

         ●shell: 按 Linux 中的shell那样运行

         ●command: 单纯执行命令

         ●raw: 当目标没有 python 环境

但是尽量避免使用这三个模块,大部分的模块都是幂等的,可以自动进行更改追踪,上面两个模块通常 都会报告 CHANGED 状态

五.Playbook剧本

5.1编写并运行play

playbook:

格式:

yaml 格式通常使用 yml 来作为后缀保存,playbook 使用空格缩进来表示其数据结构,YAML 对于缩进空格数量没有严格的要求,但是有两个最基本规则

        •处于层级结构中同一层级的数据元素,必须具有相同的缩进

        •如果项目属于其他项目的子项,其缩进量必须大于父项

你可以通过添加空行来提高可读性。

注意: 只能使用空格字符用于缩进,不能使用制表符。

如果使用的是vim工具,则可以使用以下指令来改善编辑环境:

playbook 开头的一行由三个短横线组成,这是文档开始的标记,末尾可以使用三个原点作为结束标记, 尽管在实践中经常忽略。

在两个标记之间,会以一个play列表的形式来定义 playbook。YAML 列表中的项目以一个短横线加空格 开头,例如:

play 本身是一个键值集合,同一play 中的键应当使用相同的缩进量,如下:前两个键具有简单的值, 后一个含有三个项目列表作为值:

以下是一个多任务的示例:

play 中任务顺序很重要,因为ansible会按照相同的顺序运行任务

执行playbook

注意:提高输出得详细程度,可以使用:

        •-v 显示任务结果

        •-vv 任务结果和任务配置都会显示

        •-vvv 包含关于受管主机的连接信息

        •-vvvv 增加了连接插件相关的额外详细程度选项,包括受管主机上用于执行脚本的用户,以及所执 行的脚本

安装其他模块:

检查剧本语法

如果没有错误,就没有信息显示。

5.2实施多个play

按照要执行任务的不同的主机,可以将任务分为多个play编排到同一个playbook中。

案例:

playbook 语法

YAML 注释

注释也可以用于提高阅读性。在 YAML 中,编号或 # 符号右侧的所有内容都是注释,如果注释的左侧有 内容,请在该符号前加空格

YAML 字符串

YAML 中的字符串通常不需要放在引号中,即使字符串包含空格字符串可以用双引号或者单引号括起 来。

编写多行字符串有两种方式。可以使用竖线字符表示要保留字符串换行字符。

或者使用 > 符号

YAML 字典 之前看到的以缩进块的形式编写的键值对集合,如:

字典也可以使用花括号括起的内联块格式编写,如下:

YAML 列表

之前也看到过使用普通短横线语法编写的列表:

也可以方括号括起的内联格式,如下:

不过不推荐

过时的写法

通常,建议的写法

原文地址:https://blog.csdn.net/a17783481239/article/details/134530252

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_8099.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注