GitHub Enterprise 的 MinIO 对象存储

GitHub Enterprise 的 MinIO 对象存储

开发人员生成的非结构化数据是存储需求的主要驱动力。使用 GitHub Actions 和 Packages 构建的工件的数据增长是由多个环境每天的多个版本驱动的,比其他类型的数据产生更快的增长。

GitHub 企业概述


这种数据生成的核心是 GitHub Enterprise。GitHub Enterprise 的成功基于这样一个事实:它允许开发人员在整个开发过程中使用他们熟悉的工具。这包括流行的 IDE 和 CI/CD 工具,并围绕 Actions 和 Packages 进行组织。

  • GitHub Actions是一个持续集成和持续交付 (CI/CD) 平台,可让您自动化构建、测试和部署管道。您可以创建工作流来构建和测试存储库中的每个拉取请求,或将合并的拉取请求部署到生产环境。

  • GitHub Packages是一个用于托管和管理包(包括容器和其他依赖项)的平台。GitHub Packages 将您的源代码和包合并到一个地方,以提供集成的权限管理和计费,因此您可以在 GitHub 上集中进行软件开发。


它们一起在企业环境中以惊人的速度生成数据,并且需要复杂的存储和检索功能。

两块相同的拼图

所有这些数据都需要一个复杂的云原生存储系统。该系统理想地兼容 S3、高性能、可无缝扩展到数百个 PB、软件定义、多云、安全且有弹性。

换句话说,GitHub Enterprise 需要 MinIO。

让我们快速浏览一下需求:

  • S3 兼容— 开发人员现在使用 RESTful API。这就是 S3——RESTful。用于对象存储的 S3 API 是事实上的标准。MinIO 是部署最广泛的 Amazon S3 替代方案,并且有近十亿次 Docker 拉取来证明这一点。没有比 MinIO 运行在更多架构、更多类型硬件和更多用例中的 S3 兼容对象存储。这就是为什么它“适用于”数十万个应用程序的原因。

  • 高性能——MinIO 是世界上最快的对象存储,GET/PUT 速度分别超过 325 GB/s 和 165 GB/s。存储和检索速度很快——无论对象大小如何。MinIO 的所有基准测试均已发布——请随时在此处查看

  • 无缝可扩展——MinIO 通过称为服务器池的概念进行扩展,该概念专为硬件异构性而设计。GitHub Enterprise 实例增长迅速,变得非常大且寿命长。MinIO 非常适合这些用例。

  • 软件定义——GitHub Enterprise 是一个软件定义的解决方案。它将与 MinIO 这样的软件定义存储配对是有道理的。更好的经济性、更好的性能调整、更好的运营管理——当您采用软件定义时,一切都会变得更好。

  • 多云——GitHub Enterprise 无处不在;它的存储解决方案也需要。MinIO 在每个公共云、私有云和边缘(GitHub 团队非常感兴趣的领域)上运行。他们在哪里,我们就在哪里。

  • 安全——GitHub Enterprise 负责企业最重要的软件资产,因此它需要像它一样重视安全性的存储。MinIO 的加密方案支持使用现代行业标准加密算法(例如 AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC)进行粒度对象级加密。MinIO 与 S3 加密语义完全兼容,还通过包括对非 AWS 密钥管理服务(例如 Hashicorp Vault、Gemalto KeySecure 和 Google Secrets Manager)的支持来扩展 S3。当加密打开时,MinIO 仍然保持高性能。

  • 集成——MinIO 支持使用外部密钥管理系统(KMS)。如果客户端请求 SSE-S3,或者启用了自动加密,则 MinIO 服务器使用唯一的对象密钥加密每个对象,该对象密钥由 KMS 管理的主密钥保护。

  • 弹性——保护数据不仅仅是加密。不变性是对象存储框架的核心,MinIO 支持完整的对象锁定/保留框架,提供合法持有和保留(具有治理和合规模式)。MinIO 的对象锁定功能已经过Cohasset Partners的验证。

此外,MinIO 具有一些对 GitHub Enterprise 很重要的关键功能。

  • MinIO 支持同步和异步复制如果两个集群之间的链路出现故障,那么即使是同步复制也会暂时自动恢复为异步复制。MinIO 提供了管理集中更新和升级的机制。生命周期管理是集群控制台的一部分,策略是集中管理的。这使架构师能够设计出能够承受整个云的故障的系统。这是有意义的,因为在启用了复制和负载均衡器的双集群 HA 设置中,如果一个集群完全失败,GitHub 将通过将所有请求发送到另一个集群来继续运行。这意味着开发人员无需停机。

  • 集群级别的身份管理是使用 AD/LDAP 或 OpenID 单点登录 (SSO) 执行的。属于一个组的用户和用户受到基于策略的访问控制的限制,这些访问控制指示可以对特定资源采取的操作。控制台上启用了策略创作,管理员可以为用户、组和服务帐户创建策略。集群、池、策略和桶的集中管理易于管理。

  • 管理很简单,联合解决方案可以通过 Ansible 等技术实现自动化。同时管理 MinIO 和 GitHub——无论是裸机还是 Kubernetes——都是一个明显的优势。

集成部署概述

正如我们所见,MinIO 是 GitHub Enterprise 的完美盟友,GitHub Packages 和 Actions 的输出可以存储在高性能、S3 API 兼容的对象存储中。

