自动化运维工具
Puppet
Puppet是历史悠久的运维⼯具之⼀。它是⼀种基础架构即代码(IaC)⼯具,使⽤户可以定 义其
基础架构所需的状态,并使系统⾃动化以实现相同状态。
Puppet可监视⽤户的所有系统,并防⽌任何偏离已定义状态的情况。从简单的⼯作流程⾃ 动化到
基础架构配置和合规性,Puppet都能做到。
Puppet通过让客户端检查主站的更新清单来更新节点的配置,然后从主站服务器拉下新的 配置。
由于这个特点,Puppet⽐这⾥提到的许多其他⼯具更倾向于系统管理员。
特点:
(1)通过PuppetLabs建⽴良好的⽀持社区
(2)它有最成熟的接⼝,⼏乎在每个操作系统上运⾏
(3)简单的安装和初始设置
(4)在这个空间中最完整的Web UI (5)强⼤的报告功能
特点:
Puppet是早期的Linux自动化运维工具,是一种LINUX、WINDOWS、UNIX平台的集中配置管理系
统,到现在已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于Ruby语言编写。
是最典型的C/S结构,需要安装服务端和客户端 。
Puppet采用C/S星状的结构,所有的客户端和一个或者多个服务器交互,每个客户端周期地(默认
半个小时)向服务器发送请求,获得最新的配置信息,保证和配置信息同步。
每个Puppet客户端周期地连接一次服务器,下载最新的配置文件,并且严格按照配置文件来配置客
户端。配置完成后,Puppet客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一
个消息。
Puppet适用于服务器管理的整个过程,比如初始安装、配置、更新等
优缺点:
模块由Ruby或Ruby子集编写
push命令可以即可触发变更
Web界面生成处理报表、资源清单、实时节点管理
代理运行端进行详细、深入的报告和对节点进行配置
相对其他工具较复杂,需学习Puppet的DSL或Ruby
安装过程缺少错误校验和产生错误报表
SaltStack
Salt由Salt Master和被称为Salt Minions的客户端组成,后者作为代理在每个节点机器上运⾏。
Puppet的⼯作⽅式是由节点请求更新,⽽Salt的⼯作⽅式与此相反,SaltMaster将所有配置推送
给所有客户机。
Salt还可以在多主机配置中运⾏。如果⼀个Salt主服务器发⽣故障,代理将连接到配置中列 出的另
⼀个主服务器。这⼀功能提⾼了整个系统的整体可⽤性和冗余度。
Salt的另⼀个好处是,它允许⼀次并⾏执⾏多个命令。这些命令通过AES(⾼级加密标准) 进⾏加
密,并通过SSH协议推送给客户端节点。
特点:
(1) 实时交互 所有的minion机器同时执⾏命令
(2)no freeloader
每⼀台salt minion上都装有执⾏master传来的命令所需要的程序,saltmaster发送命令的时 候,
只需要指明哪台机器做什么,所有的saltminion都会收到这条命令,然后判断⾃⼰是否符 合执⾏条
件,然后再将执⾏结果返回给saltmaster。 ⽂档中,freeloader的意思是没有揩油/吃⽩⻝的⼈,
所有的saltminion机器都会完成⾃⼰ 的指令,⽆需saltmaster帮助,saltminion⾃⼰完成,往往⽐
saltmaster帮忙去做,做的更好。
(3)可测量性 salt为⾼性能和可测量性⽽⽣。
salt的master和minion的信息传输,是由基于ZeroMQ 或者raw TCP在saltmaster和saltminion之
间建⽴的⼀个持久性的数据管道来实现的。这相对于其它传输机制,有更好的性 能优势。使⽤
MessagePack使得消息⾮常⾼效地被序列化。 salt内部使⽤python Tornado作为异步⽹络库,
并发和多线程也都采⽤了先进的技术。
(4)salt可以在任意python能够运⾏的环境下运⾏ 只要⽀持任何⽹络协议的就⾏。 salt 命令被发送
到 代理minion机器,将协议转换为本地写协议,再发送给salt minion机 器,返回的数据经转以后
存储在数据设备中,再返回
(5)⾃动化管理
(6)可扩展性强
特点:
SaltStack和Puppet一样,也是C/S模式,需要安装服务端和客户端,基于Python编写,加入了MQ
消息同步,可以使执行命令和执行结果高效返回,但其执行过程需要等待客户端全部返回,如果客
户端没有及时返回或者没有响应的话,可能会导致部分机器没有执行结果。
优缺点:
状态文件可用简单YAML配置模块或复杂的Python/PyDSL脚本
与客户端可以基于SSH或在被管节点安装代理
Web界面可看到运行的工作、minion状态、事件日志、可在客户端执行命令
扩展能力极强
Web界面像毒药竞争产品不稳定与相对不完善
缺乏生成深度报告的能力
Ansible
Ansible是当下⽕热的⾃动化运维⼯具,它基于模块⼯作的,本身没有批量部署的能⼒。真 正具有
批量部署的是ansible所运⾏的模块,通过集成⾮常丰富的模块,它可以实现各种管 理任务,如批
量系统配置、批量程序部署、批量运⾏命令等。 重要的是,Ansible操作简单,即使新⼿也可以轻
松上⼿,同时⼜提供⾮常丰富的功能,在 运维领域,⼏乎可以做任何事。 特点: (1)轻量级,⽆需
在客户端安装agent,更新时只需在操作机上进⾏⼀次更新即可
(2)批量任务执⾏可以写成脚本,⽽且不⽤分发到远程就可以执⾏。
(3)使⽤Python编写,维护更简单
(4)⽀持sudo (5)模块化
(6)Ansible社区⾮常活跃。Ansible本身提供的模块⾮常丰富,第三⽅资源多
特点:
Ansible和SaltStack一样是基于Python开发,Ansible只需要在一台普通的服务器上运行即可,不需
要在客户端服务器上安装客户端。因为Ansible基于SSH远程管理,而Linux服务器大部分都离不开
SSH,所以Ansible不需要为配置添加额外的支持。
Ansible安装使用都很简单,而且基于上千个插件和模块,实现各种软件、平台、版本的管理,支持
虚拟容器多层级的部署。
有时候会觉得Ansible比SaltStack执行效率慢,其实并不是软件本身的问题,二是由于SSH服务慢,
可以通过优化SSH连接速度和使用Ansible加速模块提高效率.
优缺点:
模块可以用任何语言开发
备管节点不需要安装代理软件
有Web管理界面、可配置用户、组、资源清单和执行Playbook
安装、运行极其简单
对备管理节点为Windows有待加强
Web管理界面是内置的Ansible的一部分
需导入资源清单
执行效率较低
Chef
Chef是配置管理的开源⼯具,它能使每个环境与基础设施中的相同配置保持⼀致。它还有 ⼀个庞
⼤的⽀持社区,有⼤量的⽂档和指导。Chef主控和节点软件在Unix/Linux系统上都可 以使⽤,但
只有客户端和⼯作站版本可以部署在Windows服务器上。
特点:
(1)丰富的模块和配置配⽅集合
(2)代码驱动的⽅法为您的配置提供更多的控制和灵活性
(3)围绕Git提供强⼤的版本控制功能
(4)“Knife”⼯具(使⽤SSH从⼯作站部署代理)减轻了安装负担
技术特点对比:
名称 | Puppet | SaltStack | SaltStack |
---|
开发语言 | Ruby | Python | Python |
客户端 | 有 | 有 | 无 |
二次开发 | 不支持 | 支持 | 支持 |
通信验证 | 是 | 是 | 是 |
通信加密 | 标准SSL协议 | AES加密 | OpenSSH |
配置文件格式 | Ruby语法格式 | YAML | YAML |
Ansible是什么
Ansible是⼀款⾃动化运维⼯具,基于Python开发,集合了众多运维⼯具(puppet、cfengine、
chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运⾏命令等功能。
Ansible是基于模块⼯作的,本身没有批量部署的能⼒。
真正具有批量部署的是Ansible所运⾏的模块 Ansible只是提供⼀种框架。
主要包括:
(1) 连接插件connection plugins:负责和被监控端实现通信;
(2) host inventory:指定操作的主机,是⼀个配置⽂件⾥⾯定义监控的主机;
(3) 各种模块核⼼模块、command模块、⾃定义模块;
(4) 借助于插件完成记录⽇志邮件等功能;
(5) playbook:剧本执⾏多个任务时,⾮必需可以让节点⼀次性运⾏多个任务
Ansible⽆需代理
Ansible 围绕⽆代理架构构建。
通常⽽⾔,Ansible 通过 OpenSSH 或 WinRM 连接它所管理的主机并且运⾏任务,⽅法通常是将
称 为 Ansible 模块的⼩程序推送⾄这些主机。这些程序⽤于将系统置于需要的特定状态。
在Ansible运⾏完其任务后,推送的所有模块都会被删除。
Ansible 不需要批准使⽤任何特殊代理,然后再部署到受管主机上。由于没有代理,也不 需要额外
的⾃定义安全基础架构
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 ⾃动化语⾔围绕简单易读的声明性⽂本⽂件来构建。正确编写的 Ansible Playbook可以清
楚地记录你的⼯作⾃动化。
Ansible 是⼀种要求状态引擎。它通过表达你所希望系统处于何种状态来解决如何⾃动化IT部署的
问题。Ansible 的⽬标是通过仅执⾏必要的更改,使系统处于所需的状态。试图将 Ansible 视为脚
本 语⾔并⾮正确的做法。
安装Ansible
控制节点
Ansible 易于安装。 Ansible 软件只需要安装到要运⾏它的⼀个(或多个)控制节点上。
由 Ansible管理的主机不需要安装 Ansible。 对控制节点的要求: 控制节点应是Linux或UNIX系
统。不⽀持将Windows⽤作控制节点,但Windows系统可以是受 管主机。
控制节点需要安装Python3(版本3.5或以上)或Python2(版本2.7或以上)。 如果操作系统是红
帽8.0,Ansible 2.9可以⾃动使⽤ platformpython 软件包,该软件包⽀持使 ⽤Python的系统实⽤
程序。你不需要从 AppStream安装python37或python27软件包。
[root@localhost ~]
Installed Packages
platform-python.x86_64 3.6.8-33.el8 @anaconda
[root@localhost ~]
受管主机
Ansible的⼀⼤优点是受管主机不需要安装特殊代理。Ansible控制节点使⽤标准的⽹络协议连接受
管主机,从⽽确保系统处于指定的状态。 受管主机可能要满⾜⼀些要求,具体取决于控制节点连
接它们的⽅式以及它们要运⾏的模块。
Linux和UNIX受管主机需要安装有Python2(版本2.6或以上)或Python3(版本3.5或以上),这
样 才能运⾏⼤部分的模块。 对于红帽8,可以启⽤并安装python36应⽤流(或python27应⽤流)
yum module install python36
如果受管主机上启⽤了SELinux,还需要确保安装python3libselinux软件包,然后才能使⽤与任何 复制、⽂件或模板功能相关的模块。所以在⼯作的时候,应当把SELinux功能关闭。
基于Windows的受管主机
Ansible有许多专⻔为Windows系统设计的模块。
这些模块列在官⽅⽂档部分中。 ⼤部分专⻔为Windows受管主机设计的模块需要在受管主机上安
装PowerShell 3.0或更⾼版本,⽽ 不是安装Python。此外,受管主机也需要配置PowerShell远程
连接。Ansible还要求⾄少将.NET Framework 4.0或更⾼版本安装在Windows受管主机上。
受管⽹络设备
Ansible还可以配置受管⽹络设备,例如路由器和交换机。Ansible包含⼤量专⻔为此⽬的⽽设计的
模块。其中包括对Cisco IOS、IOS XR和NXOS的⽀持;Juniper Junos;Arsta EOS;以及基于VyOS的⽹络设备等。 我们可以使⽤为服务器编写playbook时使⽤的相同基本技术为⽹络设备编写
Ansible Playbook。由 于⼤多数⽹络设备⽆法运⾏Python,因此Ansible在控制节点上运⾏⽹络模
块,⽽不是在受管主机上 运⾏。特殊连接⽅法也⽤于与⽹络设备通信,通常使⽤SSH上的CLI、
SSH上的XML或HTTP(S)上 的API。
安装Ansible
环境说明:
主机名称 | IP | 相应环境 | 系统 |
---|
localhost | 192.168.141.144 | Ansible | CentOS8 |
//使用阿里源
[root@localhost ~]
[root@localhost yum.repos.d]
[root@localhost yum.repos.d]
ps://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
//下载platform-python
[root@localhost ~]
//安装ansible
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Sep 10 2021, 09:13:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
[root@localhost ~]
//通过使用setup模块验证localhost上的ansible_python_version
[root@localhost ~]
"ansible_python_version": "3.6.8",
[root@localhost ~]
//查看ansbile配置环境
[root@Masters ~]
localhost | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.141.144"
],
"ansible_all_ipv6_addresses": [
"fe80::216:3eff:fe09:aed9"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "07/22/2020",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
"BOOT_IMAGE": "(hd0,msdos1)/vmlinuz-4.18.0-257.el8.x86_64",
"biosdevname": "0",
"crashkernel": "auto",
"net.ifnames": "0",
"quiet": true,
"rd.lvm.lv": "cs_llb/swap",
"resume": "/dev/mapper/cs_llb-swap",
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)