Ansible
一、简介
Ansible的作用和特点
- Ansible是一款开源自动化平台
- 是一种简单的自动化语言,能够在Ansible Playbook中完美地描述IT应用基础架构
- 也是一个自动化引擎,可运行Ansible Playbook
- ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是ansible运行的模块,ansible只是提供一个框架
- 特点
- yaml语言编写palybook,简单易懂,可以通过playbook(剧本)进行多个任务的编排
- 可以配置管理、工作流自动化还能管理网络设备
- 无需代理,Anisble通过OpenSSH或WinRM连接所管理的主机并运行任务。后续会详细介绍
- 基于ssh工作
- 可实现多级指挥
- 具有幂等性,一种操作重复多次执行结果相同
- 幂等性:任意次执行所产生的影响均与一次执行的影响相同
- command,shell,script默认不带幂等性
- ansible的优缺点(考试不考,面试可能会问)
- 优点:跨平台支持、人类可读的自动化、完美描述应用、轻松管理版本控制、支持动态清单、编排可与其他系统轻松集成
- 缺点:红帽的书怎么可能说ansible的缺点…哈哈哈哈
Ansible的架构
Ansible的基本架构
Ansible的基本概念
-
核心组件
-
ansbile:核心程序
-
modules:包括ansible自带的核心模块以及自定义模块
-
plugins:完成模块功能的补充,包括连接插件,邮箱插件
-
palybooks:剧本,定义ansbile多任务配置文件,由ansible自动执行
-
inventory:定义ansbile管理的主机清单
-
connection plugins:负责和被监控端实现通信
-
-
Ansible分为控制端(控制节点)和被控制端(受管主机)
- 控制端:必须是Linux 考试环境为workstation
- 被控端:可以是linux、windows、路由器等 考试环境为server[a-d]
执行过程(面试高频)
-
加载自己的配置文件,默认为/etc/ansible/ansible.cfg
-
加载自己对应的模块文件
-
通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器
-
对应执行用户的家目录的.ansible/tmp/xx.py文件
-
给文件+x执行权限
-
执行并将返回结果,删除临时py文件,sleep 0 退出
-
注:
- 重点明确:Ansible围绕一种无代理架构构建,在控制节点上安装Anisble,且客户端不需要任何特殊的代理软件
二、Ansible部署
- 考试环境默认已经配置好了yum源,直接yum install。
- 自己虚拟机安装需要去配源
yum install -y ansible
Ansible的三大文件
1、清单文件
-
定义Ansible将要管理的一批主机
-
分类
-
静态清单:人为的写入被管理端的IP或主机名称(INI样式,每行一个)
-
动态清单:通过脚本文件解析出来的IP或主机名称
-
-
默认主机清单配置文件为/etc/ansible/hosts,可在该文件中进行服务器分组/主机分组
all
主机组含有清单中明确列出的每一个主机ungrouped
主机组含有清单中明确列出、但不属于任何其他组的每一个主机
-
查看/配置当前主机清单的位置
ansible --version
查看当前配置文件的位置,过滤/配置inventory
字段,默认为/etc/ansible/hosts
[student@workstation ~]$ ansible --version|grep .cfg config file = /etc/ansible/ansible.cfg [student@workstation ansible]$ grep 'inventory' /etc/ansible/ansible.cfg #inventory = /etc/ansible/hosts ...
-
定义嵌套组
- Ansible主机清单可以包含由多个主机组构成的组
- 可以通过创建后缀为
:children
的主机组名称来实现
- 可以通过创建后缀为
- 例
# vim /etc/ansible/hosts [dev] servera [test] serverb [webservers:children] dev test # 此时webservers组既包含了dev组内的主机,也包含了test组内的主机
- Ansible主机清单可以包含由多个主机组构成的组
-
定义范围组
- 语法:
[START:END]
范围匹配从START到END的所有值 - 例:
192.168.[1:4].[0:255] #此例包含192.169.1.0到192.168.7.255中所有的IP地址 server[01:20] # 此例包含server01到server20,注意此例不匹配server1-server9 [a:c].com # 此例包含a.com到c.com
- 语法:
-
验证清单
ansible 主机名/组名 --list-host
,-i指定清单文件- 因为student没有直接修改默认清单的权限,所以自己新建一个
[student@workstation ~]$ mkdir ansible [student@workstation ~]$ cd ansible/ [student@workstation ansible]$ vim inventory [student@workstation ansible]$ ansible -i inventory webservers --list-host hosts (2): servera serverb
-
补充
- 其他静态清单的写法
定义端口 10.1.