插件窝 干货文章 Ansible 介绍与实战操作演示

Ansible 介绍与实战操作演示

Ansible Playbook nginx name 425    来源:    2025-04-20

Ansible 介绍与实战操作演示

一、Ansible 简介

Ansible 是一款开源的自动化运维工具,由 Red Hat 公司维护,主要用于配置管理、应用部署、任务自动化等场景。

核心特点

  • 无代理架构:通过 SSH 协议管理节点,无需在被管理节点安装客户端
  • 简单易用:基于 YAML 语法编写 Playbook,学习曲线平缓
  • 幂等性:多次执行同一操作不会产生副作用
  • 模块化设计:丰富的内置模块,支持自定义模块开发

二、Ansible 核心组件

  1. Inventory:定义管理的主机列表
  2. Playbook:自动化任务的 YAML 描述文件
  3. Module:执行具体任务的模块(如文件操作、软件包管理等)
  4. Role:组织 Playbook 的可重用组件
  5. Variable:定义变量实现配置灵活化

三、安装与配置

1. 安装 Ansible

# Ubuntu/Debian
sudo apt update
sudo apt install -y ansible

# CentOS/RHEL
sudo yum install -y epel-release
sudo yum install -y ansible

# macOS
brew install ansible

2. 基本配置

主配置文件通常位于 /etc/ansible/ansible.cfg,可以创建 ~/.ansible.cfg 进行个性化配置:

[defaults]
inventory = ./hosts
remote_user = root
private_key_file = ~/.ssh/id_rsa
host_key_checking = False

四、Inventory 文件示例

创建 hosts 文件:

[web]
web1.example.com ansible_host=192.168.1.101
web2.example.com ansible_host=192.168.1.102

[db]
db1.example.com ansible_host=192.168.1.201

[all:vars]
ansible_user=admin
ansible_ssh_private_key_file=~/.ssh/admin_key

五、实战操作演示

1. 基础命令操作

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

# 查看所有主机的磁盘空间
ansible all -a "df -h"

# 在 web 组主机上安装 nginx
ansible web -b -m apt -a "name=nginx state=present"

2. Playbook 示例

创建 webserver.yml

---
- name: Configure web server
  hosts: web
  become: yes

  vars:
    nginx_port: 8080

  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: latest
        update_cache: yes

    - name: Configure nginx
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/sites-available/default
      notify:
        - restart nginx

    - name: Ensure nginx is running
      service:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted

3. 使用 Roles 组织 Playbook

创建角色结构:

ansible-galaxy init roles/webserver

目录结构:

roles/webserver/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml

4. 高级功能演示

变量使用

vars:
  app_version: "1.2.3"
  db_config:
    host: "db.example.com"
    port: 3306

条件执行

tasks:
  - name: Install package on Debian
    apt:
      name: "{{ package_name }}"
      state: present
    when: ansible_os_family == "Debian"

循环

tasks:
  - name: Add multiple users
    user:
      name: "{{ item }}"
      state: present
      groups: "wheel"
    loop:
      - alice
      - bob
      - charlie

六、最佳实践

  1. 使用版本控制:将 Playbook 和 Roles 存储在 Git 仓库中
  2. 模块化设计:将复杂任务分解为多个 Roles
  3. 使用变量:避免硬编码,提高可重用性
  4. 测试 Playbook:使用 --check--diff 选项进行测试
  5. 文档化:为每个 Role 和 Playbook 添加清晰的注释

七、常用命令速查

# 测试主机连接
ansible all -m ping

# 执行临时命令
ansible web -a "uptime"

# 运行 Playbook
ansible-playbook site.yml

# 列出所有主机
ansible all --list-hosts

# 检查 Playbook 语法
ansible-playbook --syntax-check playbook.yml

# 测试运行(不实际执行)
ansible-playbook --check playbook.yml

八、总结

Ansible 提供了一种简单而强大的方式来自动化 IT 基础设施管理。通过 Playbook 和 Roles,可以实现复杂运维任务的标准化和自动化,显著提高运维效率和可靠性。