Azure DevOps与Kubernetes自托管代理的架构解析
·
Azure DevOps与Kubernetes自托管代理的架构解析
Azure DevOps允许在Kubernetes集群上部署自托管代理,以扩展CI/CD管道的执行能力。以下是关键架构组件和工作原理的解析。
Kubernetes自托管代理的核心组件
代理Pod模板
代理以Pod形式运行在Kubernetes集群中,通过docker run命令或Helm Chart部署。Pod模板需包含:
- Azure DevOps代理镜像(如
mcr.microsoft.com/azure-pipelines/vsts-agent:ubuntu-20.04) - 环境变量(如
AZP_URL、AZP_TOKEN、AZP_POOL) - 资源限制(CPU/内存请求与限制)
服务账户与RBAC
代理Pod需要配置具有适当权限的Kubernetes ServiceAccount,通常需授予以下权限:
- Pod创建/删除(用于动态生成构建Pod)
- 持久卷声明(如需构建缓存)
- 网络策略(允许与Azure DevOps服务通信)
工作流程与交互机制
代理注册与任务分配
- 代理Pod启动后,通过环境变量中的
AZP_URL和AZP_TOKEN向Azure DevOps注册。 - Azure DevOps将任务分配到代理所属的代理池,触发Pod内任务执行器启动。
动态构建环境
任务运行时可能生成临时Pod(如kaniko构建镜像),这些Pod由代理Pod通过Kubernetes API动态创建。构建完成后,临时Pod自动销毁。
网络与安全配置
出站连接要求
代理Pod需允许访问以下Azure DevOps端点:
dev.azure.com(HTTPS 443)vstsagentpackage.azureedge.net(代理二进制下载)
入站安全策略
建议通过NetworkPolicy限制代理Pod的入站流量,仅允许来自Azure DevOps控制平面的连接。
扩展性与弹性设计
水平自动扩展(HPA)
通过Kubernetes HorizontalPodAutoscaler实现代理自动扩缩容,指标通常包括:
- 待处理任务队列长度
- Pod CPU/内存使用率
故障恢复机制
- 代理Pod崩溃后由Kubernetes自动重启
- Azure DevOps自动重新分配失败任务到其他可用代理
典型部署模式示例
Helm Chart配置片段
agent:
count: 3
image: mcr.microsoft.com/azure-pipelines/vsts-agent:ubuntu-20.04
envVars:
AZP_URL: https://dev.azure.com/your-org
AZP_TOKEN: "your-pat-token"
AZP_POOL: k8s-pool
resources:
requests:
cpu: "1"
memory: "2Gi"
此架构通过Kubernetes的声明式管理能力,实现了代理的高效调度和资源隔离,适合大规模CI/CD工作负载场景。
更多推荐
所有评论(0)