【问题标题】:Azure DevOps Build Agents in KubernetesKubernetes 中的 Azure DevOps 构建代理
【发布时间】:2021-11-18 23:35:18
【问题描述】:
我们计划在 Kubernetes pod 中运行我们的 Azure Devops 构建代理。但是通过互联网,找不到任何推荐的方法。
详情:
- Azure Devops 服务器
- AKS- 1.19.11
寻找
- AKS kubernetes 集群,其中 ADO 可以使用依赖项触发其管道。
- 随着来自 ADO 的负载将启动,Pod 的缩放应该发生
- 目前是否有任何默认的 MS 提供的映像可用于构建代理?
- 在我们运行基于 Java 的应用程序时,使用 BuildAgents 和 zulu jdk debian 的映像应该是轻量级的。
任何建议都非常感谢
【问题讨论】:
标签:
azure
kubernetes
azure-devops
azure-aks
【解决方案1】:
This article 提供在 Docker 中运行 Azure Pipelines 代理的说明。您可以在 Azure Pipelines 中设置自托管代理,以在 Windows Server Core(适用于 Windows 主机)或 Ubuntu 容器(适用于 Linux 主机)中运行 Docker。
在我们运行基于 Java 的应用程序时,使用 BuildAgents 和 zulu jdk debian 的图像应该是轻量级的。
创建基本构建代理后,您可以扩展 Dockerfile 以包含其他工具及其依赖项,或者将其用作基础层来构建您自己的容器。只需确保以下内容保持不变:
-
start.sh 脚本由 Dockerfile 调用。
-
start.sh 脚本是 Dockerfile 中的最后一个命令。
- 确保衍生容器不会删除 Dockerfile 中声明的任何依赖项。
注意: Docker was replaced with containerd 在 Kubernetes 1.19 中,Docker-in-Docker 变得不可用。在 docker 容器中运行 docker 的几个用例:
- docker 中 docker 的一个潜在用例是 CI 管道,您需要在代码构建成功后构建 docker 镜像并将其推送到容器注册表。
- 使用 VM 构建 Docker 映像非常简单。但是,当您计划将 Jenkins Docker-based dynamic agents 用于您的 CI/CD 管道时,docker 中的 docker 是必不可少的功能。
- 沙盒环境。
- 用于在本地开发工作站上进行实验。
如果您的用例需要在容器内运行 docker,那么您必须使用版本 here 所示,或者在替代 docker 环境如图here。
否则,如果您是 deploying the self hosted agent on AKS,则必须将第 4 步中的 azdevops-deployment 部署 here 更改为:
apiVersion: apps/v1
kind: Deployment
metadata:
name: azdevops-deployment
labels:
app: azdevops-agent
spec:
replicas: 1 #here is the configuration for the actual agent always running
selector:
matchLabels:
app: azdevops-agent
template:
metadata:
labels:
app: azdevops-agent
spec:
containers:
- name: azdevops-agent
image: <acr-server>/dockeragent:latest
env:
- name: AZP_URL
valueFrom:
secretKeyRef:
name: azdevops
key: AZP_URL
- name: AZP_TOKEN
valueFrom:
secretKeyRef:
name: azdevops
key: AZP_TOKEN
- name: AZP_POOL
valueFrom:
secretKeyRef:
name: azdevops
key: AZP_POOL
随着来自 ADO 的负载将启动,Pod 的缩放应该发生
您可以使用 cluster-autoscaler 和 horizontal pod autoscaler。结合使用时,水平 pod 自动缩放器专注于运行满足应用程序需求所需的 pod 数量。集群自动缩放器专注于运行支持计划 pod 所需的节点数量。 [Reference]