使用 Azure 文件概述在 Azure Kubernetes 服务(AKS)上部署高度可用的 GitHub Actions

在本指南中,你将部署在 Azure Kubernetes 服务(AKS)上运行的高可用性 GitHub Actions 控制器和自承载代理。 自托管运行器使用 SMB Azure 文件共享进行持久存储。

重要

整个 AKS 文档和示例都提到了开源软件。 部署的软件从 AKS 服务级别协议、有限保修和 Azure 支持中排除。 与 AKS 一起使用开源技术时,请查阅各社区和项目维护人员提供的支持选项,以制定计划。

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。

先决条件

  • 如需在本地运行 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。

部署过程

本指南介绍如何:

  • 使用 Azure CLI 创建多区域 AKS 群集。
  • 在 AKS 持久卷中部署 Azure 文件共享。
  • 在 AKS 上安装 GitHub Actions 运行程序控制器(ARC)。
  • 安装 ARC 运行器规模集并在 AKS 上挂载文件共享。
  • 使用 GitHub Actions 运行示例工作流。

部署体系结构

此参考体系结构演示如何使用 AKS 和 Azure 文件共享(SMB)实现 GitHub Actions 自承载运行程序解决方案。 该解决方案使组织能够在自己的 Azure 基础结构中安全地执行 GitHub 工作流作业,同时保持高效的存储管理和可伸缩性。

包含 AKS 上的 Azure 文件的 GitHub Actions 的体系结构关系图的屏幕截图。

该体系结构由三个主要组件组成:

  1. GitHub 集成层:将工作流从 GitHub 存储库连接到 Azure 基础结构。
  2. AKS 业务流程层:管理容器化运行程序实例及其生命周期。
  3. 存储层:为执行器提供持久性和临时存储功能。

GitHub 集成层

GitHub 集成层将工作流从 GitHub 存储库连接到 Azure 基础结构。 工作流作业通过 GitHub api.github.comgithubusercontent.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