2026年Ansible部署教程最新教程,运维必收藏
Ansible 从安装到实战的完整部署教程,涵盖核心概念、环境搭建、Playbook 编写和最佳实践。
核心概念速览
表格
下载为表格
导出为图片
概念说明
Control Node运行 Ansible 的主机(不能是 Windows)
Managed Nodes被 Ansible 管理的目标主机
Inventory主机清单文件,定义被管理主机的地址和分组
Module执行具体任务的代码单元(如 copy、yum、service)
Task一个任务,调用一个模块
Play一组任务映射到一组主机
Playbook多个 Play 组成的 YAML 文件,定义完整自动化流程
Role可复用的目录结构,组织变量、任务、模板等
安装 Ansible
方式一:通过系统包管理器(推荐)
CentOS / RHEL:
bash
1# 启用 EPEL 仓库
2sudo yum install -y epel-release
3# 安装 Ansible
4sudo yum install -y ansible
Ubuntu / Debian:
bash
1sudo apt update
2sudo apt install -y ansible
方式二:通过 pip 安装(适合需要特定版本)
bash
1pip install ansible
验证安装
bash
1ansible --version
SSH 免密登录配置
Ansible 基于 SSH 协议工作,无需在目标主机安装客户端,但需要配置控制节点到目标节点的免密登录:
bash
1# 在 Control Node 上生成密钥
2ssh-keygen -t rsa -b 2048
3
4# 将公钥复制到每台目标主机
5ssh-copy-id user@192.168.1.10
6ssh-copy-id user@192.168.1.11
配置主机清单(Inventory)
编辑默认清单文件:
bash
1sudo vim /etc/ansible/hosts
示例内容:
ini
1[webservers]
2web1 ansible_host=192.168.1.10 ansible_user=root ansible_port=22
3web2 ansible_host=192.168.1.11 ansible_user=root
4
5[dbservers]
6db1 ansible_host=192.168.1.20 ansible_user=root
7
8# 嵌套分组
9[all_servers:children]
10webservers
11dbservers
也支持 YAML 格式的动态清单,适合云环境自动发现。
Ad-Hoc 命令(临时执行)
语法:ansible-m-a ""
bash
1# 测试连通性
2ansible all -m ping
3
4# 执行远程命令
5ansible all -m shell -a "df -h"
6
7# 安装软件包
8ansible webservers -m yum -a "name=httpd state=present"
9
10# 复制文件
11ansible all -m copy -a "src=/tmp/test.txt dest=/tmp/test.txt owner=root mode=644"
12
13# 管理服务
14ansible webservers -m service -a "name=httpd state=started enabled=yes"
Playbook 实战
Playbook 是 Ansible 的核心,使用 YAML 格式编写:
基础示例:安装并启动 Apache
yaml
1---
2- name: 安装并启动 Apache
3 hosts: webservers
4 become: yes
5 tasks:
6 - name: 安装 httpd 软件包
7 ansible.builtin.yum:
8 name: httpd
9 state: present
10
11 - name: 启动 httpd 服务
12 ansible.builtin.service:
13 name: httpd
14 state: started
15 enabled: yes
16
17 - name: 复制首页文件
18 ansible.builtin.copy:
19 src: /path/to/local/index.html
20 dest: /var/www/html/index.html
21 owner: root
22 group: root
23 mode: '0644'
运行 Playbook:
bash
1ansible-playbook install_apache.yml
进阶示例:使用变量和模板
定义变量(group_vars/webservers.yml):
yaml
1apache_port: 8080
2max_clients: 150
创建 Jinja2 模板(templates/httpd.conf.j2):
apache
1Listen {{ apache_port }}
2MaxClients {{ max_clients }}
3ServerName {{ ansible_hostname }}
在 Playbook 中使用模板:
yaml
1 - name: 部署 httpd 配置文件
2 ansible.builtin.template:
3 src: templates/httpd.conf.j2
4 dest: /etc/httpd/conf/httpd.conf
5 notify: restart httpd
6
7 handlers:
8 - name: restart httpd
9 ansible.builtin.service:
10 name: httpd
11 state: restarted
Roles:推荐的项目组织方式
当 Playbook 变得复杂时,使用 Roles 来组织代码:
bash
1# 创建角色骨架
2ansible-galaxy init my_role
生成的目录结构:
文本
1my_role/
2├── defaults/ # 默认变量
3├── handlers/ # 处理器
4├── tasks/ # 任务列表
5│ └── main.yml
6├── templates/ # Jinja2 模板
7├── vars/ # 角色变量
8└── meta/ # 角色元数据
在 Playbook 中引用角色:
yaml
1---
2- name: 使用角色部署
3 hosts: webservers
4 become: yes
5 roles:
6 - my_role
敏感信息保护:Ansible Vault
使用 Vault 加密密码等敏感数据:
bash
1# 创建加密文件
2ansible-vault create secrets.yml
3
4# 编辑加密文件
5ansible-vault edit secrets.yml
6
7# 运行 Playbook 时提供 Vault 密码
8ansible-playbook deploy.yml --ask-vault-pass
9
10# 或使用密码文件(避免手动输入)
11ansible-playbook deploy.yml --vault-password-file ~/.vault_pass
最佳实践
幂等性:确保 Playbook 多次执行结果一致,不会重复变更
版本控制:将 Playbook 和 Roles 纳入 Git 管理
环境隔离:使用不同的 Inventory 文件区分 dev/staging/prod 环境
标签化:给 Task 打 tags,方便选择性执行yaml
1- name: 安装 httpd
2 yum:
3 name: httpd
4 state: present
5 tags: install
执行时:ansible-playbook deploy.yml --tags install
调试模式:使用 -v(-vvv 最详细)查看执行细节
检查模式:使用 --check 参数预演执行效果,不实际修改目标主机
常见问题排查
表格
下载为表格
导出为图片
问题排查方法
SSH 连接失败检查 ssh-copy-id 是否成功,确认 ansible_port 和 ansible_user
权限不足确认 become: yes 已设置,且用户有 sudo 权限
模块找不到运行 ansible-galaxy collection install安装对应集合
YAML 语法错误使用 ansible-playbook --syntax-check deploy.yml 检查语法
变量未生效检查变量定义位置优先级(命令行 > Play vars > host_vars > group_vars > defaults)
-
为什么推荐全站加速?深度对比与实测全站加速(通常被称为 WSA、ECDN 或 ICDN)是一种融合了动态加速和静态加速的网站加速解决方案。它专门针对动静态内容混合的网站,能够同时解决静态资源加载慢和动态请求延迟高的问题。核心原理:动静分离与智能路由全站加速的核心在于“动静分离”和“智能路由...
-
SRE面试速成详解:从入门到生产环境实践SRE(站点可靠性工程)面试的核心,在于考察你是否具备“用软件工程思维解决运维问题”的能力。结合你平时对软件开发技术和前沿科技资讯的关注,以下为你梳理了一份高效的 SRE 面试速成指南:核心思维:SRE 到底在做什么?SRE 不是传统的运维,而是“当软件工程师...
-
Jenkins安全加固教程最佳实践:资深运维的私藏技巧文库里暂时没有收录 Jenkins 安全加固的专题文档,视频资源也未检索到。下面我基于 Jenkins 官方文档和 SANS 的加固指南,为你整理一份可直接落地的教程,并在文末附上官方权威文档链接供你收藏。第一道防线:启用并收紧认证授权Jenkins 默认安装后处于“裸奔”状...
-
Nginx详解:从入门到生产环境实践Nginx(发音为 "engine X")是一款开源的高性能 Web 服务器和反向代理服务器。它由俄罗斯程序员 Igor Sysoev 于 2004 年发布,最初是为了解决高并发场景下的 C10K 问题(即单机支持 1 万并发连接)而设计的。凭借极低的资源消耗和卓越的并发处理能力,Nginx 已成为现代互联网架...
-
内核调优错误解决最佳实践:资深运维的私藏技巧内核调优是一个“牵一发而动全身”的过程,出现错误通常是因为参数设置超出了系统承受范围,或者参数之间存在冲突。由于你没有提供具体的报错信息,我为你梳理了一套通用的内核调优错误排查与解决流程,涵盖了从紧急恢复到根因分析的完整路径:第一步:...
-
2026年Ansible部署教程最新教程,运维必收藏Ansible 从安装到实战的完整部署教程,涵盖核心概念、环境搭建、Playbook 编写和最佳实践。核心概念速览表格下载为表格导出为图片概念说明Control Node运行 Ansible 的主机(不能是 Windows)Managed Nodes被 Ansible 管理的目标主机Inventory主机清单文件,定义被管理主机的地址和分...