上传文件至 /

This commit is contained in:
yaml 2025-06-26 19:46:37 +08:00
commit dbf58adafa

View File

@ -0,0 +1,180 @@
# ansible自动化运维工具
## 一、发展起源
常见自动化运维工具:
Puppet较为早期的自动化运维工具现在发展非常成熟可以批量管理远程服务器模块丰富配置复杂基于Ruby语言编写。是最典型的C/S结构需要安装服务端和客户端 。相比ansible来说使用上比较繁琐。
SaltStack也是C/S模式需要安装服务端和客户端基于Python编写更适合大型企业使用。
Chef是配置管理的开源工具它能使每个环境与基础设施中的相同配置保持一致。
ansible的出现
自动化运维工具还有很多比如Cfengine、Capistrano、Fabric、Function、Plain SSH有各自的优缺点而ansible就是集结了它们的优点于一身在2012年3月诞生这也是它的创始人Michael DeHaan打造它的主要原因。
### 1.1自动化运维工具对比
![image-20240613204454736](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240613204454736.png)
### 1.2ansible介绍
什么是Ansible?
Ansible是一款自动化运维工具基于Python开发集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible基于模块工作本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块Ansible只是提供一种框架包括如下
连接插件connection plugins负责和被监控端实现通信;
主机清单host inventory指定操作的主机是一个配置文件里面定义监控的主机。
各种模块核心模块、command模块、自定义模块。
借助于插件完成记录日志邮件等功能;
playbook剧本执行多个任务时非必需可以让节点一次性运行多个任务。
**工作流程图**
![image-20240613204615843](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240613204615843.png)
Ansible无需代理
1、Ansible围绕无代理架构构建通过OpenSSH或WinRM连接它所管理的主机并且运行任务方法通常是将称为Ansible模块的小程序推送至这些主机。这些程序用于将系统置于需要的特定状态。在Ansible运行完其任务后推送的所有模块都会被删除。
2、Ansible不需要批准使用任何特殊代理然后再部署到受管主机上。由于没有代理也不需要额外的定义安全基础架构
优点∶
(1)跨平台支持Ansible提供Linux、Windows、UNIX和网络设备的无代理支持适用于物理、虚拟、云和容器环境。
(2)人类可读的自动化Ansible Playbook采用YAML文本文件编写易于阅读有助于确保所有人都能理解它们的用途。
(3)完美描述应用可以通过Ansible Playbook进行每种更改并描述和记录应用环境的每一个方面。
(4)轻松管理版本控制Ansible Playbook和项目是纯文本。它们可以视作源代码放在现有版本控制系统中。
(5)支持动态清单可以从外部来源动态更新Ansible管理的计算机列表随时获取所有受管服务器的当前正确列表不受基础架构或位置的影响。
(6)编排可与其他系统轻松集成能够利用环境中现有的HP SA、Puppet、Jenkins、红帽卫星和其他系统并且集成到Ansible工作流中。
特点:
- Ansible的设计宗旨是工具易用自动化易写易读。所以在创建自动化时我们应追求简单化。
- Ansible自动化语言围绕简单易读的声明性文本文件来构建。正确编写的Ansible Playbook可以清楚地记录你的工作自动化。
- Ansible是一种要求状态引擎。它通过表达你所希望系统处于何种状态来解决如何自动化IT部署的问题。
- Ansible的目标是通过仅执行必要的更改使系统处于所需的状态。试图将Ansible视为脚本语言并非正确的做法。
## 二、安装流程
**基本了解:**
- Ansible只需安装到控制节点上受控机不需要安装Ansible。
- 主控机对受控机需能ssh通信。
**对控制节点的要求:**
1.控制节点应是Linux或UNIX系统。不支持将Windows用作控制节点但Windows系统可以是受管主机。
2.控制节点需要安装Python3(版本3.5或以上或Python2(版本2.7或以上)。
3.需要epel源。
4.关闭防火墙和selinux。
**对受控节点的要求:**
1.受管主机可能要满足一些要求,具体取决于控制节点连接它们的方式以及它们要运行的模块。
2.Linux和UNIX受管主机需安装Python2(版本2.6或以上或Python3(版本3.5或以上)确保可以运行大部分的ansible模块。
3关闭防火墙和selinux。
**受控机类型:**
网络设备:
- Ansible还可以配置受管网络设备例如路由器和交换机当收管设备为网络设备时需要用专门为此设计的模块。其中包括对Cisco IOS、IOS XR和NX-OS的支持Juniper JunosArsta EOS以及基于VyOS的网络设备等。
- 大多数网络设备无法运行Python所以Ansible在控制节点上运行网络模块而不是在受管主机上运行。特殊连接方法也用于与网络设备通信通常使用SSH上的CLI、SSH上的XML或HTTP(S)上的API。
**基于Windows的受管主机**
大部分专门为Windows受管主机设计的模块需要在受管主机上安装PowerShell 3.0或更高版本而不是安装Python。
受管主机也需要配置PowerShell远程连接。Ansible还要求至少将.NET Framework4.0或更高版本安装在Windows受管主机上。
### 2.1 安装清单
主机
ansible 192.168.17.130 centos7.9
web1 192.168.17.131 centos7.9
web2 192.168.17.132 centos7.9
1. 配置yum源。ansible服务需要epel源来安装大家根据各自的操作系统配置yum源和epel源我这里配置的是阿里云的源。
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo epel源码
2.关闭防火墙和selinux
systemctl stop firewalld
systemctl enanle firewalld
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
3.主机器上安装ansible
yum -y install ansible
![image-20240615154415998](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615154415998.png)
## 三、清单文件
定义清单:
在清单文件里定义Ansible将要管理的一批主机默认的清单文件是/etc/ansible/ansible.cfg。
可以在清单文件里定义“组”,可以集中管理,组也可以包含子组,主机也可以是多个组的成员。
清单还可以设置应用到它所定义的主机和组的变量。
2种定义方式
静态主机清单通过文本文件定义支持多种格式编写包括INI样式或YAML。
动态主机清单,使用外部信息提供程序通过脚本或其他程序来生成。
/etc/ansible/hosts 默认配置主机清单位置
![image-20240615155009067](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615155009067.png)
### 3.1自定义主机清单
/etc/ansible/hosts是默认清单文件现实中不使用应该自定义一个新的清单文件并在配置文件里指定新清单文件位置。
1.生成一个新静态清单文件inventory.ini其里面定义一个组为mq管理192.168.17.130主机。
![image-20240615155913498](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615155913498.png)
![image-20240615155931920](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615155931920.png)
2.修改配置文件,将清单文件改成新定义的这个
![image-20240615160114356](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615160114356.png)
![image-20240615160242643](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615160242643.png)
3.查看清单文件里所有主机,忽略组的概念。
![image-20240615160617835](C:\Users\33163\AppData\Roaming\Typora\typora-user-images\image-20240615160617835.png)