【自动化运维神器Ansible】Ansible离线安装与入门完全指南
Ansible是一款基于Python开发的自动化运维工具,由Red Hat公司维护,采用YAML语言编写自动化脚本(Playbook)。Ansible作为自动化运维领域的标杆工具,以其简单易用、功能强大的特点赢得了广泛认可,随着自动化需求的不断增长,掌握Ansible将成为运维工程师和开发者的必备技能。Ansible 的主配置文件 (ansible.cfg) 是一个INI格式的文件,用于控制Ans
·
目录
3.2.2 [privilege_escalation] 部分
3.2.4 [persistent_connection] 部分
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将成为运维工程师和开发者的必备技能。
更多推荐
所有评论(0)