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)
-
2026年Ansible部署教程最新教程,运维必收藏Ansible 从安装到实战的完整部署教程,涵盖核心概念、环境搭建、Playbook 编写和最佳实践。核心概念速览表格下载为表格导出为图片概念说明Control Node运行 Ansible 的主机(不能是 Windows)Managed Nodes被 Ansible 管理的目标主机Inventory主机清单文件,定义被管理主机的地址和分...
-
【实战】K8s日志,一步步带你搞定K8s 日志体系的核心原理、实战操作与生产级架构建议:1. K8s 日志的核心原理在 K8s 中,日志主要分为三类,理解它们的来源是管理日志的第一步:容器日志:应用进程输出到标准输出(stdout)和标准错误(stderr)的内容。这是 kubectl logs 命令能读取的唯一来源。节点日志:...
-
【收藏级】K8s安装实战全套配置模板与脚本,这里梳理了一套基于 kubeadm 的核心安装实战流程。1. 环境准备与系统调优推荐使用 Ubuntu 22.04 LTS。在部署前,必须对系统进行底层优化,否则 K8s 运行会不稳定:禁用 Swap:K8s 要求必须关闭交换分区。bash1sudo swapoff -a2sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab内核参数调优...
-
【实战】Brotli推荐,一步步带你搞定Brotli 是由 Google 开发的现代文本压缩算法,相比传统的 Gzip,它通常能将 HTML、CSS、JavaScript 等文本资源的体积再减小 15%~30%,同时解压速度更快。结合你之前关注的 Web 开发和服务器配置,以下是关于 Brotli 的落地推荐与实战指南:核心推荐:哪些资源该用 Brotli?Brotli...
-
为什么推荐Linux文件系统思维导图?深度对比与实测以下是 Linux 文件系统的完整知识体系,以文本思维导图的形式呈现:Linux 文件系统思维导图文本编辑1Linux 文件系统2│3├── 一、目录结构(FHS 标准)4│ │5│ ├── /(根目录)6│ │ └── 整个文件系统的起点,所有目录的父目录7│ │8│ ├── /bin9│ │ └──...
-
一文掌握Jenkins备份教程,效率提升300%Jenkins 备份的核心原则非常简单:Jenkins 的所有数据几乎都集中在 JENKINS_HOME 目录中,只要备份好这个目录,就可以完整恢复整个 Jenkins 实例。下面从确认目录、备份方式到恢复验证,给你一套完整的实操教程。确认 JENKINS_HOME 位置在开始备份前,先确认你的 Jenkins 主...