好嘞!我们来详细讲讲自动化运维利器——Ansible,这是系列的第一篇,帮你扎实打下基础。


Ansible详解(一):自动化运维从入门到实战


一、什么是 Ansible?

  • 定义:Ansible 是一个简单但强大的自动化运维工具,主要用来批量管理服务器配置、部署应用、执行任务等。
  • 特点
    • 无代理(Agentless):不需要在被管理节点安装额外软件,利用SSH进行通讯。
    • 简单易学:配置用 YAML 格式编写(Playbook),结构清晰,语法直观。
    • 可扩展性强:支持模块化,社区模块丰富,也支持自定义模块。
    • 支持并行执行:可以同时管理成百上千台服务器。

二、Ansible 的基本架构

组件作用
控制节点运行 Ansible 命令或 Playbook 的机器,通常是你的工作站或管理服务器。
被控节点需要被管理的服务器,Ansible 通过 SSH 连接到这些节点。
Inventory 文件存放被控节点的列表,可以是静态文件或动态脚本。
Playbook用 YAML 写的自动化任务脚本,定义要执行的操作和目标主机。
模块(Module)Ansible 执行任务的最小单元,如文件操作、软件安装、服务管理等。

三、安装 Ansible

  • Linux 下一般用包管理器安装,例如:
sudo apt update
sudo apt install ansible    # Debian/Ubuntu

sudo yum install ansible    # CentOS/RHEL
  • 也可以用 Python 的 pip 安装:
pip install ansible

四、Inventory 文件(主机清单)

这是 Ansible 的核心,告诉 Ansible 管理哪些机器。

示例 hosts 文件:

[webservers]
web1.example.com
web2.example.com

[dbservers]

db1.example.com

你也可以用 IP:

[webservers]
192.168.1.101
192.168.1.102

使用命令时指定 inventory 文件:

ansible all -i hosts -m ping

五、基础命令演示

  • 测试所有主机连通性:
ansible all -i hosts -m ping
  • 在所有 webservers 组执行命令:
ansible webservers -i hosts -m shell -a "uname -r"
  • 使用 sudo 权限执行命令:
ansible all -i hosts -m shell -a "systemctl restart nginx" --become

六、Playbook 简介

Playbook 是用来描述自动化任务的 YAML 文件,结构清晰,类似程序的“剧本”。

示例 site.yml

- name: 安装 nginx 并启动服务
  hosts: webservers
  become: yes

  tasks:
    - name: 安装 nginx
      apt:
        name: nginx
        state: present
      when: ansible_os_family == "Debian"

    - name: 启动 nginx 服务
      service:
        name: nginx
        state: started

执行:

ansible-playbook -i hosts site.yml

七、总结

  • Ansible 是一款无代理、简单易用的自动化运维工具
  • 通过 Inventory 定义管理的服务器
  • 通过模块执行命令、操作配置
  • Playbook 是用 YAML 写的自动化任务,方便维护和版本控制