如何入门自动化部署工具 Ansible?

文章导读
Ansible 适合想要无代理自动化运维的团队,入门建议从本地安装后通过 SSH 管理少量主机开始,先熟悉 ad-hoc 命令再编写 playbook。
📋 目录
  1. 命令速用版
  2. 核心工作原理
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 安全最佳实践
A A

Ansible 适合想要无代理自动化运维的团队,入门建议从本地安装后通过 SSH 管理少量主机开始,先熟悉 ad-hoc 命令再编写 playbook。

先说结论:适合中小规模服务器管理,优先掌握 inventory 和基础模块,建议在实际测试环境验证幂等性。

  • 适合:多台 Linux 服务器配置同步、应用批量部署、定时任务管理。
  • 先看:控制节点需安装 Python 3 和 Ansible,被管节点需开放 SSH 并具备 Python 3 环境。
  • 建议:先用 ping 模块连通性测试,再写简单 playbook,不要一开始就追求复杂角色。

命令速用版

以下是几个最基础的命令,可在控制节点直接执行:

# 查看版本
ansible `--version`

# 测试所有主机连通性
ansible all -m ping

# 查看主机 uptime
ansible all -m command -a 'uptime'

# 安装 nginx (Ubuntu 示例)
ansible webservers -m apt -a 'name=nginx state=present' `--become`

核心工作原理

Ansible 的核心设计是“无代理”(Agentless),它不需要在被管服务器上安装额外守护进程,而是通过 SSH 协议推送模块代码到远程执行。这种架构降低了维护成本,适合快速入门。另一个关键是“幂等性”,即同一个任务执行多次,结果应该一致,不会重复操作或产生副作用。理解这两点,就能明白为什么它适合配置管理而不是高频实时调度。

分步处理

1. 准备控制节点

如何入门自动化部署工具 Ansible?

在一台 Linux 机器上安装 Ansible。推荐使用 pip 安装,以便获取较新版本。

pip3 install ansible

2. 配置 Ansible 基础设置

创建 ansible.cfg 文件,用于管理连接行为。测试环境可关闭主机密钥检查,生产环境请谨慎。

[defaults]
host_key_checking = False  # 仅测试环境使用,生产环境建议管理 known_hosts
remote_user = ansible_user   # 指定远程连接用户

3. 配置主机清单

如何入门自动化部署工具 Ansible?

编辑 inventory 文件,默认位置通常在 /etc/ansible/hosts 或当前目录的 hosts 文件。

[webservers]
192.168.1.10
192.168.1.11

[dbservers]
192.168.1.20

4. 配置 SSH 免密

Ansible 默认依赖 SSH 密钥认证。将控制节点的公钥分发到被管节点普通用户(具备 sudo 权限)。

如何入门自动化部署工具 Ansible?
ssh-copy-id ansible_user@192.168.1.10

5. 编写第一个 Playbook

创建 site.yml,定义要执行的任务。注意 YAML 格式对缩进敏感。

---
- hosts: webservers
  become: yes
  tasks:
    - name: Ensure nginx is installed
      apt:
        name: nginx
        state: present

6. 执行 Playbook

ansible-playbook site.yml

怎么验证是否生效

执行完成后,不要只看命令返回的 okchanged 状态,需登录远程服务器确认实际效果。

  • 检查服务状态:在被管节点运行 systemctl status nginx 确认服务已启动。
  • 检查端口监听:使用 ss -tlnp | grep 80 确认端口已开放。
  • 再次执行:再次运行 ansible-playbook site.yml,观察输出中 changed 数量是否为 0,以此验证幂等性。

常见坑

  • Python 版本依赖:被管节点必须安装 Python 3(Ansible 2.12+ 不再支持 Python 2),否则 Ansible 模块无法运行,会报解释器错误。
  • 权限问题:涉及系统配置的任务通常需要提权,记得在 playbook 中加 become: yes 或命令行加 `--become`
  • 主机密钥检查:首次连接新主机时,SSH 可能会因 host_key_checking 失败,测试环境可在配置中关闭,生产环境建议规范管理 known_hosts。
  • 变量优先级:Ansible 变量来源很多(inventory, playbook, vars 等),初学者容易混淆,建议先硬编码测试,再逐步抽取变量。

安全最佳实践

  • 避免 Root 直连:建议使用普通用户配合 sudo 提权,而非直接使用 root 用户 SSH 连接。
  • 密钥管理:生产环境不要关闭 host_key_checking,防止中间人攻击。
  • 最小权限:为 Ansible 专用用户配置仅必要的 sudo 权限。