AIOpsLab高级部署指南:使用Terraform和Ansible在Azure上搭建生产环境
AIOpsLab是一个全面的框架,用于设计、开发和评估自主AIOps代理。本文将详细介绍如何使用Terraform和Ansible在Azure上快速搭建AIOpsLab的生产环境,无论您是开发新手还是有经验的工程师,都能通过本指南轻松完成部署。
AIOpsLab架构概览
AIOpsLab采用模块化设计,主要由故障生成器、工作负载生成器、协调器和评估器等核心组件构成。以下是AIOpsLab的架构图,展示了各组件之间的交互关系:
核心组件说明
- 故障库(Fault library):包含各种故障注入模式和策略
- 故障生成器(Fault Generator):负责在系统中注入指定故障
- 工作负载策略(Workload Policy):定义系统负载模式和规则
- 工作负载生成器(Workload Generator):生成模拟真实场景的工作负载
- 协调器(Orchestrator):核心控制组件,协调各模块工作
- 遥测收集器(Telemetry Collector):收集系统状态和遥测数据
- 评估器(Evaluator):评估AIOps代理的性能和解决方案质量
部署前准备工作
在开始部署之前,请确保您的环境满足以下要求,并完成必要的准备步骤。
软件要求
| 工具 | 版本 | 说明 |
|---|---|---|
| Python | 3.11+ | 用于运行部署脚本 |
| Terraform | 1.6+ | 用于Azure基础设施编排 |
| Ansible | 最新版 | 用于自动化配置管理 |
| Azure CLI | 最新版 | 用于Azure资源管理 |
快速安装依赖(Ubuntu/Debian)
# 安装Ansible
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible -y
# 安装Python依赖
pip install pyyaml
Azure账户设置
# 登录Azure
az login
# 设置订阅
az account set --subscription "<subscription-id>"
# 创建资源组(如果需要)
az group create --name aiopslab-rg --location eastus
# 生成SSH密钥(如果需要)
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
快速部署AIOpsLab
AIOpsLab提供了两种部署模式,您可以根据实际需求选择适合的方式。
模式A:控制器VM上运行AIOpsLab(推荐用于完整功能)
在控制器VM上直接运行AIOpsLab,设置完全自动化:
# 默认克隆模式:在控制器上克隆仓库
python3 deploy.py --apply --resource-group <your-rg> --workers 2 --mode A
# 开发模式:将本地代码同步到控制器而非克隆
python3 deploy.py --apply --resource-group <your-rg> --workers 2 --mode A --dev
--mode A设置会自动执行以下操作(通过scripts/ansible/setup_aiopslab.yml实现):
- 在控制器上安装Python 3.11、Poetry、Helm和git
- 将用户添加到
docker组(VirtualizationFaultInjector需要) - 克隆仓库及子模块(克隆模式)或同步本地代码(开发模式)
- 生成
aiopslab/config.yml,设置k8s_host: localhost - 运行
poetry env use python3.11 && poetry install - 使用
kubectl get nodes验证集群访问
部署完成后,通过SSH连接到控制器运行实验:
ssh -i ~/.ssh/id_rsa azureuser@<controller-ip>
cd ~/AIOpsLab
eval $(poetry env activate)
python3 cli.py
模式B:本地运行AIOpsLab(适合开发)
deploy.py --mode B(默认模式)会自动处理所有设置:
python3 deploy.py --apply --resource-group <your-rg> --workers 2 --mode B
此模式会自动:
- 安装kubectl、helm和poetry(如果缺失)
- 验证kubeconfig和集群连接
- 生成包含正确控制器IP的
aiopslab/config.yml - 运行
poetry env use python3.11 && poetry install - 打印成功项和需手动操作项的摘要表
部署完成后,直接在本地启动:
eval $(poetry env activate)
python3 cli.py
自定义部署选项
AIOpsLab提供了丰富的自定义选项,可以根据您的需求调整部署参数。
自定义部署示例
指定工作节点数量和VM大小:
python deploy.py --apply \
--workers 5 \
--vm-size Standard_D8s_v3 \
--resource-group my-rg \
--prefix myaiops \
--ssh-key ~/.ssh/custom_key.pub
可用选项说明
--plan dry-run: 显示将要创建的资源
--apply 部署基础设施并设置集群
--destroy 销毁所有基础设施
--setup-only 重新运行AIOpsLab设置而不重新配置(使用现有Terraform状态)
--workers N 工作节点数量(默认: 2)
--vm-size SIZE Azure VM大小(默认: Standard_B2s)
--resource-group RG Azure资源组(默认: aiopslab-rg)
--prefix PREFIX 资源名称前缀(默认: aiopslab)
--ssh-key PATH SSH公钥路径(默认: ~/.ssh/id_rsa.pub)
--allowed-ips ADDR SSH和K8s API的NSG源地址,使用'*'表示开放(默认)
--mode {A,B} A: AIOpsLab在控制器VM上; B: 本地运行AIOpsLab(默认: B)
--dev A模式专用: 使用rsync同步本地代码而非git克隆
--debug 启用调试日志
手动分步部署(高级选项)
如果您需要更多控制或进行调试,可以手动运行每个步骤:
步骤1: 使用Terraform配置Azure VM
cd scripts/terraform
terraform init
terraform plan -var="resource_group_name=<your-rg>" -var="worker_vm_count=3"
terraform apply -var="resource_group_name=<your-rg>" -var="worker_vm_count=3"
步骤2: 生成Ansible清单
python generate_inventory.py
# 这将在../ansible/目录下创建包含VM IP和SSH配置的inventory.yml
步骤3: 运行Ansible Playbooks
cd ../ansible
# 在所有节点上安装Docker和Kubernetes包
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory.yml setup_common.yml
# 初始化K8s集群并加入工作节点
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory.yml remote_setup_controller_worker.yml
步骤4: 验证集群
# Playbook会自动将kubeconfig复制到您的~/.kube/config
kubectl get nodes
AIOpsLab部署架构
AIOpsLab的部署架构如下所示,展示了从任务定义到故障注入和监控的完整流程:
部署内容详解
基础设施(Terraform)
- 1个控制器VM(Kubernetes控制平面)
- N个工作节点VM(可配置,默认2个)
- 虚拟网络和子网(10.0.0.0/16)
- 网络安全组(SSH访问)
- 所有VM的公网IP
- 网络接口
软件栈(Ansible)
- Docker CE + cri-dockerd
- Kubernetes v1.31(kubeadm, kubelet, kubectl)
- Flannel CNI插件
- 完全配置的K8s集群
部署后验证与管理
验证集群状态
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# aiopslab-controller Ready control-plane 5m v1.31.x
# aiopslab-worker-1 Ready <none> 3m v1.31.x
# aiopslab-worker-2 Ready <none> 3m v1.31.x
销毁基础设施
当您完成实验后,可以安全地销毁所有资源:
python deploy.py --destroy \
--resource-group aiopslab-rg \
--ssh-key ~/.ssh/id_rsa.pub
销毁前会提示确认,确保不会意外删除资源。
成本管理与优化
推荐VM规格与成本
| VM规格 | vCPUs | 内存 | 用途 | 月成本* |
|---|---|---|---|---|
| Standard_B2s | 2 | 4 GB | 开发/测试 | ~$30 |
| Standard_D4s_v3 | 4 | 16 GB | 小型生产环境 | ~$120 |
| Standard_D8s_v3 | 8 | 32 GB | 中型生产环境 | ~$240 |
| Standard_D16s_v3 | 16 | 64 GB | 大型生产环境 | ~$480 |
*美国东部地区的大致成本
节省成本的建议
- 不使用时销毁资源:
python deploy.py --destroy - 开发/测试使用B系列VM
- 停止而非删除VM:
az vm deallocate --resource-group aiopslab-rg --name aiopslab-controller
常见问题解决
SSH连接超时
症状:部署在"Waiting for SSH"处挂起
解决方法:
- 检查网络安全组是否允许您的IP
- 验证SSH密钥路径是否正确
- 等待更长时间(VM启动可能较慢)
# 手动测试SSH连接
ssh -i ~/.ssh/id_rsa -v azureuser@<vm-ip>
Ansible Playbook失败
解决方法:手动重新运行Ansible:
cd scripts/ansible
# 运行通用设置
ansible-playbook -i inventory.yml setup_common.yml
# 运行集群设置
ansible-playbook -i inventory.yml remote_setup_controller_worker.yml
节点未就绪
解决方法:检查Flannel CNI:
kubectl get pods -n kube-system | grep flannel
# 如果未运行,重新应用:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
安全最佳实践
安全检查清单
-
NSG规则:默认SSH对0.0.0.0/0开放 - 限制访问!
# 使用--allowed-ips限制访问(例如Microsoft CorpNet) python deploy.py --apply --workers 2 --allowed-ips CorpNetPublic -
SSH密钥:使用4096位RSA或Ed25519并设置密码
-
生产环境:考虑使用Azure Bastion进行安全访问
-
环境隔离:为生产/开发/测试使用单独的资源组
总结
通过本指南,您已经了解如何使用Terraform和Ansible在Azure上部署AIOpsLab的生产环境。无论是快速部署还是自定义配置,AIOpsLab都提供了灵活的选项来满足不同需求。
AIOpsLab的部署脚本位于scripts/terraform/目录,包含deploy.py(主入口点)、Terraform配置文件和generate_inventory.py等工具。Ansible playbooks位于scripts/ansible/目录,用于K8s设置和AIOpsLab配置。
现在,您可以开始使用AIOpsLab设计和评估自主AIOps代理,探索更多可能性!
要开始使用AIOpsLab,请克隆仓库:
git clone https://gitcode.com/gh_mirrors/ai/AIOpsLab
cd AIOpsLab
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





