自动化运维工具Ansible介绍
字数 2160 2025-08-18 11:37:57

Ansible自动化运维工具详解

一、Ansible基础介绍

1. 简介

Ansible是一款基于Python开发的自动化运维工具,集合了多种运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了以下功能:

  • 批量系统配置
  • 批量程序部署
  • 批量运行命令

Ansible基于模块工作,本身没有批量部署能力,真正实现批量部署的是Ansible运行的模块。Ansible主要提供框架,包括:

  • 连接插件(connection plugins):负责和被监控端实现通信
  • 主机清单(host inventory):指定操作的主机,是一个定义监控主机的配置文件
  • 各种模块:核心模块、command模块、自定义模块
  • 插件:完成记录日志邮件等功能
  • playbook:剧本,执行多个任务时使用,非必需但可以让节点一次性运行多个任务

2. 总体架构

Ansible采用无代理架构,通过SSH协议与远程主机通信,主要组件包括:

  • 控制节点(Control Node):运行Ansible命令的主机
  • 受管节点(Managed Nodes):被Ansible管理的主机
  • 清单文件(Inventory):定义受管节点
  • 模块(Modules):执行特定任务的代码单元
  • 插件(Plugins):扩展Ansible核心功能

3. 特性

  1. 无代理(no agents):不需要在被管控主机上安装任何客户端
  2. 无服务器端(no server):使用时直接运行命令即可
  3. 多语言模块(modules in any languages):可使用任何语言开发模块
  4. YAML配置(yam1, not code):使用YAML语言定制剧本playbook
  5. 基于SSH(ssh by default):默认使用SSH工作
  6. 强大的多层解决方案(strong multi-tier solution):可实现多级指挥

4. 优点

  1. 轻量级:无需在客户端安装agent,更新时只需在操作机上进行一次更新
  2. 高效:批量任务可以写成脚本,且不用分发到远程就可以执行
  3. 易维护:使用Python编写,相比Ruby语法更简单
  4. 支持sudo:可以方便地执行需要特权权限的操作

二、Ansible基础安装与配置

1. Ansible基础安装

(1) Python 2.7安装

Ansible基于Python开发,需要Python 2.7环境:

