前言

Ansible 作为轻量级、无代理的自动化运维工具,已被广泛用于批量配置管理和应用部署。然而,在规模化使用场景下,纯命令行模式的 Ansible 在任务管理、权限控制、审计追溯等方面存在明显不足。Ansible Tower(红帽官方商业版)及其开源上游 AWX 提供了完整的 Web UI,将 Ansible 的能力以可视化方式呈现,适合团队协作和规范化管理。

本文介绍 AWX/Tower 的核心功能、部署步骤及实战技巧,帮助运维团队快速搭建并用好这一平台。

一、AWX 与 Ansible Tower 的关系

维度 AWX Ansible Tower
定位 开源上游项目 商业产品
更新节奏 频繁(社区驱动) 稳定(Red Hat 支持)
授权 Apache 2.0 订阅制
核心功能 基本一致 认证、监控、支持服务

生产环境如需稳定性保障,建议使用 Ansible Tower;验证新功能或内部自建场景,推荐 AWX。

二、部署方案

2.1 环境要求

  • 操作系统:CentOS 7+ / Rocky 8+ / Ubuntu 20.04+
  • 内存:建议 4GB 以上(Tower 最低 2GB)
  • CPU:2 核以上
  • Docker 与 docker-compose 已安装(推荐 Standalone 部署)或 K8s 环境(用于 Operator 部署)
  • PostgreSQL 12+(Tower 内置,AWX 内置)

2.2 使用 docker-compose 快速部署 AWX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 安装 Docker 与 docker-compose
sudo yum install -y docker docker-compose
sudo systemctl enable --now docker

# 创建 AWX 目录
mkdir -p /opt/awx && cd /opt/awx
wget https://raw.githubusercontent.com/ansible/awx/master/installer/inventory
wget https://raw.githubusercontent.com/ansible/awx/master/installer/install.yml

# 修改 inventory 配置
cat > /opt/awx/inventory << 'EOF'
localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3

[all:vars]
django_superuser_password=YourStrongPass123!
admin_password=YourStrongPass123!
secret_key=your_secret_key_here_change_in_production
pg_hostname=localhost
pg_username=awx
pg_password=awxpass
pg_database=awx
pg_port=5432

docker_compose_project=awx
awx_container_name=awx_task
awx_web_container_name=awx_web
awx_websocket_container_name=awx_websocket
awx_rabbitmq_container_name=awx_rabbitmq
awx_postgres_container_name=awx_postgres

use_supervisord=true
host_port=80
protocol=http
EOF

# 执行安装(需要 10-20 分钟,取决于网络)
ansible-playbook -i inventory install.yml

安装完成后,访问 http://<服务器IP>,默认用户名 admin,密码为 django_superuser_password 中设定的值。

2.3 Kubernetes 部署 AWX(推荐生产场景)

1
2
3
4
5
6
7
8
9
# 使用 operator 方式部署
kubectl create namespace awx
helm repo add awx-operator https://ansible.github.io/awx-operator/
helm repo update

helm install awx awx-operator/awx-operator -n awx \
--set namespace=awx \
--set postgres_storage_class=nfs-client \
--set ee_base_path=/var/lib/awx/ear

三、核心功能与使用流程

3.1 组织与权限模型

AWX 采用三层权限模型:

  1. Organization(组织):最顶层,对应业务线或部门
  2. Team(团队):将用户分组,批量分配权限
  3. User(用户):本地用户或对接 LDAP/AD

建议在 LDAP 集成后,按部门创建 Team 并授予相应角色,避免逐个用户配置。

3.2 创建 Inventory(主机清单)

进入 Resources → Inventories → Add,有两种方式:

  • 手动添加:填写主机名/IP、变量
  • 使用智能主机组(Smart Host):基于正则表达式或变量条件动态筛选

生产中推荐使用 Source Control 方式,将 inventory 文件托管在 Git 仓库,确保清单版本化:

