一、Ansible 核心架构解析
1. 组件交互逻辑
sequenceDiagram
participant 控制节点
participant 托管节点
participant 模块库
控制节点->>托管节点: SSH/WinRM 连接
控制节点->>模块库: 加载指定模块
模块库-->>托管节点: 执行模块代码
托管节点-->>控制节点: 返回JSON结果
控制节点->>控制节点: 结果解析与状态追踪
2. 核心组件矩阵
组件 | 功能描述 | 关键配置文件 |
---|---|---|
Inventory | 目标主机管理 | /etc/ansible/hosts |
Playbook | 任务编排YAML文件 | site.yml |
Roles | 任务模块化封装 | roles/webserver/tasks/ |
Collections | 扩展功能集合 | galaxy.yml |
Vault | 敏感数据加密 | vars/secret.yml |
二、Playbook 高级编程技巧
1. 条件任务与循环控制
- name: 配置多版本JDK
yum:
name: "{{ item }}"
state: present
loop:
- java-11-openjdk
- java-17-openjdk
when: ansible_distribution_major_version == "9"
- name: 部署应用至生产环境
include_tasks: deploy_prod.yml
run_once: true
delegate_to: localhost
when: env_type == "production"
2. 错误处理与重试机制
- name: 服务重启容错处理
service:
name: nginx
state: restarted
register: result
retries: 3
delay: 10
until: result is succeeded
ignore_errors: yes
三、Roles 模块化设计实战
1. 标准 Role 结构
roles/webserver/
├── defaults # 低优先级变量
├── files # 静态文件
├── handlers # 触发器
├── meta # 依赖声明
├── tasks # 主任务链
├── templates # Jinja2模板
└── vars # 高优先级变量
2. 跨 Role 依赖管理
# roles/webserver/meta/main.yml
dependencies:
- role: firewall
vars:
allow_ports:
- 80
- 443
- role: monitoring
tags: prod_env
四、企业级 Inventory 管理
1. 动态 Inventory 配置
# aws_ec2.py 动态清单示例
---
plugin: aws_ec2
regions:
- us-east-1
filters:
tag:Env: production
hostnames:
- tag:Name
compose:
ansible_user: "'ec2-user'"
groups:
webservers: tags.Role == 'Web'
dbservers: tags.Role == 'DB'
2. 多环境分层配置
# inventory/
├── production/
│ ├── group_vars/
│ │ └── all.yml
│ └── hosts
├── staging/
│ └── hosts
└── common.yml
五、实验环境搭建
1. 快速部署Ansible控制节点
# RHEL 9 基础安装
sudo dnf install -y ansible-core python3-jmespath
sudo alternatives --set python3 /usr/bin/python3.9
# 配置SSH免密
ssh-keygen -t ed25519
ssh-copy-id manager@node1
2. 验证环境
ansible all -m ping -i inventory/production/
ansible-playbook --syntax-check site.yml
通过掌握 Ansible 自动化平台的深度应用能力,考生不仅能通过 RHCA-DO374 认证考核,更能构建高效可靠的企业级自动化运维体系。
欢迎在评论区或者私信提交您的 Ansible 实践案例或技术疑问!