# 将python头文件拷贝到标准目录,以避免编译ansible时找不到所需的头文件
cd /usr/local/include/python2.7/
cp -a ./* /usr/local/include/

# 备份旧版的python,并符号链接新版的python
# 修改yum脚本,使其指向旧版本的python,以避免其无法运行
vi /usr/bin/yum
# 将 #!/usr/bin/python 改为 #!/usr/bin/python2.6

(2) 安装必要模块

# setuptools模块安装
# pycrypto模块安装
# PyYAML模块安装
# Jinja2模块安装
# paramiko模块安装
# simplejson模块安装

(3) Ansible安装

# 使用pip安装Ansible
pip install ansible

# 或从源码安装
# 下载源码包后执行
python setup.py install

2. Ansible配置

(1) SSH免密钥登录设置

Ansible默认使用SSH连接远程主机,配置免密登录可提高效率:

# 生成公钥私钥
ssh-keygen -t rsa

# 将公钥分发到其他服务器
ssh-copy-id user@remote_host

# 或在所有服务器上执行以下指令将公钥内容添加到~/.ssh/authorized_keys
cat /root/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

三、Ansible核心概念

1. 主机清单(Inventory)

Inventory文件定义了Ansible管理的主机,默认位置为/etc/ansible/hosts,格式如下:

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

[dbservers]
db1.example.com
db2.example.com

[production:children]
webservers
dbservers

2. 模块(Modules)

Ansible通过模块执行具体任务,常用模块包括:

  • command/shell:执行命令
  • copy:复制文件
  • file:管理文件和目录
  • yum/apt:包管理
  • service:管理服务
  • user/group:用户和组管理

3. Playbook

Playbook是Ansible的配置、部署和编排语言,使用YAML格式编写:

---
- hosts: webservers
  become: yes
  tasks:
    - name: Ensure Apache is installed
      yum:
        name: httpd
        state: present
    
    - name: Ensure Apache is running
      service:
        name: httpd
        state: started
        enabled: yes

四、Ansible使用示例

1. 基本命令

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

# 在所有主机上执行命令
ansible all -a "/bin/echo hello"

# 使用特定模块
ansible webservers -m yum -a "name=httpd state=present"

# 使用sudo权限
ansible dbservers -b -m yum -a "name=mysql-server state=present"

2. Playbook执行

# 运行playbook
ansible-playbook site.yml

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

# 列出playbook中所有任务
ansible-playbook --list-tasks site.yml

五、Ansible高级特性

1. 变量和Facts

Ansible支持多种变量定义方式:

  • Inventory变量
  • Playbook变量
  • 注册变量
  • Facts变量(系统自动收集的信息)
- hosts: all
  vars:
    http_port: 80
  tasks:
    - name: Print variable
      debug:
        msg: "The port is {{ http_port }}"

2. 模板(Templates)

使用Jinja2模板引擎动态生成配置文件:

# httpd.conf.j2
Listen {{ http_port }}
ServerName {{ ansible_fqdn }}
- name: Configure Apache
  template:
    src: httpd.conf.j2
    dest: /etc/httpd/conf/httpd.conf

3. 角色(Roles)

Roles是组织Playbook的高级方式,目录结构如下:

roles/
  common/
    tasks/
    handlers/
    files/
    templates/
    vars/
    defaults/
    meta/
  webservers/
    tasks/
    defaults/
    ...

六、Ansible最佳实践

  1. 版本控制:将Playbook和Roles纳入版本控制系统(如Git)
  2. 环境分离:为开发、测试和生产环境使用不同的Inventory文件
  3. 变量管理:敏感信息使用Ansible Vault加密
  4. 模块化:尽量使用官方模块而非shell命令
  5. 幂等性:确保Playbook可以安全地多次运行

七、Ansible Vault

用于加密敏感数据:

# 创建加密文件
ansible-vault create secret.yml

# 编辑加密文件
ansible-vault edit secret.yml

# 运行使用加密变量的Playbook
ansible-playbook --ask-vault-pass site.yml

八、Ansible Galaxy

Ansible Galaxy是一个共享Roles的社区平台:

# 搜索可用Roles
ansible-galaxy search 'nginx'

# 安装Role
ansible-galaxy install geerlingguy.nginx

# 初始化新Role
ansible-galaxy init my_role

九、Ansible Tower/AWX

Ansible Tower是Red Hat提供的企业级Ansible管理平台,AWX是其开源版本,提供:

  • 基于Web的用户界面
  • 任务调度
  • 可视化仪表盘
  • 访问控制
  • 审计日志

十、Ansible与云平台集成

Ansible提供模块支持主流云平台:

  • AWS (ec2, s3, rds等模块)
  • Azure (azure_rm模块系列)
  • Google Cloud (gcp模块系列)
  • OpenStack (os模块系列)
- name: Create EC2 instance
  ec2:
    key_name: mykey
    instance_type: t2.micro
    image: ami-123456
    wait: yes
    count: 3
    vpc_subnet_id: subnet-29e63245
    assign_public_ip: yes

总结

Ansible作为一款现代化的自动化运维工具,以其简单易用、无代理架构和强大的功能在DevOps领域广受欢迎。通过掌握Ansible的核心概念、Playbook编写和高级特性,可以显著提高IT基础设施的管理效率和可靠性。

Ansible自动化运维工具详解 一、Ansible基础介绍 1. 简介 Ansible是一款基于Python开发的自动化运维工具,集合了多种运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了以下功能: 批量系统配置 批量程序部署 批量运行命令 Ansible基于模块工作,本身没有批量部署能力,真正实现批量部署的是Ansible运行的模块。Ansible主要提供框架,包括: 连接插件(connection plugins) :负责和被监控端实现通信 主机清单(host inventory) :指定操作的主机,是一个定义监控主机的配置文件 各种模块 :核心模块、command模块、自定义模块 插件 :完成记录日志邮件等功能 playbook :剧本,执行多个任务时使用,非必需但可以让节点一次性运行多个任务 2. 总体架构 Ansible采用无代理架构,通过SSH协议与远程主机通信,主要组件包括: 控制节点(Control Node):运行Ansible命令的主机 受管节点(Managed Nodes):被Ansible管理的主机 清单文件(Inventory):定义受管节点 模块(Modules):执行特定任务的代码单元 插件(Plugins):扩展Ansible核心功能 3. 特性 无代理(no agents) :不需要在被管控主机上安装任何客户端 无服务器端(no server) :使用时直接运行命令即可 多语言模块(modules in any languages) :可使用任何语言开发模块 YAML配置(yam1, not code) :使用YAML语言定制剧本playbook 基于SSH(ssh by default) :默认使用SSH工作 强大的多层解决方案(strong multi-tier solution) :可实现多级指挥 4. 优点 轻量级 :无需在客户端安装agent,更新时只需在操作机上进行一次更新 高效 :批量任务可以写成脚本,且不用分发到远程就可以执行 易维护 :使用Python编写,相比Ruby语法更简单 支持sudo :可以方便地执行需要特权权限的操作 二、Ansible基础安装与配置 1. Ansible基础安装 (1) Python 2.7安装 Ansible基于Python开发,需要Python 2.7环境: (2) 安装必要模块 (3) Ansible安装 2. Ansible配置 (1) SSH免密钥登录设置 Ansible默认使用SSH连接远程主机,配置免密登录可提高效率: 三、Ansible核心概念 1. 主机清单(Inventory) Inventory文件定义了Ansible管理的主机,默认位置为 /etc/ansible/hosts ,格式如下: 2. 模块(Modules) Ansible通过模块执行具体任务,常用模块包括: command/shell :执行命令 copy :复制文件 file :管理文件和目录 yum/apt :包管理 service :管理服务 user/group :用户和组管理 3. Playbook Playbook是Ansible的配置、部署和编排语言,使用YAML格式编写: 四、Ansible使用示例 1. 基本命令 2. Playbook执行 五、Ansible高级特性 1. 变量和Facts Ansible支持多种变量定义方式: Inventory变量 Playbook变量 注册变量 Facts变量(系统自动收集的信息) 2. 模板(Templates) 使用Jinja2模板引擎动态生成配置文件: 3. 角色(Roles) Roles是组织Playbook的高级方式,目录结构如下: 六、Ansible最佳实践 版本控制 :将Playbook和Roles纳入版本控制系统(如Git) 环境分离 :为开发、测试和生产环境使用不同的Inventory文件 变量管理 :敏感信息使用Ansible Vault加密 模块化 :尽量使用官方模块而非shell命令 幂等性 :确保Playbook可以安全地多次运行 七、Ansible Vault 用于加密敏感数据: 八、Ansible Galaxy Ansible Galaxy是一个共享Roles的社区平台: 九、Ansible Tower/AWX Ansible Tower是Red Hat提供的企业级Ansible管理平台,AWX是其开源版本,提供: 基于Web的用户界面 任务调度 可视化仪表盘 访问控制 审计日志 十、Ansible与云平台集成 Ansible提供模块支持主流云平台: AWS (ec2, s3, rds等模块) Azure (azure_ rm模块系列) Google Cloud (gcp模块系列) OpenStack (os模块系列) 总结 Ansible作为一款现代化的自动化运维工具,以其简单易用、无代理架构和强大的功能在DevOps领域广受欢迎。通过掌握Ansible的核心概念、Playbook编写和高级特性,可以显著提高IT基础设施的管理效率和可靠性。