一.ansible简单介绍
ansible是新出现的自动化运维工具,基于Python开发,集合了众多老牌运维工(puppet、cfengine、chef、func、 fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。 主要包括:
(1)连接插件connection plugins:负责和被管控端实现通信;
(2) host inventory:指定操作的主机,是一个配置文件里面定义管控的主机;
(3)各种模块核心模块、command模块、自定义模块;
(4)借助于插件完成记录日志邮件等功能;
(5) playbook:剧本执行多个任务时,可以让被管控端一次性运行多 个任务。
◆(1) no agents:不需要在被管控主机上安装任何客户端;
◆(2)noserver:无服务器端,使用时直接运行命令即可;
作机.上进行一次更新即可;
◆(3) modules in any languages:基于模块工作,可使用任意语言开发模块;
◆(4) yaml,not code:使用yaml语言定制剧本playbook;
◆(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 (主机群)分类,管理节点通过各类模块实现相应的操作—单个模块,单条命令的批量执行,我们可以称之为ad–hoc;
3、管理节点可以通过playbooks实现多个task的集合实现一类功能,如web服 务的安装部署、数据库服务器的批量备份等。playbooks我们可 以简单的理解为,系统通过组合多条ad–hoc操作的配置文件。Ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理,它 底层是通过paramiko 来实现的。
二.Ansible的安装
三.主机清单
定义清单
清单定义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 和db–servers。
[webservers] .
web1. example . com
web2. example . com
192.0.2.42
[db–servers]
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 如何在受管主机上执行特权升级
●ask_pass: 是否提示输入 SSH 密码,如果使用证书登陆,则可以是 false。
●become: 连接后是否自动在受管主机上切换用户,通常切换为 root。
●become_user: 切换到的用户,通常是 root。
●become_ask_pass: 是否需要为 become_method 提示输入密码,默认为 false。
配置连接:
●Ansbile 需要知道如何与受管主机通信,更改配置文件的一个最常见的原因是为了控制 Ansible 使 用什么方法和用户来管理受管主机。需要的一些信息包括:
●列出受管主机和主机组的清单的位置
●列出受管主机和主机组的清单的位置
●要在受管主机上使用哪个用户,可以是root用户或者其他非特权用户。
如果远程用户为非特权用户,需要知道是否应尝试将特权用户升级为 root 以及如何进行升级。
●是否提示输入 SSH 密码或 sudo 密码以进行登陆或者获取特权。
修改配置文件:
选择主机和组:
1>配所有主机
all 或★
2>匹配指定的主机或主机组
( 1)匹配单个组
[student@workstation ansible]$ ansible dev —list–hosts
hosts ( 1):
servera
(2)匹配单个主机
[student@workstation ansible]$ ansible servera —list–hosts
hosts ( 1):
servera
( 3)匹配多个主机
[student@workstation ansible]$ ansible ‘servera,serverc’ —list–hosts
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。
临时命令格式:
常用模块:
案例:
三个模块:
●command: 单纯执行命令
但是尽量避免使用这三个模块,大部分的模块都是幂等的,可以自动进行更改追踪,上面两个模块通常 都会报告 CHANGED 状态。
五.Playbook剧本
5.1编写并运行play
playbook:
格式:
yaml 格式通常使用 yml 来作为后缀保存,playbook 使用空格缩进来表示其数据结构,YAML 对于缩进 的空格数量没有严格的要求,但是有两个最基本的规则:
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进行投诉反馈,一经查实,立即删除!