在本指南中,你将部署在 Azure Kubernetes 服务(AKS)上运行的高可用性 GitHub Actions 控制器和自承载代理。 自托管运行器使用 SMB Azure 文件共享进行持久存储。
重要
整个 AKS 文档和示例都提到了开源软件。 部署的软件从 AKS 服务级别协议、有限保修和 Azure 支持中排除。 与 AKS 一起使用开源技术时,请查阅各社区和项目维护人员提供的支持选项,以制定计划。
例如, Ray GitHub 存储库 描述了响应时间、用途和支持级别变化的多个平台。
Microsoft负责生成我们在 AKS 上部署的开源包。 该责任包括拥有构建、扫描、签名、验证和快速修复流程的完整所有权,并掌控容器镜像中的二进制文件。 有关详细信息,请参阅 AKS 的漏洞管理 和 AKS 支持范围。
什么是操作运行器控制器(ARC)?
Actions 运行程序控制器(ARC) 是一个 Kubernetes 运算符,用于协调和缩放 GitHub Actions 的自承载运行程序。 ARC 依赖持久卷(PV)在 Runner Pod 和容器作业 Pod 之间共享作业信息。 有关详细信息,请参阅 关于操作运行器控制器。
为什么在 AKS 上使用自承载 GitHub Actions?
在 AKS 上自托管 GitHub Actions 运行程序为组织提供了对其 CI/CD 基础设施的更大控制、可扩展性和安全性。 与共享和临时的 GitHub 托管运行程序不同,自托管运行程序提供以下优势:
- 自定义环境:定制运行程序以匹配特定的生成、测试或部署要求。
- 性能提升:利用持久性存储和缓存来减少生成时间并提高可靠性。
- 成本效率最大化:在自己的基础设施中动态调整运行程序,以优化频繁或长时间运行的工作流的效率。
- 增强的安全性和隔离性:保持对基础结构和数据的全面控制,这对于受监管行业或敏感工作负荷来说是理想的选择。
常见用例
- 企业 CI/CD 管道:对于需要一致、安全且可扩展的构建环境的团队。
- 大型单体代码库或 ML 管道:缓存或制品持久性至关重要。
- 性能优化:使用 Azure 文件高级 SMB 共享来减少元数据延迟并提高 IOPS。
先决条件
- 本指南假定基本了解 核心 Kubernetes 概念。
- 需要在 Azure 帐户中的订阅上拥有 所有者 或 用户访问管理员 和 参与者Azure 内置角色 。
可以使用本地 Azure CLI。
如果需要, 请安装 Azure CLI 以运行 CLI 引用命令。
本地 Azure CLI,了解如何 安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 将扩展与 Azure CLI 配合使用。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 需要有效的 GitHub 帐户。 请参阅基于存储库控件的 定价信息 。
- 需要安装以下资源:
- Azure CLI 2.56 或更高版本。
- Azure Kubernetes 服务 (AKS) 预览版扩展。
- jg 版本 1.5 或更高版本。
- kubectl 版本 1.21.0 或更高版本。
- openssl 版本 3.3.1 或更高版本。
- Visual Studio Code 或其他所选代码编辑器。
部署过程
本指南介绍如何:
- 使用 Azure CLI 创建多区域 AKS 群集。
- 在 AKS 持久卷中部署 Azure 文件共享。
- 在 AKS 上安装 GitHub Actions 运行程序控制器(ARC)。
- 安装 ARC 运行器规模集并在 AKS 上挂载文件共享。
- 使用 GitHub Actions 运行示例工作流。
部署体系结构
此参考体系结构演示如何使用 AKS 和 Azure 文件共享(SMB)实现 GitHub Actions 自承载运行程序解决方案。 该解决方案使组织能够在自己的 Azure 基础结构中安全地执行 GitHub 工作流作业,同时保持高效的存储管理和可伸缩性。
该体系结构由三个主要组件组成:
- GitHub 集成层:将工作流从 GitHub 存储库连接到 Azure 基础结构。
- AKS 业务流程层:管理容器化运行程序实例及其生命周期。
- 存储层:为执行器提供持久性和临时存储功能。
GitHub 集成层
GitHub 集成层将工作流从 GitHub 存储库连接到 Azure 基础结构。 工作流作业通过 GitHub api.github.com
githubusercontent.com
传送到自托管的运行器中执行。
AKS 群集编排层
AKS 群集业务流程层管理容器化运行程序实例及其生命周期。 群集拆分为两个命名空间: arc-controller
和 arc-runners
。
arc-controller
管理运算节点基础结构和作业监听器。
arc-runners
处理机密、访问控制和运行器 Pod。 运行器已容器化,使用短暂存储,并连接到共享卷和专用卷。
存储层
Azure 文件共享存储层通过 ReadWriteMany
提供 NuGet 文件共享服务的共享依赖项访问权限,并为执行器提供临时存储,所有这些均由持久卷声明支持。
后续步骤
供稿人
Microsoft维护本文。 以下贡献者最初撰写了这篇文章:
- 豪尔赫·阿尔特里奥 | 高级云倡导者
- Jeff Patterson | 首席产品经理
- Rena Shah |高级产品经理
- 谢哈尔·辛格·索罗特 |Product Manager 2
- Erin Schaffer | 内容开发人员 2