自动化运维ansible
Ansible 不需要在被管理节点上安装额外的软件,只需通过 SSH(或 Windows 的 WinRM)进行连接。这大大降低了系统维护的复杂度和资源占用。Ansible 使用 YAML 格式编写 Playbook,描述你希望系统达到的最终状态。Playbook 简洁明了,易于维护和版本控制。每个任务调用独立的模块,模块设计时追求幂等性,即多次执行不会导致系统状态异常。这保证了系统在连续多次执行
目录
1. Ansible 简介
1.1 Ansible 的核心概念
-
无代理架构(Agentless):
Ansible 不需要在被管理节点上安装额外的软件,只需通过 SSH(或 Windows 的 WinRM)进行连接。这大大降低了系统维护的复杂度和资源占用。 -
基于声明式语言的 Playbook:
Ansible 使用 YAML 格式编写 Playbook,描述你希望系统达到的最终状态。Playbook 简洁明了,易于维护和版本控制。 -
模块化设计与幂等性:
每个任务调用独立的模块,模块设计时追求幂等性,即多次执行不会导致系统状态异常。这保证了系统在连续多次执行 Playbook 时保持稳定。
1.2 Ansible 的架构
Ansible 主要由以下几个部分构成:
-
控制节点(Control Node):
安装 Ansible 的机器,你可以在该节点上编写 Playbook、管理库存(Inventory)以及执行命令。 -
库存(Inventory):
列出所有被管理节点(例如服务器、虚拟机、云实例等)的列表文件,可以采用静态或动态方式生成。默认位置为/etc/ansible/hosts
。 -
被管理节点(Managed Nodes):
通过 SSH/WinRM 进行远程连接的主机,Ansible 在执行任务时会在这些节点上临时传输并执行模块代码。
2. Ansible 环境部署
下面介绍在控制节点上部署 Ansible 环境的基本步骤。
2.1 安装 Ansible
控制节点一般运行 Linux 或 macOS,确保已安装 Python(推荐使用 Python 3)。常见安装方式有通过 pip 安装:
## 被控节点pubserver主机安装ansible软件
[root@server ~]# yum -y install ansible #安装Ansible软件
[root@server ~]# ansible --version #确认ansible命令可用
配置主机名解析
## 配置hosts文件,确保控制节点通过主机名访问到被控节点
[root@server ~]# vim /etc/hosts #编辑hosts文件配置主机名解析
192.168.88.240 server
192.168.88.101 web1
192.168.88.102 web2
#测试hosts文件配置
[root@pubserver ~]# for i in pubserver web1 web2 db1
do
ping -c 2 $i
done
配置免密登录被控节点
## 配置控制节点免密登录被控节点
[root@server ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '' #非交互生成秘钥对
#发送公钥到被控节点
[root@pubserver ~]# for i in web1 web2 db1
do
ssh-copy-id root@$i
done
#确认免密登录,结果显示web1,web2
[root@server ~]# for i in web1 web2
do
ssh root@$i "hostname"
done
2.2 配置库存文件(Inventory)
Ansible 通过库存文件管理目标主机。你可以编辑 /etc/ansible/hosts
文件或在项目目录中自定义库存文件。示例内容如下:
# 示例库存文件内容
[webservers]
192.168.1.10
192.168.1.11
[databases]
db1.example.com
db2.example.com
2.3被控节点Ansible管理环境配置
-
配置目标
- 使用同一套Ansible软件管理多个环境,如开发环境、测试环境、生产环境
- 多用户使用同一个控制节点管理不同主机
- 每个用户有属于自己的配置环境(工作目录)
-
Ansible配置文件查找顺序
- 首先检测ANSIBLE_CONFIG变量定义的配置文件
- 其次检查当前目录下的./ansible.cfg文件
- 再次检查当前用户家目录下的~/ansible.cfg文件
- 最后检查/etc/ansible/ansible.cfg文件
# 1. 查看默认的 Ansible 配置文件(通常不直接修改此文件)
[root@server ~]# cat /etc/ansible/ansible.cfg
# 此命令会显示系统默认的 Ansible 配置内容
# 2. 初始化并查看所有可配置条目
[root@server ~]# ansible-config init
# 根据提示查看配置条目,了解 Ansible 的所有默认配置项
# 3. 创建自定义的 Ansible 工作目录
[root@server ~]# mkdir ansible # 创建名为 ansible 的工作目录(名称可自定义)
[root@server ~]# cd ansible/ # 进入该工作目录,后续的所有操作均在此目录下进行
# 4. 配置 Ansible 工具:编辑自定义的 ansible.cfg 配置文件
[root@server ansible]# vim ansible.cfg
# 在编辑器中输入以下内容:
#
# [defaults] # 默认通用配置节
# inventory = inventory # 指定库存文件路径(本目录下的 inventory 文件)
# host_key_checking = false # 禁用 SSH 主机密钥检查,避免首次连接时的提示
# 5. 编辑库存文件,定义主机组和主机列表
[root@server ansible]# vim inventory
# 示例库存文件内容:
#
# [webservers] # 定义一个名为 webservers 的主机组
# web[1:2] # 使用范围表达式,表示主机名为 web1 和 web2
#
# [cluster:children] # 定义组 cluster,使用 :children 表示其包含下级子组
# webservers # 将 webservers 作为 cluster 的子组
# 6. 确认配置结果
# 确保以下命令在自定义工作目录中执行
# 查看所有被控主机列表
[root@pubserver ansible]# ansible all --list-hosts
# 输出示例:
# hosts (3):
# web1
# web2
# 查看 webservers 组的主机列表
[root@pubserver ansible]# ansible webservers --list-hosts
# 输出示例:
# hosts (2):
# web1
# web2
3,Ansible 的使用方法
编写 Playbook:
用户根据需要定义 YAML 格式的 Playbook 文件,Playbook 中定义一个或多个 Play(剧本),每个 Play 通过 hosts
指定目标主机,并列出任务列表(tasks),每个任务调用对应的模块及其参数。例如:
---
- name: 检查目标主机连通性 - 重复执行 ping 模块指定次数
hosts: all
tasks:
- name: 测试连接(执行 3 次 ping)
ping:
loop: "{{ range(1, 4) | list }}"
loop_control:
label: "Ping 第 {{ item }} 次"
使用 ansible-playbook 命令来运行 Playbook,例如:
ansible-playbook -i inventory_file playbook.yml
总结来说,Ansible 以其简单、无代理和模块化的特性,使得 IT 自动化变得更加轻松高效。无论是通过编写 Playbook 进行批量部署,还是使用 Ad Hoc 命令进行快速操作,都能满足日常运维和大规模环境管理的需求。希望这些内容对你撰写关于 Ansible 的博客有所帮助!
更多推荐
所有评论(0)