在 MinIO 和 GitHub Enterprise 之间建立合作伙伴关系并在我们发布新软件时定期测试/验证对我们来说绝对有意义。组合解决方案为内部部署、企业基础设施的私有云或具有无缝 S3 兼容 API 的公共云提供商提供安全且合规的软件,并提供可移植性。


Minio-blue-green - github+minio.png



组合部署使整个企业的开发人员/工程师之间能够进行更智能的协作,并为企业运营商提供更简单的管理。随着开发需求以及工程工件和开发运营能力的不断增长,它提供了水平扩展存储的能力。

将 GitHub Enterprise 与 MinIO 集成

在下一阶段,我们将介绍如何设置集成 GitHub Enterprise 包和操作所需的基础设施,以使用 MinIO 作为后端。在高层次上,我们需要运行 MinIO 和 GitHub Enterprise 的实例。

最小IO

安装和配置

我们可以通过多种方式设置 MinIO 来运行,在这种情况下,我们将使用 Docker 来启动 MinIO。

在将运行 Docker 容器的本地主机上创建 4 个目录:

mkdir -p /home/aj/minio-<id>/disk-1 \
mkdir -p /home/aj/minio-<id>/disk-2 \
mkdir -p /home/aj/minio-<id>/disk-3 \
mkdir -p /home/aj/minio-<id>/disk-4

创建目录后,启动 docker 容器:

docker run -d \
  -p 9000:9000 \
  -p 9001:9001 \
  -v /home/aj/minio-1/disk-1:/mnt/disk1 \
  -v /home/aj/minio-1/disk-2:/mnt/disk2 \
  -v /home/aj/minio-1/disk-3:/mnt/disk3 \
  -v /home/aj/minio-1/disk-4:/mnt/disk4 \
  --name minio1 \
  --hostname minio1 \
  quay.io/minio/minio server http://minio1/mnt/disk{1...4}/minio --console-address ":9001"

上面的命令将执行以下操作:

  1. 启动一个名为 的 docker 容器minio

  2. 将 4 个主机目录挂载到容器上以存储 MinIO 数据。

  3. 在主机上公开 API9000和控制台端口,以便其他服务可以访问它。9001

验证 MinIO 服务已经启动,在日志中你应该看到类似这样的内容:

Status:         4 Online, 0 Offline.
API: http://172.20.0.2:9000  http://127.0.0.1:9000

Console: http://172.20.0.2:9001 http://127.0.0.1:9001

Documentation: https://docs.min.io

请注意,以上设置是为了让您快速启动并运行 MinIO。您可以从单个节点扩展到多节点分布式配置以进行额外测试。如果您想在生产环境中部署和配置 MinIO,请参阅文档

创建桶

现在部署了 MinIO,我们需要在 MinIO 控制台中为 GitHub Enterprise 创建一个存储桶来存储它的包。

  1. 在浏览器中,转到http://localhost:9000以访问 MinIO 控制台。

2. 使用默认凭据登录:

  • 用户:minioadmin

  • 经过:minioadmin

3. 前往 Buckets -> [点击] Create Bucket

4. 创建一个名为 的桶testbucket123

记住凭据和存储桶名称以备后用。我们需要它们来配置 GitHub Enterprise 包功能。


Untitled (53).png


GitHub 企业版

下载最新版本的 GitHub Enterprise 并在您最喜欢的管理程序上启动它。虽然 GitHub Enterprise 界面中没有用于配置 MinIO 的特定部分,但我们不需要。MinIO 完全兼容 S3 API,所以我们可以简单地使用现有的 AWS S3 配置部分来配置它。

配置包

  • 通过浏览器登录您的 GitHub Enterprise 管理员帐户。

  • 在右上角单击火箭图标。

  • 转到站点管理员 > 管理 > 包

  • 单击启用 GitHub 包

  • 包裹寄存

    • 选择Amazon S3

    • AWS 服务 URL:MinIO 服务器 API 地址http://:9000

    • AWS S3 桶:我们使用控制台创建的 MinIO 桶testbucket123

    • AWS S3 访问密钥:MinIO 用户名minioadmin

    • AWS S3 密钥:MinIO 密码minioadmin


Untitled (54).png


  • 单击左侧的保存设置并等待 GitHub Enterprise 使用新设置重新配置。

配置操作

  • 在右上角单击火箭图标。

  • 转到站点管理员 > 管理 > 操作

  • 单击复选框Enable GitHub Actions

  • 在工件和日志存储

    • 选择Amazon S3

    • AWS 服务 URL:MinIO 服务器 API 地址http://:9000

    • AWS S3 桶:来自控制台的 MinIO 桶testbucket123

    • AWS S3 访问密钥:MinIO 用户名minioadmin

    • AWS S3 密钥:MinIO 密码minioadmin


Untitled (55).png


  • 单击左侧的保存设置并等待 GitHub Enterprise 使用新设置重新配置。

GitHub Enterprise 的可扩展、安全和高性能存储

就是这样!您已将 GitHub Enterprise 配置为使用 MinIO 作为包和操作的后端。如果您需要更多信息,这里有关于如何配置操作的更多详细信息。有关受支持的 GitHub Enterprise 版本,请参阅GitHub Enterprise 存储合作伙伴页面。

有问题吗?加入我们的 Slack想开始吗?前往下载页面


上一篇 下一篇