Ansible 在互联网上的使用核心是 自动化管理和配置成千上万台分布在不同地理位置的服务器,它就像一个“指挥中心”,通过 SSH 连接到这些服务器,然后执行一系列预设好的任务,从而实现高效、可靠、一致的系统运维。

(图片来源网络,侵删)
下面我们从几个方面来详细说明。
Ansible 在互联网使用中的核心价值
互联网环境下的服务器管理面临巨大挑战:数量多、分布广、配置复杂、更新频繁,Ansible 提供了以下核心价值来应对这些挑战:
-
自动化
- 手动操作的低效与错误:想象一下,手动为 100 台服务器更新一个配置文件、部署一个新版本的应用或打一个安全补丁,不仅耗时耗力,而且极易出错。
- Ansible 的自动化:你只需要编写一个 Playbook(剧本),告诉 Ansible 要做什么,它就会自动连接到所有目标服务器,并行执行任务,并返回结果,这极大地提升了运维效率。
-
一致性
(图片来源网络,侵删)- “在我电脑上是好的” (It works on my machine) 是开发运维中的经典难题,手动配置导致每台服务器的环境都可能存在细微差别,从而引发难以排查的问题。
- Ansible 的一致性:通过 Playbook 和 Role(角色)定义标准化的配置,可以确保所有服务器(无论是开发、测试还是生产环境)都遵循同一个标准,这被称为“基础设施即代码”(Infrastructure as Code, IaC)。
-
可重复性
- 无论是搭建新的服务器(从零开始),还是进行灾难恢复(重建环境),都可以使用相同的 Ansible Playbook 来执行。
- 这确保了过程可以被精确地复制,减少了人为干预,让整个过程变得可预测和可靠。
-
高效性与可扩展性
- Ansible 基于 SSH 工作,无需在客户端和被管理节点上安装任何代理,架构非常轻量。
- 它通过并行执行来管理大量主机,非常适合互联网公司动辄成百上千台服务器的管理需求。
-
安全性
- 无代理架构:减少了被管理节点的攻击面,因为没有需要维护和更新的代理程序。
- 权限控制:可以精细控制 Ansible 执行操作的用户权限。
- 加密与审计:Ansible Vault 可以用来加密敏感信息(如密码、API Key),Playbook 的执行过程和结果都可以被记录,便于审计和追踪。
典型的互联网使用场景
Ansible 在互联网公司的应用场景非常广泛,几乎涵盖了整个软件开发生命周期和基础设施运维。

