第一章:认识ansible
一、ansible的安装与介绍
1.Ansible软件及公司
ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。
这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化 的(AWS)云服务管理。
AnsibleWorks成立于2012年,由自动化工具Cobbler及Func的开发者Michael DeHaan创建。其Ansible 平台是一个开源的配置及计算机管理平台。可实现多节点的软件部署,执行特定任务并进行配置管理。
Ansible跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一 个统一的界面来协调所有的IT自动化功能,因此Ansible的系统更加易用,部署更快。受管理的节点无需 安装额外的远程控制软件,由平台通过SSH(Secure SHell)对其进行管理,因此十分方便。其模块支持 JSON等标准输出格式,可采用任何编程语言重写。
Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT 自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。
目前,Ansible已有30万用户,每月下载量接近3万次。其客户包括AppDynamics、Evernote 、MapR 以及金融服务、电信、医疗保健、媒体业的财富500强公司。
项目地址:https://github.com/ansible/ansible
商业版:http://www.ansibleworks.com/
免费版:http://www.ansibleworks.com/docs/
1.1 什么是ansible
Ansible是近年越来越火的基于python开发的一款运维自动化工具,主要帮助运维实现IT工作的自动化、 降低人为操作失误、提高业务自动化率、提高运维工作效率。Ansible是基于模块来运行,它本身没有任 何批量部署的能力,Ansible主要是提供一种批量部署的框架。 常用于软件部署自动化、配置自动化、 管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
1.2 为什么要选择ansible
1. Ansible完全基于Python开发,而 DevOps(促进开发、技术运营和质量保障(QA)部门之间的沟 通、协作与整合)在国内已然是一种趋势,Python被逐渐普及,运维人员自己开发工具的门槛逐渐 降低,因此,方便对Ansible的二次开发
2. Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需
3. 在Ansible去中心化概念(任何人都是一个节点,任何人也都能够成为一个中心),复制操作即可 完成管理配置中心的迁移
4. Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用
1.3 Ansible优缺点
使用ansible这样的自动化配置管理工具,主要的优点是:
轻量级,他不需要去客户端安装agent,更新时,只需要在操作机上进行一次更新即可
批量任务执行可以写成脚本,而且不用分发到远程就可以执行
使用python编写的,维护更简单
支持sudo
缺点:
对于几千台、上万台机器的操作,还不清楚性能、效率情况如何,需要进一步了解
2.Ansible应用领域
Ansible 的编排引擎可以出色地完成配置管理 、 流程控制 、 资源部署等多方面工作 。
1.配置管理
2.服务即时开通 这个领域的工具主要是在数据中心 、 虚拟化环境 、 云计算中快速开通新的主机。
3.应用部署 这个领域的工具重点关注如何尽可能地零停机部署应用。
4.流程编排 流程编排主要是进行部署时候如何保证基础架构中的各种组件协调一致。
3.Ansible架构模式
Ansible 是一个模型驱动的配置管理器, 支持多节点发布、 远程任务执行。 默认使用
SSH 进行远程连接。 无需在被管节点上安装附加软件, 可使用各种编程语言进行扩展.
3.2 Ansible系统架构
Ansible 是基于模块工作的, 本身没有批量部署的能力。 真正具有批量部署的是 Ansible 所运行的模 块, Ansible只是提供一种框架。
Ansible 由以下各部分组成:
ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。
使用者使用ansible或ansible-playbook(会额外读取playbook文件)时,在服务器终端输入ansible的adhoc命令集或playbook后,ansible会遵循预先编排的规则将playbooks逐条拆解为play,再将play组织成 ansible可识别的任务(task)。随后调用任务涉及的所有模块(module)和插件(plugin),根据inventory中定 义的主机列表通过ssh将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果临 时文件执行完毕则自动删除.
3.3 Ansible特性
Ansible 可以实现以下目标:
• 应用代码自动化部署。
• 系统管理配置自动化。
• 支持持续交付自动化。
• 支持云计算 、大数据平台( 如 AWS、 OpenStack 、 CloudStack 、 VMWare 等) 环境。
• 轻量级, 无需在客户端安装 agent, 更新时只需在控制机上进行一次更新即可。
• 批量任务执行可以写成脚本, 不用分发到远程就可以执行。
• 使用 Python 编写,维护更简单, Ruby 语法过于复杂。
• 支持非 root 用户管理操作, 支持 sudo。
4. Ansible安装与配置
4.1 环境介绍说明
4.1.1自定义环境
(1)配置ip
(2)多台主机配置主机名并且确保多台主机能够通过主机名互访
hostnamectl set-hostname server.example.com
(3) 多台主机通过ssh远程连接实现免密登陆
#ssh-keygen -t rsa -P '' -q -f ~/.ssh/id_rsa
(4) 如果是通过普通用户管理受控主机,需要通过sudo提权。
4.1.2 在控制主机上安装ansible
4.2 RH294学习环境 root Asimov
root -- Asimov kiosk-- redhat
用于实践学习活动的主要计算机系统是workstationo另有四台计算机供 学员用于这些活动:serverax serverb、serverc和serverd。所有这五个系统都在 lab.example.com DNS域内。
所有学员计算机系统都有一个标准用户帐户student,其密码为student。所有学员系统的root 密码都是 redhat。
bastion的主要功能是充当连接学员计算机的网络和课堂网络之间的路由器。如果bastion宕机,则其他学 员计算机将只能访问各个学员网络上的系统。
课堂中有几个系统提供支持服务。content.example.com和materials.example.com这两台服务器提供 实践活动中使用的软件和实验材料。有关如何使用这些服务器的信息将在这些活动的说明中提供。这些信息 由classroom.example.com虚拟机提供。为确保正确使用实验环境,classroom和bastion应始终处于 运行状态。
4.2.1安装红帽Ansible
二:使用静态清单文件指定受管主机
构建ansible主机清单
1.定义主机清单
清单中定义ansible将要管理的一批主机,这些主机也可以分配到组中,以进行集中管理。组中也可以包 含子组,一台主机也可以是多个组中的成员。清单还可以设置应用到它所定义的主机和组的变量。
2.定义方式
可以通过两种方式定义主机清单。静态主机清单可以通过文本文件定义。动态主机清单可以根据需要使 用外部信息提供程序通过脚本或其他程序生成。
3.使用静态主机清单指定受管主机(默认)
静态主机清单文件是指定的ansible目标受管主机的文本文件。文件编辑格式有多种格式INI和YAML格 式。INI格式较为常见建议使用INI格式编辑。
4.验证清单
5.自定义主机清单
在某个工作目录下创建一个名为inventory的自定义静态主机清单文件。
选择主机和组:
1>匹配所有主机
all 或者*
2>匹配指定的主机或者主机组
(1)匹配单个组
(2)匹配单个主机
(3)匹配多个主机
(4)匹配多个组
(5)匹配不属于任何组的主机 ungrouped 注:可以用:来取代逗号,不过逗号是首选分隔符,特别是将ipv6地址用作受管主机名称时
3>通配符匹配
*
ansible server* --list-hosts
4>通配符组合匹配
5>正则表达式匹配
ansible "~(web|db).*\.example\.com" -m ping
注:
.任意单个字符
"~"开始表示正则匹配
* 匹配前面的子表达式零次或多次
\转义
总结
三:管理ansible的配置文件
1.配置ansible
通过修改ansible配置文件中的设置来定义ansible安装行为。通过控制节点上多个可能位置之一选择相 应位置的配置文件。
2.根据优先级选择执行ansible配置文件
执行ansible命令根据所在目录匹配相关ansible配置文件,实践中一般使用ansible命令的目录中创建 ansible.cfg文件,此目录中也将包含任何你的ansible项目使用的文件,有清单或者主机清单。
ANSIBLE_CONFIG(ansible环境变量中指向的配置文件)---->./ansible.cfg ---->~/.ansible.cfg ----> /etc/ansible/ansible.cfg
#ansible --version 查看当前使用的是哪个ansible.cfg配置文件
3.管理配置文件中的设置
配置文件由几部分组成,每部分含有以键值对形式定义的设置。部分的标题一方括号括起。重点需要了 解以下两部分:
案例一:ansible使用ssh连接受管主机,一般不建议用管理用户,要求通过普通用 户student进行链接
案例二: 关闭主机秘钥验证(别远程主机的秘钥验证关闭)
案例三:主机免密登陆
案例四:远程用户sudo提权
案例五:特权升级。 在受管主机中通过sudo提权可在ansible配置中进行优化,开启远程用户在受管主机中执行特权升级。 控制主机执行特权命令不需要指定sudo命令
四:ad-hoc与模块帮助查询
1.ansible的基本用法
ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分, 默认不指定模块时,使用的是command模块。
ansible运行临时命令语法
#ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
2.主机联通性测试