目录
一、运维自动化工具有哪些
- Ansible:Ansible是一种基于Python开发的自动化工具,用于配置管理、应用部署和任务自动化。它使用SSH协议来与远程主机通信,并使用Playbooks来定义任务和配置
- Puppet:Puppet是一种基于模型驱动的自动化工具,用于配置管理和自动化部署。它使用Puppet语言来描述系统配置,并通过代理在远程主机上执行配置
- Chef:Chef是另一种配置管理工具,它使用Ruby语言来定义系统配置,并通过Chef客户端在远程主机上执行配置
- SaltStack:SaltStack是一种事件驱动的自动化工具,用于配置管理、远程执行和监控。它使用Python语言和ZeroMQ消息队列来实现高效的通信和自动化
二、Ansible 概述
1、Ansible 概念
- Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现
- Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作
- Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块, 比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等
- Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务
- 使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
- Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态, 它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的
- Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用
2、Ansible 特点
- 部署简单,只需在主控端部署Ansible环境, 被控端无需做任何操作
- 默认使用SSH协议设备进行管理
- 主从集中化管理
- 配置简单、功能强大、扩张性强
- 支持API及自定义模块,可以通过Pyhton轻松扩展
- 通过playbooks 来定制强大的配置、状态管理
- 对云计算平台、大数据都有很好的支持
3、Ansible 工作流程
Ansible 基于模块化工作,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块(Modules)
Ansible 只是提供了一种框架,在 Ansible 管理体系中,存在着管理节点(Control Node)和被管理节点(Managed Node)两种角色
被管理节点通常称之为资产,会放在主机清单(Inventory)文件中,Inventory 其实就是由 Ansible 所管理的主机形成的。在管理节点上,Ansible 将 Ad-Hoc(批量执行单条命令,即单模块)或者 Playbook(任务剧本)转化为 Python 脚本,最终通过 ssh 网络协议将这些 Python 脚本传递到被管理节点,在被管理服务器上依次执行,并且会实时将结果返回给管理节点,执行完后进行清理模块或命令。返回结果顺序根据网络、被管理服务器本身性能等因素有关
三、安装部署Ansible
1、环境部署
节点名称 | IP | 是否安装Ansible |
---|---|---|
control 管理节点 | 172.16.88.44 | 是 |
managed-1 被管理节点 | 172.16.88.55 | 否 |
managed-2 被管理节点 | 172.16.88.66 | 否 |
(1)关闭所有设备的防火墙和核心防护
systemctl stop firewalld
setenforce 0
(2)修改三台设备的主机名,方便区分
[root@localhost ~]#hostnamectl set-hostname control
[root@localhost ~]#bash
[root@localhost ~]#hostnamectl set-hostname managed-1
[root@localhost ~]#bash
[root@localhost ~]#hostnamectl set-hostname managed-2
[root@localhost ~]#bash
(3)管理节点配置本地的/etc/hosts文件
echo "172.16.88.44 control" >> /etc/hosts
echo "172.16.88.55 managed-1" >> /etc/hosts
echo "172.16.88.66 managed-2" >> /etc/hosts
2、管理节点安装 Ansible
yum install -y epel-release #先安装epel源
yum install -y ansible #再安装ansible
ansible --version #查看ansible版本
3、查看Ansible相关文件
tree /etc/ansible/ #查看ansible目录结构
ll /etc/ansible/ #查看ansible相关文件详细信息
4、配置主机清单
vim /etc/ansible/hosts
[webs] #配置组名
172.16.88.55 #组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
[dbs]
172.16.88.66
5、免密管理 ssh-keygen
用于生成SSH密钥对的命令行工具。它通常用于创建公钥和私钥,以便进行安全的SSH通信
#生成 SSH 密钥对
ssh-keygen -t rsa # 一直回车
# rsa表示生成RSA密钥对,RSA是一种非对称加密算法
ls .ssh/
# id_rsa 是私钥文件;id_rsa.pub 是公钥文件
#ssh登录到远程管理节点,在ssh客户端即control服务器上生成known_hosts文件
ssh root@172.16.88.55
ssh root@172.16.88.66
ls .ssh/
#known_hosts 文件存放SSH服务器的公钥
#将本地主机上的SSH公钥复制到远程主机
sshpass -p '123' ssh-copy-id root@172.16.88.55
sshpass -p '123' ssh-copy-id root@172.16.88.66
5.1、测试连通性
(1)测试本机
ansible localhost -m ping
(2)分别测试 managed-1 和 mansged-2,观察返回信息
ansible webs -m ping
ansible dbs -m ping
返回结果的颜色:
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功并且对目标主机做变更
- 红色:执行失败
5.2、简洁输出
ansible 17