(图片来源网络,侵删)
| 场景 | 描述 | Ansible 的作用 |
|---|---|---|
| 应用部署 | 将新版本的应用程序(如网站、API 服务)发布到线上服务器集群。 | 自动拉取代码、安装依赖、执行构建、更新配置文件、启动/重启服务。 |
| 配置管理 | 统一管理所有服务器的系统配置,如 Nginx 配置、系统参数、防火墙规则等。 | 确保所有服务器的配置符合安全规范和性能要求,防止因配置不一致导致的问题。 |
| 基础设施 provisioning | 在云上(如 AWS, Azure, Google Cloud)自动创建和配置虚拟机、负载均衡器、数据库等资源。 | 使用 cloud 模块,实现基础设施的代码化管理,快速创建和销毁环境。 |
| 持续集成/持续部署 | 作为 CI/CD 流水线(如 Jenkins, GitLab CI)的关键一环,实现自动化的测试和部署。 | 当代码合并或测试通过后,CI/CD 工具触发 Ansible Playbook,自动完成部署流程。 |
| 系统更新与补丁管理 | 定期为所有服务器打操作系统安全补丁或更新软件包。 | 使用 yum, apt 等模块,批量执行更新操作,并验证结果。 |
| 容器编排与管理 | 管理容器化应用(如 Docker, Kubernetes)。 | 使用 docker, kubernetes 等模块,自动化容器的部署、扩缩容和生命周期管理。 |
| 任务执行 | 在多台服务器上一次性执行特定的命令,如检查磁盘空间、清理日志、重启服务等。 | 无需登录到每台服务器,通过 shell 或 command 模块批量执行,并收集结果。 |
一个简单的实战示例:部署一个静态网站
假设你有一个简单的 HTML 网站,需要部署到多台 Web 服务器上。
环境准备:
- 控制节点:一台安装了 Ansible 的机器(可以是你的笔记本电脑或专用的运维服务器)。
- 被管理节点:多台远程服务器,IP 地址分别为
168.1.10,168.1.11。 - 前提:控制节点需要能通过 SSH 密钥(推荐)或密码无密码登录到所有被管理节点。
步骤 1:定义 Inventory(清单)
Inventory 文件用来定义 Ansible 要管理的主机,创建一个文件 inventory.ini:
# inventory.ini [webservers] 192.168.1.10 192.168.1.11 [all:vars] ansible_user=centos # 所有主机默认登录用户 ansible_ssh_private_key_file=~/.ssh/id_rsa # 使用 SSH 密钥登录
步骤 2:编写 Playbook
Playbook 是 Ansible 的核心,它使用 YAML 格式定义任务,创建一个文件 deploy_site.yml:
# deploy_site.yml
---
- name: Deploy a static website
hosts: webservers
become: yes # 使用 sudo 权限执行任务
tasks:
- name: Install Apache (httpd)
ansible.builtin.yum:
name: httpd
state: present
- name: Create a directory for the website
ansible.builtin.file:
path: /var/www/html/my_site
state: directory
owner: apache
group: apache
- name: Copy the website files
ansible.builtin.copy:
src: ./files/ # 本地存放网站文件的目录
dest: /var/www/html/my_site/
owner: apache
group: apache
- name: Start and enable the httpd service
ansible.builtin.service:
name: httpd
state: started
enabled: yes
步骤 3:执行 Playbook
在控制节点上,打开终端,运行以下命令:
ansible-playbook -i inventory.ini deploy_site.yml
执行过程:
- Ansible 会读取
inventory.ini,找到webservers组里的两台服务器。 - 它会通过 SSH 并行连接到这两台服务器。
- 按照 Playbook 中的顺序,在每台服务器上依次执行任务:
- 安装 Apache Web 服务器。
- 创建网站根目录。
- 将你本地的
./files目录下的所有文件复制到服务器的网站根目录。 - 启动 Apache 服务,并设置开机自启。
几分钟后,你的静态网站就已经部署到了这两台服务器上。
安全考量与最佳实践
在互联网上使用 Ansible,安全是重中之重。
- 使用 SSH 密钥认证:绝对不要使用密码认证,为 Ansible 专用用户生成 SSH 密钥,并将其公钥分发到所有被管理节点。
- 使用 Ansible Vault 加密敏感信息:不要在 Playbook 或变量文件中明文写入密码、API Token、数据库凭证等敏感信息。
- 创建加密文件:
ansible-vault create secrets.yml - 编辑加密文件:
ansible-vault edit secrets.yml - 在 Playbook 中引用:
vars_files: secrets.yml
- 创建加密文件:
- 限制 Ansible 用户的权限:为 Ansible 专用用户创建一个独立的账户,并使用
sudo授予其执行必要命令的权限,但不要给予root或sudo ALL的无限制权限。 - 控制节点安全:确保你的 Ansible 控制节点本身是安全的,因为它拥有对所有被管理节点的访问权限。
- 使用版本控制:将你的 Playbooks、Roles、Inventory 文件等都纳入 Git 等版本控制系统,这不仅能追踪变更历史,也是实现“基础设施即代码”的基础。
Ansible 是现代互联网运维不可或缺的工具,它通过简单、强大、无代理的自动化能力,帮助运维和开发团队高效、安全、可靠地管理庞大的服务器基础设施,是实现 DevOps 和云原生战略的关键技术之一,无论是初创公司还是大型互联网巨头,都在广泛地使用 Ansible 来提升其技术运维的效率和质量。
