8.2 KiB
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自动化运维工具对比
1.2ansible介绍
什么是Ansible?
Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 Ansible基于模块工作,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架,包括如下: 连接插件connection plugins:负责和被监控端实现通信; 主机清单host inventory:指定操作的主机,是一个配置文件里面定义监控的主机。 各种模块核心模块、command模块、自定义模块。 借助于插件完成记录日志邮件等功能; playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
工作流程图
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 Junos;Arsta 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
- 配置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
三、清单文件
定义清单:
在清单文件里定义Ansible将要管理的一批主机,默认的清单文件是/etc/ansible/ansible.cfg。 可以在清单文件里定义“组”,可以集中管理,组也可以包含子组,主机也可以是多个组的成员。 清单还可以设置应用到它所定义的主机和组的变量。 2种定义方式:
静态主机清单,通过文本文件定义,支持多种格式编写,包括INI样式或YAML。 动态主机清单,使用外部信息提供程序通过脚本或其他程序来生成。
/etc/ansible/hosts 默认配置主机清单位置
3.1自定义主机清单
/etc/ansible/hosts是默认清单文件,现实中不使用,应该自定义一个新的清单文件,并在配置文件里指定新清单文件位置。
1.生成一个新静态清单文件inventory.ini,其里面定义一个组为mq,管理192.168.17.130主机。
2.修改配置文件,将清单文件改成新定义的这个
3.查看清单文件里所有主机,忽略组的概念。