hailugebru/azure-sre-agents-aks
GitHub: hailugebru/azure-sre-agents-aks
一套 Azure SRE 代理与 AKS 端到端演示脚本,实现节点自动配置、KEDA 弹性伸缩与自主事件响应。
Stars: 0 | Forks: 0
# AKS NAP(节点自动配置)演示 — PowerShell 脚本
此文件夹包含用于部署启用 **Node Auto-Provisioning(NAP/Karpenter)** 的 AKS 集群、运行 [AKS Store Demo](https://github.com/Azure-Samples/aks-store-demo) 应用程序,以及模拟 **OOMKilled** 场景以供 Azure SRE 代理进行故障排查的 PowerShell 脚本。
## 先决条件
- 已安装 [Azure CLI](https://learn.microsoft.com/cli/azure/install-azure-cli)
- 已安装 [kubectl](https://kubernetes.io/docs/tasks/tools/)
- 拥有可创建 AKS 集群的 Azure 订阅权限
- PowerShell 7+(推荐)
## 开始之前
1. 打开 `00-variables.ps1`,并使用你的 Azure 订阅 ID 更新 `$SUBSCRIPTION_ID` 变量。
2. 确保已登录 Azure:
az login
## 分步说明
请按顺序从此文件夹中运行每个脚本。每个步骤都依赖于前一个步骤。
### 步骤 0 — 加载变量
```
. .\00-variables.ps1
```
将共享环境变量(`$SUBSCRIPTION_ID`、`$RESOURCE_GROUP`、`$LOCATION`、`$CLUSTER_NAME`)加载到会话中。**请首先使用 dot-source 方式加载** — 其他脚本会自动执行此操作。
### 步骤 1 — 先决条件
```
.\01-prerequisites.ps1
```
- 设置当前活动的 Azure 订阅
- 注册 `NodeAutoProvisioningPreview` 功能标记(等待注册完成)
- 刷新 `Microsoft.ContainerService` 提供程序
- 安装或更新 `aks-preview` CLI 扩展
### 步骤 2 — 创建 AKS 集群
```
.\02-create-cluster.ps1
```
- 创建资源组
- 创建以下配置的 AKS 集群:
- **启用 NAP**(`--node-provisioning-mode Auto`)
- Azure CNI 覆盖网络
- Cilium 数据平面
- **启用托管 Prometheus**(`--enable-azure-monitor-metrics`)
- 将集群凭据下载到你的 kubeconfig
### 步骤 3 — 部署 AKS Store 演示应用
```
.\03-deploy-app.ps1
```
- 创建 `pets` 命名空间
- 部署 `./manifests/aks-store` 中的本地清单文件(包含 MongoDB、RabbitMQ、order-service、product-service、makeline-service、store-front、store-admin、virtual-customer、virtual-worker)
- 等待所有 Pod 就绪
- 打印 Store Front 的访问地址
### 步骤 4 — 启用 NAP(污点系统节点池)
```
.\04-setup-nap.ps1
```
- 发现默认系统节点池
- 对系统节点池应用 `CriticalAddonsOnly=true:NoExecute` 污点
- 此操作会驱逐应用 Pod → NAP/Karpenter 会自动预配新的用户节点
**监控 NAP 活动:**
```
kubectl get events -A --field-selector source=karpenter -w
kubectl get nodes,pods -n pets -o wide -w
```
**检查 NAP 节点池:**
```
kubectl get nodepool
kubectl describe nodepool default
```
### 步骤 5 — ARM64 节点池配置
```
.\05-arm-nodepool.ps1
```
- 应用一个 Karpenter `NodePool`,优先选择 **ARM64 D 系列** 虚拟机
- NAP 将优先为工作负载预配 ARM 节点(更具成本效益)
### 步骤 6 — ARM64 节点池 v2(Azure Linux)
```
.\06-arm-nodepool-v2.ps1
```
- 为 **Azure Linux**(CBL-Mariner)应用 `AKSNodeClass`
- 将 ARM 节点池更新为使用该节点类
### 步骤 7 — 配置 KEDA 缩放器
```
.\07-setup-keda-scaler.ps1
```
- 为 `virtual-worker` 部署 Secret、TriggerAuthentication 和 ScaledObject
- KED A 根据 RabbitMQ 队列长度自动缩放 `virtual-worker` 的副本数
**测试缩放:**
```
kubectl scale deployment virtual-customer -n pets --replicas=4
kubectl get deploy -n pets -w
kubectl exec rabbitmq-0 -n pets -- rabbitmqctl list_queues
```
### 步骤 8 — 配置 GitHub 事后事件自动化(门户)
此步骤在 Azure 门户中完成:**[sre.azure.com](https://sre.azure.com)**。
请先运行辅助脚本以打印配置检查清单:
```
.\08-setup-github-issues.ps1
```
**A — 添加 GitHub MCP 连接器**
1. 转到 **Builder > Connectors > + Add connector**
2. 选择 **MCP** 选项卡 → **GitHub MCP server**
3. 门户会自动填充 `https://api.githubcopilot.com/mcp/`,并锁定 **Authentication method** 为 **Bearer token** —— 这是预期的配置。MCP 连接器使用 PAT/Bearer 令牌,而非 OAuth。
4. 在 `github.com/settings/tokens` 生成 PAT,并将其粘贴到 **PAT or API key** 字段。
| PAT 类型 | 所需作用域 |
|---|---|
| 经典 | `repo` |
| 精细化管理(推荐) | `Issues: Read and write`,范围限定为 `hailugebru/azure-sre-agents-aks` |
5. 在新建的连接器上选择 **Edit** → **MCP Tools** → 启用 `create_issue`(可选 `list_issues`)
6. 选择 **Save**
**B — 创建 `github-issue-tracker` 子代理**
1. 转到 **Builder > Subagent builder > + Create subagent**
2. 名称:`github-issue-tracker` | 自主性:**Autonomous**
3. 添加工具:从 `github-mcp` 连接中选择 `create_issue`
4. 选择 **Save**
**C — 更新事后事件响应计划自定义指令**
将指令 5 替换为:
```
5. After successful resolution, invoke the github-issue-tracker subagent to create
a GitHub issue in hailugebru/azure-sre-agents-aks with the incident ID, root
cause, patch applied, and a recommendation to update the source manifest in Git.
```
## 自行尝试
如果你来自博客文章,本 README 即为完整的设置附录。
1. 访问 Azure SRE 代理。
2. 克隆演示仓库,并在自己的订阅上运行设置脚本。
3. 先在非生产资源组上使用 `Reader + Review` 模式。
4. 在验证代理的推理与修复质量后,再扩展到 `Privileged + Autonomous` 模式。
## 完整设置详情
本 README 包含博客演示中使用的完整 AKS 部署步骤、连接器配置和事后事件工件设置:
- AKS 集群 + NAP 配置
- KEDA 缩放器配置
- Azure SRE 代理角色分配
- GitHub 连接器与问题自动化
- Teams 连接器配置
### 资源
| 资源 | 链接 |
|---|---|
| 演示仓库 | [github.com/hailugebru/azure-sre-agents-aks](https://github.com/hailugebru/azure-sre-agents-aks) |
| Azure SRE 代理文档 | [learn.microsoft.com/azure/sre-agent](https://learn.microsoft.com/azure/sre-agent/) |
| AKS Store 演示 | [github.com/Azure-Samples/aks-store-demo](https://github.com/Azure-Samples/aks-store-demo) |
| 节点自动配置 | [learn.microsoft.com/azure/aks/node-autoprovision](https://learn.microsoft.com/azure/aks/node-autoprovision) |
| AKS 上的 KEDA | [learn.microsoft.com/azure/aks/keda-about](https://learn.microsoft.com/azure/aks/keda-about) |
## 清理
完成之后,若要删除所有 Azure 资源,请运行:
```
. .\00-variables.ps1
az group delete -n $RESOURCE_GROUP --yes --no-wait
```
## 文件夹结构
```
nap/
├── pwsh/ ← You are here (PowerShell scripts)
│ ├── 00-variables.ps1
│ ├── 01-prerequisites.ps1
│ ├── 02-create-cluster.ps1
│ ├── 03-deploy-app.ps1
│ ├── 04-setup-nap.ps1
│ ├── 05-arm-nodepool.ps1
│ ├── 06-arm-nodepool-v2.ps1
│ ├── 07-setup-keda-scaler.ps1
│ ├── 08-setup-github-issues.ps1
│ ├── README.md
│ └── manifests/
│ ├── aks-store/
│ │ ├── 00-mongodb.yaml
│ │ ├── 01-rabbitmq.yaml
│ │ ├── 02-order-service.yaml
│ │ ├── 03-makeline-service.yaml
│ │ ├── 04-product-service.yaml
│ │ ├── 05-store-front.yaml
│ │ ├── 06-store-admin.yaml
│ │ ├── 07-virtual-customer.yaml
│ │ └── 08-virtual-worker.yaml
│ ├── arm-nodepool-profile.yaml
│ ├── arm-nodepool-profile-v2.yaml
│ └── virtual-worker-scaler.yaml
├── cli/
├── README.md
└── workshop/
```
标签:AI合规, AKS, Autonomous Response, Azure, Azure CNI Overlay, Azure Monitor, Azure SRE Agent, Cilium, Cloud Operations, Demo Script, End-to-End Demo, Incident Response, Infrastructure as Code, IPv6, Karpenter, KEDA, Libemu, NAPA, Node Auto-Provisioning, NPM, OOMKilled, Pandas, PowerShell, SRE, Step-by-Step Guide, 偏差过滤, 子域名突变