目录

1 Ansible核心介绍

1.1 什么是Ansible?

1.2 Ansible核心特点解析

1.2.1 基于Python生态

1.2.2 无代理架构优势

1.2.3 幂等性实现原理

2 Ansible离线安装指南

2.1 内网环境安装准备

2.2 分步安装过程

2.2.1 安装依赖包

2.2.2 安装Ansible主包

2.2.3 验证安装

2.3 常见问题解决

3 Ansible相关文件

3.1 配置文件概述

3.2 Ansible主配置文件解析

3.2.1 [defaults]部分

3.2.2 [privilege_escalation] 部分

3.2.3 [ssh_connection] 部分

3.2.4 [persistent_connection] 部分

3.2.5 重要配置建议

3.3 inventory主机清单

3.3.1 Inventory基础概念

3.3.2 静态Inventory示例

3.3.3 动态 Inventory

3.3.4 主机变量与组变量

3.3.5 特殊组和模式匹配

4 总结


1 Ansible核心介绍

1.1 什么是Ansible?

Ansible是一款基于Python开发的自动化运维工具,由Red Hat公司维护,采用YAML语言编写自动化脚本(Playbook)。它通过SSH协议实现无代理架构的配置管理、应用部署和任务自动化,现已成为DevOps领域的事实标准工具之一。
核心设计理念
  • 简单易用:YAML语法直观,学习曲线平缓
  • 无代理架构:无需在目标主机安装客户端
  • 幂等性:确保操作结果的一致性
  • 模块化设计:丰富的内置模块支持各种运维场景

1.2 Ansible核心特点解析

1.2.1 基于Python生态

  • 要求Python 2.6+(推荐Python 3.x)
  • 利用Python丰富的库生态扩展功能
  • 支持自定义模块开发(Python编写)

1.2.2 无代理架构优势

  • 部署简单:仅需控制节点安装Ansible
  • 维护方便:无需管理客户端版本
  • 安全可靠:基于SSH加密通信
  • 资源节省:不占用被管节点资源

1.2.3 幂等性实现原理

2 Ansible离线安装指南

2.1 内网环境安装准备

环境要求
  • CentOS/RHEL 7.x
  • Python 2.7.5+
  • SSH访问权限
  • RPM依赖包完整集合
  • 安装包结构
ansible/
├── dependencies/
│   ├── python-*.rpm
│   └── sshpass-*.rpm
└── ansible-2.9.27-1.el7.noarch.rpm

2.2 分步安装过程

2.2.1 安装依赖包

# 解压安装包
tar -zxvf ansible.tar.gz
cd ansible/

# 安装Python依赖(示例)
rpm -ivh python-babel-0.9.6-8.el7.noarch.rpm --nodeps --force
rpm -ivh python-markupsafe-0.11-10.el7.x86_64.rpm --nodeps --force
rpm -ivh python-enum34-1.0.4-1.el7.noarch.rpm --nodeps --force
rpm -ivh python-pycparser-2.14-1.el7.noarch.rpm --nodeps --force
rpm -ivh python2-pyasn1-0.1.9-7.el7.noarch.rpm --nodeps --force
rpm -ivh python-cffi-1.6.0-5.el7.x86_64.rpm --nodeps --force
rpm -ivh python-idna-2.4-1.el7.noarch.rpm --nodeps --force
rpm -ivh python-ply-3.4-11.el7.noarch.rpm --nodeps --force
rpm -ivh sshpass-1.06-2.el7.x86_64.rpm --nodeps --force
rpm -ivh python2-cryptography-1.7.2-2.el7.x86_64.rpm --nodeps --force
rpm -ivh python-paramiko-2.1.1-9.el7.noarch.rpm --nodeps --force
rpm -ivh python-jinja2-2.7.2-4.el7.noarch.rpm --nodeps --force
rpm -ivh python2-jmespath-0.9.4-2.el7.noarch.rpm --nodeps --force
rpm -ivh python2-httplib2-0.18.1-3.el7.noarch.rpm --nodeps --force

2.2.2 安装Ansible主包

rpm -ivh ansible-2.9.27-1.el7.noarch.rpm

2.2.3 验证安装

ansible --version

2.3 常见问题解决

  • 依赖冲突
# 使用--nodeps跳过依赖检查
rpm -ivh package.rpm --nodeps --force
  • Python版本不兼容
    • 确保系统Python版本≥2.6
    • 或配置虚拟环境
  • SSH连接问题
# vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False

3 Ansible相关文件

3.1 配置文件概述