1
2
3
4
5
6
7
# inventory 文件示例
[webservers]
web01 ansible_host=10.0.1.101 ansible_user=deploy
web02 ansible_host=10.0.1.102 ansible_user=deploy

[databases]
db01 ansible_host=10.0.2.201 ansible_user=deploy

3.3 项目(Project)与 Git 集成

将 Playbook 托管在 GitLab/Gitea,AWX 通过 Webhook 实时拉取更新:

  1. 进入 Resources → Projects → Add
  2. 选择 SCM Type = Git,填入仓库地址和凭据
  3. 启用 Update on Launch,每次执行 Job 前自动同步最新 Playbook

3.4 任务模板(Job Template)与工作流

Job Template 是 AWX 的核心执行单元。一个标准流程:

  1. Survey:定义变量收集表单(如输入环境名称、版本号)
  2. Credentials:关联 SSH 密钥或 Vault 凭据
  3. 执行策略:选择并发数(Forks)、失败策略

工作流(Workflow) 将多个 Job Template 按条件串联,实现复杂场景:

1
2
3
4
Start
├─→ Job: 基础检查(条件:始终)→ 失败→ 通知
├─→ Job: 执行部署(条件:基础检查通过)
└─→ Job: 健康检查(条件:部署成功)→ 完成后通知

3.5 任务调度与通知集成

AWX 支持 Cron 风格的任务调度,可设置:

  • 每日凌晨执行一次配置审计
  • 每 5 分钟执行一次探活检测
  • 配合 Notification Templates 对接钉钉、企业微信或邮件

通知模板配置示例(企业微信):

1
2
3
4
5
{
"notification_type": "webhook",
"webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/...",
"webhook_headers": {"Content-Type": "application/json"}
}

四、运维实践建议

4.1 命名规范

为便于管理,建议统一命名规则:

  • 项目:prj-<业务线>-<应用名>
  • 主机清单:inv-<环境>(如 inv-prodinv-test
  • 任务模板:job-<操作类型>-<对象>(如 job-deploy-nginx

4.2 敏感信息管理

使用 Ansible Vault 加密敏感变量文件,在 AWX 中通过 Custom Credential 类型引用:

1
2
3
4
# 创建 Vault 文件
ansible-vault create group_vars/all/vault.yml

# 在 AWX Credential 中选择 Vault 类型,关联上述 Vault 文件

4.3 审计日志

AWX 自动记录所有任务执行的输出和结果,可导出为 CSV,满足合规审计需求。建议定期将审计日志归档至日志服务器。

4.4 高可用部署

生产环境推荐:

  • 使用 PostgreSQL 主从复制替代内置 PostgreSQL
  • Redis 独立部署(AWX 内置 Redis 用于消息队列)
  • Web 层使用 Nginx 反向代理 + Keepalived 做 VIP 漂移
  • AWX Task/Web 节点水平扩展,多节点共享数据库和 Redis

五、常见问题

Q1:Job 运行报 “Permission denied”

检查 Credential 中 SSH 密钥是否正确、私钥权限是否为 0600,远程目标用户是否在远程服务器的 sudoers 中有免密权限。

Q2:AWX Web 界面加载缓慢

通常是 awx_web 容器内存不足导致,增加容器内存限制:

1
docker-compose up -d awx_web --memory=2G

Q3:Git 仓库无法访问

检查 AWX 容器内网络 DNS 配置,编辑 /etc/docker/daemon.json 添加 DNS:

1
2
3
{
"dns": ["8.8.8.8", "114.114.114.114"]
}

结语

AWX/Tower 将 Ansible 的命令行能力转化为团队协作平台,适合 5 人以上运维团队或需要规范化管理的场景。重点在于:规范主机清单管理、善用 Vault 保护密钥、通过工作流串联复杂任务,并结合 LDAP/AD 实现精细化权限控制。平台搭建不难,用好才是关键。