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, 偏差过滤, 子域名突变