- ansible是一个开源的自动化工具(GPLV3 开源)
- ansible tower 是一个企业级自动化平台,是统一的ansible主控管理平台(是目前市场上除了自研以外的唯一选择方案) ansible-tower 来自于 开源的 AWX
- 为什么需要自动化???
因为对于重复的操作 只会浪费工程师的时间和精力;可以将重复的事情进行自动化;可以将复杂的事情也进行自动化
Ansible 几乎可以对所有的IT资源进行自动化管理:
网络设备、公私云、防火墙、服务器、基础架构……
eg. 部署一个企业网站(自建机房开始),那么ansible可以完成那些部分
基础硬件(机房、宽带、空调、服务器硬件….)
安装操作系统
调试系统的配置(配置防火墙、配置存储…) Ansible
安装web软件(nginx、apache、tomcat) Ansible
安装中间件 (redis 消息队列….) Ansible
修改web的配置(nginx/apache ….) Ansible
发布网站的源码 Ansible
用户才能访问网站 Ansible
ansible特点:
简单:
人工可读的自动化 ansible 使用yaml语言来作为其配置
无需特殊编码技能
任务是按照顺序执行
可用于任何团队 ansible 适用于运维团队、开发团队、测试团队
支持windows自动化(windows只能作为ansible的被控,不能成为主控)
强大:
ansible支持通过powershell 来管理windows(通过winrm进行远程)
期望的状态配置 (幂等性: 一次执行和多次重复执行对结果的影响是一致的)
ansible报错了 可以重出错的重新开始,在错误发生的地方重新开始
管理域中的用户
企业应用进行编排(将多个任务按照一定的逻辑或者顺序组合在一起执行)
无代理:
ansible 使用应用原生的方式来管理应用本身
ansible 没有为被管理的对象开发代理的客户端程序
windows ——> winrm windows原生支持的远程管理方式
Linux ——> ssh ssh是Linux服务器自带的远程管理方式
网络设备 ——> snmp snmp 简单网络管理协议
公私云 ——> API 云平台的API接口
…..
ansible 对于简单的任务使用ansible ad-hoc(临时命令)来完成,对于复杂的任务使用ansible 的playbook(剧本)来完成
ad-hoc: 比如 创建用户,安装软件包 … 通常是单个任务
playbook: 比如 构建企业网站,对业务系统升级 …通常是由多个任务组成的一个项目
playbook 是使用yaml语言作为其配置语言
Ansible的架构
核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块
扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
插件(Plugins):完成模块功能的补充
剧本(Playbooks):把需要完成的多个任务定义在剧本中
连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
主机清单(Host Inventory):ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作
ansible 只能管理清单中的主机,如果被管理的主机不在清单中,ansible不执行任务
Ansible的原理
- 解析Inventory(主机清单)文件:在Ansible执行任何任务之前,需要先解析Inventory文件以确定被管理节点的位置和角色。Inventory文件是一个文本文件,它描述了被管理节点的名称、IP地址、主机组信息等。
- SSH连接到被管理节点:Ansible使用SSH协议或WinRM协议连接到被管理节点,这取决于节点操作系统的不同。在连接时,Ansible会验证SSH密钥并启动一个临时的SSH连接进程
- 执行任务:连接建立后,Ansible通过模块执行任务。模块是Ansible执行每个任务的工具,如文件操作、软件包安装、服务启动等。Ansible会将任务分发给所有被管理节点,并在这些节点上执行相应的操作。当任务执行完成后,Ansible会收集任务执行结果并返回给控制节点。
- 关闭连接:任务执行完成后删除模块,Ansible会关闭与被管理节点的连接,并停止SSH连接进程。
Ansible的安装
使用rpm包安装ansible
ubuntu: deb的包 rhel系列: rpm包
ansible-core 核心模块的版本(ansible早期的版本 2.4之前)
ansible-erxta 扩展的模块的版本
ansible ——> 核心模块+扩展模块
- rpm https://releases.ansible.com/ansible/rpm/release(结束到epel7)
- RHEL8、ubuntu 目前都是由厂商和社区在进行构建
rpm包安装:
得到软件源 RHEL7以下的版本,使用上面的epel源
RHEL8 开始的版本,使用系统的镜像源(不是dvd的源)而是官方仓库
RHEL8的源配置示例:
[BaseOS]
name=BaseOS
baseurl=file:///dvd/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///dvd/AppStream
enabled=1
gpgcheck=0
[ansible]
name=ansible
baseurl=file:///ansible/ansible
enabled=1
gpgcheck=0
yum clean all && yum makecache
yum install ansible –y
使用源码包安装ansible
https://releases.ansible.com/ansible 官方维护的稳定版,相对于开源版本较低
https://github.com/ansible/ansible 社区的开源版本,是最新的版本
- 下载指定版本的源码包
wget https://ghproxy.com/https://github.com/ansible/ansible/archive/refs/tags/v2.8.0.zip
- 安装依赖
dnf install -y gcc libffi-devel openssl-devel python3 python3-devel python3-cryptography -y
- 解压源码包并安装
unzip v2.8.0.zip
cd ansible-2.8.0
python3.6 setup.py build
python3.6 setup.py install
- 生成配置文件
mkdir /etc/ansible
cp examples/ansible.cfg /etc/ansible
cp examples/hosts /etc/ansible
- 验证
ansible --version
使用pip安装ansible
- 安装依赖
yum install rust cargo python3-cryptography -y
- pip安装
pip3 install ansible==2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
ansible==2.8.0 指定版本
https://pypi.tuna.tsinghua.edu.cn/simple 指定清华大学的pip源
- 生成ansible.cfg的配置文件
mkdir /etc/ansible
touch /etc/ansible/ansible.cfg /etc/ansible/hosts
- 验证
ansible --version
想获取更多内容,请关注公众号:博睿谷