[root@node2 ~]# ls -lrht /etc/ansible/
total 28K
drwxr-xr-x. 2 root root    6 Jan 16  2022 roles
-rw-r--r--. 1 root root  20K Jan 16  2022 ansible.cfg
-rw-r--r--. 1 root root 1.1K Mar 11 15:52 hosts20250311
-rw-r--r--. 1 root root  237 Mar 11 18:30 hosts
[root@node2 ~]# 
  • /etc/ansible/ansible.cfg:主配置文件
  • /etc/ansible/hosts:主机清单文件
  • /etc/ansible/roles/:用于存放角色的目录

3.2 Ansible主配置文件解析

Ansible 的主配置文件 (ansible.cfg) 是一个INI格式的文件,用于控制Ansible的各种行为。以下是该配置文件的主要部分和重要参数的解析:

3.2.1 [defaults]部分

这是最常用的配置部分,包含 Ansible 的默认行为设置:
  • inventory: 指定默认的inventory文件位置 (默认为/etc/ansible/hosts)
  • remote_user: 默认远程登录用户
  • roles_path: 角色搜索路径
  • host_key_checking: SSH 主机密钥检查 (建议设置为 False 以禁用)
  • gathering: 控制事实收集行为 (smart/implicit/explicit)
  • forks: 并行进程数 (默认为 5)
  • log_path: 日志文件路径
  • module_name: 默认模块 (默认为 command)
  • private_key_file: 默认私钥文件路径
  • vault_password_file: Vault 密码文件路径
  • display_skipped_hosts: 是否显示跳过的任务
  • nocows: 是否禁用 cowsay 输出 (1 为禁用)

3.2.2 [privilege_escalation] 部分

控制权限提升 (sudo/su 等) 相关设置:
  • become: 是否使用权限提升
  • become_method: 提升方法 (sudo/su/pbrun 等)
  • become_user: 提升到的用户 (默认为 root)
  • become_ask_pass: 是否提示输入提升密码

3.2.3 [ssh_connection] 部分

SSH 连接相关设置:
  • ssh_args: SSH 额外参数
  • pipelining: 启用管道传输 (可提高性能)
  • scp_if_ssh: 文件传输方式 (smart/scp/sftp)
  • control_path: SSH 控制路径设置
  • retries: SSH 连接重试次数

3.2.4 [persistent_connection] 部分

持久连接设置:
  • connect_timeout: 持久连接空闲超时 (秒)
  • command_timeout: 命令执行超时 (秒)

3.2.5 重要配置建议

  • 禁用主机密钥检查 (生产环境谨慎使用):
host_key_checking = False
  • 启用管道传输 (提高性能,需配置 sudoers):
pipelining = True
  • 设置默认远程用户:
remote_user = ansible
  • 增加并行进程数:
forks = 20
  • 启用持久连接:
[persistent_connection]
connect_timeout = 60
command_timeout = 30
  • 设置自定义角色路径:
roles_path = ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles

3.3 inventory主机清单

3.3.1 Inventory基础概念

Inventory 是 Ansible 管理的目标主机集合,支持静态文件(INI/YAML)和动态生成。核心功能:
  • 定义主机和主机组
  • 设置主机变量和组变量
  • 分层组织基础设施

3.3.2 静态Inventory示例

  • INI格式
[webservers]
web1.example.com ansible_user=admin
web2.example.com ansible_port=2222

[dbservers]
db[1:3].example.com  # 表示 db1, db2, db3

[cluster:children]   # 嵌套组
webservers
dbservers
  • YAML格式
all:
  children:
    webservers:
      hosts:
        web1.example.com:
          ansible_user: admin
        web2.example.com:
          ansible_port: 2222
    dbservers:
      hosts:
        db[1:3].example.com

3.3.3 动态 Inventory

  • 通过脚本或插件从外部系统(如 AWS、Kubernetes)实时获取主机列表。
  • 启用动态插件
[inventory]
enable_plugins = aws_ec2, yaml, ini  # 加载AWS和静态插件

3.3.4 主机变量与组变量

  • 内联定义(在Inventory中):
[dbservers]
db1.example.com ansible_mysql_port=3306
  • 独立文件:
inventory/
├── group_vars/dbservers.yml
├── host_vars/db1.example.com.yml

3.3.5 特殊组和模式匹配

  • 默认组
  • 模式匹配示例
ansible 'web*.example.com' -m ping       # 通配符
ansible 'webservers:!db1' -m ping        # 排除db1
ansible 'webservers:&dbservers' -m ping  # 交集

4 总结

Ansible作为自动化运维领域的标杆工具,以其简单易用、功能强大的特点赢得了广泛认可,随着自动化需求的不断增长,掌握Ansible将成为运维工程师和开发者的必备技能。
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