自动化运维工具 Ansible 怎么基础入门?

文章导读
Ansible 适合在没有客户端代理的环境下做批量配置管理和应用部署,入门建议从临时的 ad-hoc 命令开始,再过渡到 playbook 编排。
📋 目录
  1. 环境准备与安装
  2. 主机清单与 SSH 配置
  3. 配置文件 ansible.cfg
  4. 编写 Playbook
  5. 验证与检查
  6. 常见坑与安全风险
A A

Ansible 适合在没有客户端代理的环境下做批量配置管理和应用部署,入门建议从临时的 ad-hoc 命令开始,再过渡到 playbook 编排。

先说结论:它是基于 SSH 的无代理工具,控制节点安装后即可管理远程主机,无需在被管服务器安装额外软件。

  • 适合:多台 Linux 服务器的批量配置、应用发布或命令执行。
  • 先看:控制节点需安装 Python 和 Ansible,被管节点需开放 SSH 并具备 Python 环境(多数 Linux 发行版默认自带)。
  • 建议:先用手脚命令测试连通性,再编写 YAML 格式的 playbook 固化流程,注意权限提升配置。

环境准备与安装

在控制节点(发起管理的机器)上安装 Ansible。为避免污染系统 Python 环境,建议优先使用系统包管理器,或使用 pip 的 user 模式。

方式一:系统包管理器(推荐)

# Ubuntu/Debian
sudo apt update && sudo apt install ansible

# CentOS/RHEL 8+
sudo dnf install ansible

方式二:pip 安装(需注意权限)

python3 -m pip install `--user` ansible

安装完成后,验证版本:ansible `--version`

主机清单与 SSH 配置

1. 配置主机清单

创建一个名为 hosts 的文件,定义要管理的机器 IP 或域名。

[webservers]
192.168.1.10
192.168.1.11

2. 配置 SSH 免密

为了自动化,建议配置 SSH Key 认证。使用 ssh-copy-id 将公钥发送到目标机器。

ssh-copy-id user@192.168.1.10

3. 测试连通性

使用 ping 模块测试,这里的 ping 不是网络 ping,而是 Ansible 的连通性检查。

自动化运维工具 Ansible 怎么基础入门?
ansible webservers -m ping -i hosts

配置文件 ansible.cfg

Ansible 会读取当前目录或 /etc/ansible/ansible.cfg 下的配置。初学者可在项目目录下创建 ansible.cfg 以覆盖默认设置。

[defaults]
inventory = ./hosts
host_key_checking = False
retry_files_enabled = False

安全警告:host_key_checking = False 仅建议在测试环境使用,它会跳过 SSH 主机密钥验证,存在中间人攻击风险。生产环境请手动管理 known_hosts 或使用 ssh-keyscan 预先收集密钥。

编写 Playbook

创建一个 YAML 文件(如 site.yml),定义任务序列。注意不同操作系统的包管理器模块不同,且系统配置通常需要提权。

示例 1:CentOS/RHEL 使用 yum 模块

---
- hosts: webservers
  become: true
  tasks:
  - name: Install nginx on RHEL
    yum:
      name: nginx
      state: present

示例 2:Ubuntu/Debian 使用 apt 模块

---
- hosts: webservers
  become: true
  tasks:
  - name: Install nginx on Debian
    apt:
      name: nginx
      state: present
      update_cache: yes

关键参数说明:

  • become: true:相当于 sudo,用于获取 root 权限执行安装或配置修改。
  • state: present:确保软件包已安装,体现幂等性。

验证与检查

1. 预演模式

执行 playbook 时加上 `--check` 参数可以预演,不会实际修改系统。

ansible-playbook site.yml `--check`

观察返回颜色:绿色代表无变更,黄色代表执行了变更,红色代表失败。

2. 实际执行与状态检查

去掉 `--check` 正式执行。登录目标机器检查服务状态,例如 systemctl status nginx

常见坑与安全风险

  • SSH 主机密钥验证:第一次连接可能会因为 host key 验证失败而报错。生产环境严禁直接关闭检查,建议使用 ssh-keyscan -H target_ip >> ~/.ssh/known_hosts 预先添加信任。
  • 目标机 Python 版本:Ansible 依赖目标机上有 Python 解释器(通常是 Python 2.7 或 3.x),部分精简版系统(如 Alpine)可能需要手动安装 Python 或指定解释器路径。
  • 权限问题:修改系统配置通常需要 root 权限,忘记配置 become: true 或命令加 `--become` 会导致权限拒绝错误。
  • 安装源污染:避免直接使用 sudo pip install ansible,这可能破坏系统依赖。优先使用系统包管理器或 `--user` 参数。