Red Hat Quay 架构


Red Hat Quay 3.14

Red Hat Quay 架构

Red Hat OpenShift Documentation Team

摘要

Red Hat Quay 架构

第 1 章 Red Hat Quay 概述

Red Hat Quay 是一个分布式且高度可用的容器镜像 registry。

Red Hat Quay Container registry 平台在任何基础架构上提供安全存储、分发、访问控制、地理复制、存储库镜像和管理容器及云原生工件。它作为独立组件或作为 OpenShift Container Platform 的 Operator 提供,可部署 on-prem 或公共云。

Quay features

本指南可让您了解部署 Red Hat Quay 时要使用的架构模式。本指南还提供大小调整指导和部署先决条件,以及确保 Red Hat Quay registry 高可用性的最佳实践。

1.1. 可扩展性和高可用性(HA)

用于 Red Hat Quay 的代码库与用于 Quay.io 的代码库相同,这是由红帽托管的高度可用的容器镜像 registry。Quay.io 和 Red Hat Quay 提供了一个多租户 SaaS 解决方案。因此,用户可以确信其部署可以大规模地以高可用性的方式提供,无论其部署是前提还是公共云上。

1.2. 内容发布

Red Hat Quay 中的内容发布功能包括:

仓库镜像
Red Hat Quay 存储库镜像可让您将 Red Hat Quay 和其他容器 registry 中的镜像(如 JFrog Artifactory、Sharbor 或 Sonatype Nexus Repository)镜像到 Red Hat Quay 集群中。使用存储库镜像,您可以根据存储库名称和标签将镜像同步到 Red Hat Quay。
geo-replication
Red Hat Quay 地理复制允许多个地理分布的 Red Hat Quay 部署,从客户端或用户的角度来看,作为单个 registry 工作。它显著提高了全局分布式 Red Hat Quay 设置中的推送和拉取性能。镜像数据在后台异步复制,为客户端提供透明故障转移和重定向。
在断开连接的或 air-gapped 环境中部署

Red Hat Quay 以两种方式之一在断开连接的环境中部署:

  • Red Hat Quay 和 Clair 连接到互联网,使用 air-gapped OpenShift Container Platform 集群通过防火墙中的明确允许列表访问 Red Hat Quay registry。
  • 使用两个独立的 Red Hat Quay 和 Clair 安装。一个安装连接到互联网,在断开连接的或防火墙环境中相互连接。镜像和漏洞数据使用离线介质从连接的环境手动传输到断开连接的环境中。

1.3. 构建自动化

Red Hat Quay 支持使用 OpenShift Container Platform 或 Kubernetes 平台上的一组 worker 节点构建 Dockerfile。构建触发器(如 GitHub Webhook)可以配置为在提交新代码时自动构建存储库的新版本。

在 Red Hat Quay 3.7 之前,Red Hat Quay 在 Pod 启动的虚拟机中运行 Podman 命令。在虚拟平台上运行时,需要启用嵌套虚拟化,它不包括在 Red Hat Enterprise Linux (RHEL)或 OpenShift Container Platform 中。因此,构建必须在裸机集群上运行,这效率低下使用资源。使用 Red Hat Quay 3.7 时,这个要求已被删除,构建可以在虚拟化或裸机平台上运行。

1.4. Red Hat Quay 增强的构建架构

下图显示了增强的构建功能的预期设计流和架构:

Enhanced Quay builds architecture

在这个版本中,构建管理器首先会创建作业对象。然后,作业对象 使用 quay-builder-image 创建一个 pod。quay-builder-image 将包含 quay-builder 二进制文件Podman 服务。创建的 pod 作为非特权 运行。然后,quay-builder 二进制文件 会在通信状态并从构建管理器检索构建信息时构建镜像。

1.5. 集成

Red Hat Quay 可以与几乎所有与 Git 兼容的系统集成。Red Hat Quay 为 GitHub、GitLab 或 BitBucket 提供了自动配置,允许用户持续构建并提供其容器化软件。

1.5.1. REST API

Red Hat Quay 提供了一个完整的 OAuth 2 RESTful API。RESTful API 提供以下优点:

  • 从 URL 中每个 Red Hat Quay 实例的端点提供,例如 https://quay-server.example.com/api/v1
  • 允许用户通过浏览器连接到端点,到 GETDELETEPOSTPUT Red Hat Quay 设置,由 Swagger 使用的发现端点提供。
  • API 可以被 URL 调用,如 https://quay-server.example.com/api/v1,并使用 JSON 对象作为有效负载。

1.6. 安全性

Red Hat Quay 专为实际的企业用例构建,其中内容管理和安全性是两个主要的关注领域。

Red Hat Quay 内容监管和安全包括通过 Clair 进行内置漏洞扫描。

1.6.1. TLS/SSL 配置

您可以在配置工具 UI 或配置捆绑包中为 Red Hat Quay registry 配置 SSL/TLS。还可以通过配置工具指定到数据库的 SSL/TLS 连接、到镜像存储和 Redis。

数据库中的敏感字段以及运行时会自动加密。您还可以在镜像操作过程中为 Red Hat Quay registry 需要 HTTPS 并验证证书。

1.6.2. Clair

Clair 是一种开源应用程序,它利用静态代码分析来解析镜像内容和报告影响内容的漏洞。Clair 与 Red Hat Quay 打包,可用于独立和 Operator 部署。它可以在高度可扩展的配置中运行,根据企业环境,可以单独扩展组件。

1.6.3. Red Hat Quay Operator 安全

当使用 Red Hat Quay Operator 部署 Red Hat Quay 时,tls 组件会被默认设置为 管理,OpenShift Container Platform 的证书颁发机构用于创建 HTTPS 端点并轮转 TLS 证书。

如果将 tls 组件设置为 unmanaged,您可以向直通路由提供自定义证书,但您需要负责证书轮转。

1.6.4. 完全隔离的构建

Red Hat Quay 现在支持构建使用裸机和虚拟构建器的 Dockerfile。

通过使用裸机 worker 节点,每个构建都在临时虚拟机中完成,以确保构建运行时隔离和安全性。这提供了防止恶意有效负载的最佳保护。

在容器中运行构建与使用虚拟机时没有同样的隔离,但它仍然提供良好的保护。

1.6.5. 基于角色的访问控制

Red Hat Quay 通过机构和团队提供完整的 registry 内容隔离,供用户和自动化工具具有精细的权限,以进行读取、写入和管理访问权限。

1.7. 最近添加的功能

有关最新功能、增强功能、弃用和已知问题的信息,请参阅 Red Hat Quay 发行注记

第 2 章 Red Hat Quay 的先决条件

在部署 Red Hat Quay 前,您必须置备镜像存储、数据库和 Redis。

2.1. 镜像存储后端

Red Hat Quay 将所有二进制 blob 存储在其存储后端中。

本地存储
Red Hat Quay 可以使用本地存储,但这只应该用于概念验证或测试设置,因为二进制 Blob 的持久性无法保证。
HA 存储设置

对于 Red Hat Quay HA 部署,您必须提供 HA 镜像存储,例如:

  • Red Hat OpenShift Data Foundation (以前称为 Red Hat OpenShift Container Storage)是容器的软件定义的存储。Red Hat OpenShift Data Foundation 被设计为 OpenShift Container Platform 的数据和存储服务平台,可帮助团队在云中快速高效地开发和部署应用程序。如需更多信息,请访问 https://www.redhat.com/en/technologies/cloud-computing/openshift-data-foundation
  • Ceph 对象网关 (也称为 RADOS 网关)是一个存储解决方案的示例,可以提供 Red Hat Quay 所需的对象存储。有关如何将 Ceph 存储用作高可用性存储后端的详细信息,请参阅 Quay 高可用性指南。有关 Red Hat Ceph Storage 和 HA 设置的更多信息,请参阅 Red Hat Ceph Storage 架构指南
geo-replication
本地存储不能用于异地复制,因此必须部署内部或基于云的对象存储解决方案。本地化镜像存储在每个地区提供,镜像拉取(pull)是从最接近的可用存储引擎中提供的。容器镜像推送将写入 Red Hat Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。这要求镜像存储可以从所有区域访问。

2.1.1. 支持的镜像存储引擎

Red Hat Quay 支持以下内部存储类型:

  • Ceph/Rados RGW
  • OpenStack Swift
  • Red Hat OpenShift Data Foundation 4 (通过 NooBaa)

Red Hat Quay 支持以下公有云存储引擎:

  • Amazon Web Services (AWS) S3
  • Google Cloud Storage
  • Azure Blob Storage
  • Hitachi Content Platform (HCP)

2.2. 数据库后端

Red Hat Quay 将其所有配置信息存储在 config.yaml 文件中。registry 元数据,如用户信息、机器人帐户、团队、权限、机构、镜像、标签、清单等存储在数据库后端中。如果需要,日志可以推送到 ElasticSearch。PostgreSQL 是首选的数据库后端,因为它可用于 Red Hat Quay 和 Clair。

将来的 Red Hat Quay 版本将删除对使用 MySQL 和 MariaDB 作为数据库后端的支持,该后端自 Red Hat Quay 3.6 发布以来已被弃用。直到那时,MySQL 仍然会根据 支持列表进行支持,但不会获得额外功能或明确测试覆盖率。Red Hat Quay Operator 仅在管理数据库时支持 PostgreSQL 部署。如果要使用 MySQL,您必须手动部署它,并将数据库组件设置为 managed: false

在高可用性(HA)配置中部署 Red Hat Quay 需要为您的数据库服务置备高可用性。如果 Red Hat Quay 在公有云基础架构上运行,建议您使用云供应商提供的 PostgreSQL 服务,但 MySQL 也支持。

地理复制需要一个可从所有区域访问的、共享的数据库。

2.3. Redis

Red Hat Quay 将构建器日志存储在 Redis 缓存中。由于存储的数据是临时的,因此 Redis 不需要高度可用,即使它有状态。

如果 Redis 失败,您将丢失对构建日志、构建器和垃圾收集器服务的访问。此外,用户事件将不可用。

您可以使用来自 Red Hat Software Collections 或来自您喜欢的任何其他源的 Redis 镜像。

第 3 章 Red Hat Quay 基础架构

Red Hat Quay 在内部或公有云的任何物理或虚拟基础架构上运行。部署范围从简单到大规模扩展,如下所示:

  • 开发者笔记本上的 all-in-one 设置
  • 虚拟机或 OpenShift Container Platform 的高可用性
  • 地理位置分散在多个可用区和区域

3.1. 在独立主机上运行 Red Hat Quay

您可以使用 Ansible 或另一个自动化套件自动化独立部署过程。所有独立主机都需要有效的 Red Hat Enterprise Linux (RHEL)订阅。

概念验证部署
Red Hat Quay 在带有镜像存储、容器化数据库、Redis 以及可选的 Clair 安全扫描的机器上运行。
高可用性设置

Red Hat Quay 和 Clair 在跨多个主机的容器中运行。您可以使用 systemd 单元来确保在失败时重启。

独立主机上的高可用性设置需要客户提供的负载均衡器(即低级 TCP 负载均衡器或应用程序负载均衡器),能够终止 TLS。

3.2. 在 OpenShift 中运行 Red Hat Quay

Red Hat Quay Operator for OpenShift Container Platform 提供以下功能:

  • 使用自定义选项自动部署和管理 Red Hat Quay
  • 管理 Red Hat Quay 及其所有依赖项
  • 自动扩展和更新
  • 与现有的 OpenShift Container Platform 进程集成,如 GitOps、监控、警报、日志记录
  • 使用有限的可用性置备对象存储,由多云对象网关(NooBaa)提供支持,作为 Red Hat OpenShift Data Foundation (ODF) Operator 的一部分。此服务不需要额外订阅。
  • ODF Operator 提供的横向扩展、高可用性对象存储。此服务需要额外的订阅。

Red Hat Quay 可以在 OpenShift Container Platform 基础架构节点上运行。因此,不需要进一步订阅。在 OpenShift Container Platform 上运行 Red Hat Quay 有以下优点:

  • 零到这里: 简化的 Red Hat Quay 部署和相关组件意味着您可以立即开始使用该产品
  • 可扩展性: 根据实际负载,使用集群计算容量通过自动扩展来管理需求
  • 简化网络: 使用 OpenShift Container Platform TLS 证书和路由通过 HTTPS 自动置备负载均衡器和流量入口流量
  • declarative configuration management: 存储在 CustomResource 对象中用于 GitOps 友好的生命周期管理的配置
  • 重复性 : 无论 Red Hat Quay 和 Clair 的副本数是什么
  • OpenShift 集成: 使用 OpenShift Container Platform 监控和 Alerting 功能管理单个集群中的多个 Red Hat Quay 部署的额外服务

3.3. 将独立的 Red Hat Quay 与 OpenShift Container Platform 集成

虽然 Red Hat Quay Operator 可确保在 OpenShift Container Platform 上运行的 Red Hat Quay 的无缝部署和管理,但也可以以独立模式运行 Red Hat Quay,然后将内容提供给一个或多个 OpenShift Container Platform 集群,只要它们正在运行。

将独立的 Red Hat Quay 与 OpenShift Container Platform 集成

Integrating standalone Red Hat Quay with OpenShift Container Platform

有几个 Operator 可帮助将独立和基于 Operator 的 Red Hat Quay 部署与 OpenShift Container Platform 集成,如下所示:

Red Hat Quay Cluster Security Operator
将 Red Hat Quay 漏洞扫描结果转发到 OpenShift Container Platform 控制台
Red Hat Quay Bridge Operator
通过结合使用 Red Hat Quay 和 OpenShift Container Platform 与 OpenShift Container Platform 构建和 ImageStreams 来确保无缝集成和用户体验

3.4. Mirror registry for Red Hat OpenShift

mirror registry for Red Hat OpenShift 是 Red Hat Quay 的小型版本,您可以用作目标来为断开连接的安装镜像 OpenShift Container Platform 所需的容器镜像。

对于断开连接的 OpenShift Container Platform 部署,需要一个容器 registry 来安装集群。要在这样的集群中运行 production-grade registry 服务,您必须创建一个单独的 registry 部署来安装第一个集群。mirror registry for Red Hat OpenShift 可以解决这个问题,并包含在每个 OpenShift Container Platform 订阅中。它可用于从 OpenShift 控制台 Downloads页面下载。

mirror registry for Red Hat OpenShift 允许用户使用 mirror-registry 命令行界面(CLI)工具安装一个较小的 Red Hat Quay 版本及其所需的组件。mirror registry for Red Hat OpenShift 会自动部署,它带有预先配置的本地存储和一个本地的数据库。它还包括自动生成的用户凭证和访问权限,其中只有一个输入集,且不需要额外配置选项。

mirror registry for Red Hat OpenShift 提供了一个预先确定的网络配置,并在成功时报告部署的组件凭证并访问 URL。另外还提供了一组有限的可选配置输入,如完全限定域名(FQDN)服务、超级用户名称和密码,以及自定义 TLS 证书。这为用户提供了一个容器 registry,以便在受限网络环境中运行 OpenShift Container Platform 时,轻松创建所有 OpenShift Container Platform 发行版本内容的离线镜像。

mirror registry for Red Hat OpenShift 仅限于托管安装断开连接的 OpenShift Container Platform 集群(如发行镜像或 Operator 镜像)所需的镜像。它使用本地存储。由客户创建的内容不应由 mirror registry for Red Hat OpenShift 托管。

与 Red Hat Quay 不同,mirror registry for Red Hat OpenShift 不是一个高度可用的 registry。仅支持本地文件系统存储。对于多个集群的环境,不推荐使用 mirror registry for Red Hat OpenShift,因为有多个集群可以在更新集群时会存在单点故障。建议您使用 mirror registry for Red Hat OpenShift 来安装一个集群,该集群可以托管生产环境级、高度可用的 registry,如 Red Hat Quay,可以为其他集群提供 OpenShift Container Platform 内容。

如需更多信息,请参阅 创建镜像 registry for Red Hat OpenShift

3.5. 与多个 registry 相比

许多用户都会考虑运行多个不同的 registry。Red Hat Quay 的首选方法是有一个共享 registry:

  • 如果您希望在开发和生产镜像之间明确分离,或者通过内容来源明确分离,例如,保持与内部镜像不同的第三方镜像,您可以使用机构和存储库以及基于角色的访问控制(RBAC)来实现所需的隔离。
  • 假设镜像 registry 是企业环境中的一个关键组件,您可能需要尝试使用不同的部署来测试 registry 软件升级到较新版本。Red Hat Quay Operator 更新 registry for patch 版本,以及次版本或主要更新。这意味着,任何复杂的步骤都是自动化的,因此您不需要置备多个 registry 实例来测试升级。
  • 使用 Red Hat Quay 时,部署的每个集群不需要一个单独的 registry。Red Hat Quay 被证明可以在 Quay.io 上大规模工作,并可为数千集群提供内容。
  • 即使您在多个数据中心中部署,您仍可使用单个 Red Hat Quay 实例将内容提供给多个物理关闭的数据中心,或使用 HA 功能在数据中心之间扩展负载均衡器。或者,您可以使用 Red Hat Quay 地理复制功能在物理距离的数据中心进行扩展。这要求置备全局负载均衡器或基于 DNS 的地理感知负载均衡。
  • 可能适合运行多个不同 registry 的一个场景是您要为每个 registry 指定不同的配置。

总之,运行共享 registry 可帮助您保存存储、基础架构和操作成本,但在某些情况下可能需要专用的 registry。

第 4 章 在内部部署 Red Hat Quay

下图显示了以下部署类型的部署示例:

  • 独立概念验证
  • 在多个主机上高可用性部署
  • 使用 Red Hat Quay Operator 在 OpenShift Container Platform 集群上部署

内部示例配置

On premise example configuration

4.1. Red Hat Quay 示例部署

下图显示了 Red Hat Quay 的三个可能部署:

部署示例

Red Hat Quay deployment example

概念验证
使用本地镜像存储和本地数据库在单一节点上运行 Red Hat Quay、Clair 和 mirror
单个数据中心
使用 HA 数据库和镜像存储在多个节点上运行高度可用的 Red Hat Quay、Clair、镜像(mirror)
多个数据中心
在带有 HA 数据库和镜像存储的多个节点上运行高度可用的 Red Hat Quay、Clair 和镜像功能

4.2. Red Hat Quay 部署拓扑

下图提供了 Red Hat Quay 部署拓扑的高级概述:

Red Hat Quay 部署拓扑

Red Hat Quay deployment topology

在本部署中,所有推送、用户界面和 API 请求都由公共 Red Hat Quay 端点接收。从对象存储直接提供拉取。

4.3. 使用存储代理的 Red Hat Quay 部署拓扑

下图提供了配置了存储代理的 Red Hat Quay 部署拓扑的高级概述:

使用存储代理的 Red Hat Quay 部署拓扑

Red Hat Quay deployment topology with storage proxy

配置存储代理后,所有流量都通过公共 Red Hat Quay 端点。

第 5 章 在公共云中部署 Red Hat Quay

Red Hat Quay 可以在公有云上运行,也可以以单机模式或 OpenShift Container Platform 本身部署在公共云中。有关经过测试和支持的配置的完整列表,请参阅 Red Hat Quay Tested Integrations Matrix ( https://access.redhat.com/articles/4067991)。

建议: 如果 Red Hat Quay 在公有云上运行,那么您应该对 Red Hat Quay 后端服务使用公有云服务来确保正确的高可用性和可扩展性。

5.1. 在 Amazon Web Services 上运行 Red Hat Quay

如果 Red Hat Quay 在 Amazon Web Services (AWS)上运行,您可以使用以下功能:

  • AWS Elastic Load Balancer
  • AWS S3 (hot) blob 存储
  • AWS RDS 数据库
  • AWS ElastiCache Redis
  • EC2 虚拟机建议:M3.Large 或 M4.XLarge

下图提供了在 AWS 上运行的 Red Hat Quay 的高级别概述:

Red Hat Quay on AWS

Red Hat Quay on AWS

5.2. 在 Microsoft Azure 上运行 Red Hat Quay

如果 Red Hat Quay 在 Microsoft Azure 上运行,您可以使用以下功能:

  • Azure 受管服务,如高可用性 PostgreSQL
  • Azure Blob Storage 必须是热存储

    • Azure cool 存储不适用于 Red Hat Quay
  • Redis 的 Azure Cache

下图提供了在 Microsoft Azure 上运行的 Red Hat Quay 的高级别概述:

Red Hat Quay on Microsoft Azure

Red Hat Quay on Microsoft Azure

第 6 章 使用 Red Hat Quay 发布内容

Red Hat Quay 中的内容发布功能包括:

6.1. 仓库镜像

Red Hat Quay 存储库镜像可让您将外部容器 registry 中的镜像(或另一个本地 registry)镜像到 Red Hat Quay 集群中。使用存储库镜像,您可以根据存储库名称和标签将镜像同步到 Red Hat Quay。

在启用了存储库镜像的 Red Hat Quay 集群中,您可以执行以下操作:

  • 从外部 registry 选择要镜像的存储库
  • 添加用于访问外部 registry 的凭证
  • 识别特定容器镜像存储库名称和要同步的标签
  • 设置同步存储库的间隔
  • 检查同步的当前状态

要使用镜像功能,您需要执行以下操作:

  • 在 Red Hat Quay 配置文件中启用存储库镜像
  • 运行存储库镜像 worker
  • 创建已镜像的存储库

所有存储库镜像配置都可以使用配置工具 UI 或 Red Hat Quay API 执行。

6.1.1. 使用存储库镜像

以下列表显示了 Red Hat Quay 存储库镜像的功能和限制:

  • 通过存储库镜像,您可以镜像整个存储库,或有选择地限制同步哪些镜像。过滤器可以基于以逗号分隔的标签列表、一系列标签或其他方法通过 Unix shell 风格的通配符识别标签。如需更多信息,请参阅 通配符 文档。
  • 当将存储库设置为镜像时,您无法手动将其他镜像添加到该存储库中。
  • 由于已镜像的存储库基于您设置的存储库和标签,因此它将仅包含存储库和标签对代表的内容。例如,如果您更改了标签,以便存储库中的一些镜像不再匹配,则会删除这些镜像。
  • 只有指定的机器人才能将镜像推送到已镜像的存储库,并取代存储库上设置的任何基于角色的访问控制权限。
  • 镜像可以配置为在失败时回滚,或者以 最佳方式运行。
  • 使用已镜像的存储库,具有读取权限 的用户可以从存储库拉取镜像,但不能将镜像推送到存储库。
  • 可以使用您创建的已镜像存储库的 RepositoriesMirrors 选项卡在 Red Hat Quay 用户界面中更改已镜像存储库的设置。
  • 镜像以设定的时间间隔同步,但也可以根据需要同步。

6.1.2. 仓库镜像建议

存储库镜像的最佳实践包括:

  • 存储库镜像 pod 可以在任何节点上运行。这意味着您可以在已运行 Red Hat Quay 的节点上运行镜像(mirror)。
  • 存储库镜像在数据库中调度,并批量运行。因此,存储库 worker 会检查每个存储库镜像配置文件,并在下一次同步需要时读取。更多镜像 worker 意味着可以同时镜像更多软件仓库。例如,运行 10 个镜像 worker 意味着用户可以并行运行 10 个镜像 Operator。如果用户只有 2 个带有 10 个镜像配置的 worker,则只能执行 2 个 operator。
  • 镜像 pod 的最佳数量取决于以下条件:

    • 要镜像的存储库总数
    • 存储库中的镜像和标签数量以及更改的频率
    • 并行批处理

      例如,如果用户镜像有 100 个标签的存储库,则镜像将由一个 worker 完成。用户必须考虑要并行镜像多少个存储库,并以此为基础的 worker 数量。

      同一存储库中的多个标签无法并行镜像。

6.1.3. 镜像的事件通知

存储库镜像有三个通知事件:

  • 仓库镜像已启动
  • 仓库镜像成功
  • Repository Mirror Unsuccessful

事件可以在每个存储库的 Settings 选项卡中配置,并且支持电子邮件、Slack、Quay UI 和 Webhook 等所有现有通知方法。

6.1.4. 镜像 API

您可以使用 Red Hat Quay API 配置存储库镜像:

镜像 API

Mirroring API

如需更多信息,请参阅 Red Hat Quay API 指南

6.2. geo-replication

地理复制允许多个地理分散的 Red Hat Quay 部署,从客户端或用户的角度来看,作为单个 registry 工作。它显著提高了全局分布式 Red Hat Quay 设置中的推送和拉取性能。镜像数据会在后台异步复制,为客户端进行透明故障转移和重定向。

在独立和 Operator 部署中支持部署带有异地复制的 Red Hat Quay。

6.2.1. 异地复制功能

  • 配置异地复制后,容器镜像推送将写入该 Red Hat Quay 实例的首选存储引擎。这通常是区域内最接近的存储后端。
  • 在初始推送后,镜像数据将在后台复制到其他存储引擎。
  • 复制位置列表可以配置,它们可以是不同的存储后端。
  • 镜像拉取将始终使用最接近的可用存储引擎,以最大化拉取性能。
  • 如果复制尚未完成,拉取将使用源存储后端。

6.2.2. 地理复制要求和约束

  • 在地理复制设置中,Red Hat Quay 要求所有区域都可以读取和写入所有其他区域的对象存储。对象存储必须可以被所有其他区域访问。
  • 如果一个地理复制站点的对象存储系统失败,该站点的 Red Hat Quay 部署必须被关闭,以便客户端由全局负载均衡器重定向到具有完整存储系统的剩余站点。否则,客户端将遇到拉取和推送失败。
  • Red Hat Quay 没有内部感知连接的对象存储系统的健康状态或可用性。用户必须配置全局负载均衡器(LB)来监控分布式系统的健康状况,并根据存储状态将流量路由到不同的站点。
  • 要检查 geo-replication 部署的状态,您必须使用 /health/endtoend 检查点,该检查点用于全局健康监控。您必须使用 /health/endtoend 端点手动配置重定向。/health/instance 端点仅检查本地实例健康状况。
  • 如果一个站点的对象存储系统不可用,则其余站点或站点没有自动重定向到剩余的存储系统或系统。
  • 地理复制(geo-replication)是异步的。如果一个站点永久丢失,则已存储在该站点的对象存储系统中,但在失败时还没有复制到剩余的站点的数据会丢失。
  • 单个数据库,因此所有区域都共享所有元数据和 Red Hat Quay 配置。

    地理复制不会复制数据库。如果出现停机,启用了地理复制功能的 Red Hat Quay 不会切换到另一个数据库。

  • 单个 Redis 缓存在整个 Red Hat Quay 设置间共享,需要可以被所有 Red Hat Quay pod 访问。
  • 所有区域应当使用相同的配置,但存储后端除外,这可以使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量明确进行配置。
  • 地理复制需要每个区域中的对象存储。它不适用于本地存储。
  • 每个区域必须能够访问每个区域中的每个存储引擎,这需要一个网络路径。
  • 或者,可以使用存储代理选项。
  • 整个存储后端(如所有 blob)被复制。相反,存储库镜像可以限制在存储库或镜像上。
  • 所有 Red Hat Quay 实例都必须共享相同的入口点,通常是通过负载均衡器。
  • 所有 Red Hat Quay 实例都必须具有相同的超级用户集合,因为它们在通用配置文件中定义。
  • 在地理复制环境中,您的 Clair 配置可以设置为 unmanaged。非受管 Clair 数据库允许 Red Hat Quay Operator 在跨地复制环境中工作,其中多个 Operator 实例必须与同一数据库通信。如需更多信息,请参阅高级 Clair 配置

    如果 Clair 配置保持 管理,则必须检索由 Operator 部署的 Clair 实例的配置文件。如需更多信息,请参阅 为 OpenShift Container Platform 上的 Clair 部署检索并解码 Clair 配置 secret

  • geo-Replication 需要 SSL/TLS 证书和密钥。如需更多信息,请参阅 * Geo-Replication 需要 SSL/TLS 证书和密钥。如需更多信息,请参阅使用 SSL/TLS 证书部署概念验证

如果无法满足上述要求,您应该使用两个或多个 Red Hat Quay 部署,并利用存储库镜像功能。

6.2.3. 使用独立 Red Hat Quay 进行地域复制

在以下镜像中,Red Hat Quay 在两个独立的区域独立运行,具有通用数据库和一个通用的 Redis 实例。本地化镜像存储在每个地区提供,镜像拉取(pull)是从最接近的可用存储引擎中提供的。容器镜像推送将写入 Red Hat Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。

注意

如果 Clair 在一个集群中失败,例如 US 集群,US 用户在 Red Hat Quay for the第二个集群(EU)中不会看到漏洞报告。这是因为所有 Clair 实例都具有相同的状态。当 Clair 失败时,这通常是因为集群中的一个问题。

地理复制架构

Geo-replication

6.2.4. 使用 Red Hat Quay Operator 进行地域复制

Geo-replication architecture

在上例中,Red Hat Quay Operator 部署到两个独立的区域,具有通用数据库和一个通用的 Redis 实例。本地化镜像存储在每个地区提供,镜像拉取(pull)是从最接近的可用存储引擎中提供的。容器镜像推送将写入 Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。

因为 Operator 现在单独管理 Clair 安全扫描程序及其数据库,所以可以使用 geo-replication setup,以便不管理 Clair 数据库。相反,会使用外部共享数据库。Red Hat Quay 和 Clair 支持 PostgreSQL 的几个供应商和供应商,它们可在 Red Hat Quay 3.x 测试列表中找到。另外,Operator 还支持可注入到部署中的自定义 Clair 配置,这允许用户使用外部数据库的连接凭证配置 Clair。

6.2.5. 用于异地复制的混合存储

Red Hat Quay geo-replication 支持使用不同的和多个复制目标,例如在公有云上使用 AWS S3 存储,并在内部使用 Ceph 存储。这简化了从所有 Red Hat Quay pod 和集群节点授予对所有存储后端的访问权限的关键要求。因此,建议您使用以下方法:

  • VPN 以防止内部存储的可见性,或者
  • 只允许访问 Red Hat Quay 使用的特定存储桶的令牌对

这会导致 Red Hat Quay 公共云实例有权访问内部存储,但网络将被加密、保护,并使用 ACL,从而满足安全要求。

如果您无法实现这些安全措施,最好部署两个不同的 Red Hat Quay registry,并使用存储库镜像作为异地复制的替代选择。

6.3. 与地理复制相比的存储库镜像

Red Hat Quay geo-replication 在数据库共享时,在 2 个或多个不同的存储后端之间镜像整个镜像存储后端,例如,一个带有两个不同的 blob 存储端点的 Red Hat Quay registry。异地复制的主要用例包括:

  • 加快对地理位置分散的设置对二进制 Blob 的访问
  • 确保镜像内容跨区域是相同的

存储库镜像将所选存储库或存储库子集从一个 registry 同步到另一个 registry。registry 有所不同,每个 registry 都有单独的数据库和单独的镜像存储。

镜像的主要用例包括:

  • 独立 registry 部署在不同的数据中心或区域中,其中整个内容的某些子集应该在数据中心和区域间共享
  • 自动同步或镜像所选(允许)上游存储库到本地 Red Hat Quay 部署
注意

存储库镜像和异地复制可以同时使用。

表 6.1. Red Hat Quay 存储库镜像和地理复制比较
功能/能力geo-replication仓库镜像

旨在做什么?

共享全局 registry

不同的 registry

如果复制或镜像尚未完成,会发生什么情况?

使用远程副本(slower)

没有提供镜像

是否需要访问这两个区域中的所有存储后端吗?

是(所有 Red Hat Quay 节点)

No (distinct storage)

用户能否将镜像从两个站点推送到同一存储库?

所有 registry 内容和配置在所有区域(共享数据库)之间是否相同?

用户可以选择要镜像的独立命名空间或存储库吗?

用户可以将过滤器应用到同步规则吗?

是每个区域允许的独立/不同的角色基础访问控制配置

6.4. air-gapped 或 disconnected 部署

在下图中,图中的上层部署显示连接到互联网的 Red Hat Quay 和 Clair,通过防火墙中的明确允许列表的 OpenShift Container Platform 集群访问 Red Hat Quay registry。

图中的较低部署显示在防火墙内运行的 Red Hat Quay 和 Clair,使用离线介质传输到目标系统的镜像和 CVE 数据。数据从连接到互联网的独立 Red Hat Quay 和 Clair 部署导出。

下图显示了如何在 air-gapped 或断开连接的环境中部署 Red Hat Quay 和 Clair:

断开连接或 air-gapped 环境中的 Red Hat Quay 和 Clair

Air-gapped deployment

第 7 章 Red Hat Quay 大小和订阅

Red Hat Quay 的可伸缩性是其关键优势之一,它有一个代码库支持广泛的部署大小,包括:

  • 在单一开发机器上部署概念验证
  • 大约 2,000 个用户的中型部署,可为几十个 Kubernetes 集群提供内容
  • 高端部署,如 Quay.io,可在全世界提供数千个 Kubernetes 集群

由于大量大小取决于因素的倍数,如用户、镜像数量、并发拉取和推送,因此没有标准大小建议。

以下是运行 Red Hat Quay 的系统(每个容器/pod 实例的最低要求):

  • quay: minimum 6 GB; 推荐的 8 GB, 2 更多 vCPU
  • Clair: 推荐的 2 GB RAM 和 2 个或更多 vCPU
  • 存储: 推荐的 30 GB
  • NooBaa: 最少 2 GB、1 个 vCPU (当 objectstorage 组件被 Operator 选择时)
  • Clair 数据库: 安全元数据需要最少 5 GB

Red Hat Quay 的无状态组件可以横向扩展,但这会对有状态后端服务造成大量负载。

7.1. Red Hat Quay 示例大小

下表显示了对概念验证、中等大小以及高端部署的近似大小。无论部署是否可以使用相同的指标正确运行,这是否取决于下面未显示的许多因素。

指标概念验证mid-sizeHigh End
(Quay.io)

no. 默认情况下,Quay 容器

1

4

15

no. Quay 容器最大为 scale-out

N/A

8

30

否。默认情况下,Clair 容器

1

3

10

no. Clair 容器最大为 scale-out

N/A

6

15

no. 镜像 pod (镜像 100 个软件仓库)

1

5-10

N/A

数据库大小

2 -4 个内核
6-8 GB RAM
10-20 GB 磁盘

4-8 内核
6-32 GB RAM
100 GB - 1 TB 磁盘

32 个内核
244 GB
1+ TB 磁盘

对象存储后端大小

10-100 GB

1 - 20 TB

50+ TB,最多 PB

Redis 缓存大小

 

2 个内核
2-4 GB RAM

4 个内核
28 GB RAM

底层节点大小
(物理或虚拟)

4 个内核
8 GB RAM

4-6 个内核
12-16 GB RAM

Quay:
13 个内核
56GB RAM

Clair:
2 cores
4 GB RAM

有关调整镜像大小和相关建议的详情,请参阅有关 存储库镜像 的部分

只有在使用 Quay 构建器时,Red Hatis 缓存的大小才相关,否则并不重要。

7.2. Red Hat Quay 订阅信息

Red Hat Quay 具有标准(Standard)和高级(Premium)支持,订阅则基于部署。

注意

部署意味着使用共享数据后端安装单个 Red Hat Quay registry。

使用 Red Hat Quay 订阅,可以使用以下选项:

  • 对 pod 数量没有限制,如 Quay、Clair 和 Builder 等,您可以进行部署。
  • Red Hat Quay pod 可以在多个数据中心或可用区中运行。
  • 存储和数据库后端可以部署到多个数据中心或可用区,但只能作为单一共享存储后端和单一共享数据库后端部署。
  • Red Hat Quay 可以管理无限数量的集群或独立服务器的内容。
  • 客户端可以访问 Red Hat Quay 部署,无论其物理位置是什么。
  • 您可以在 OpenShift Container Platform 基础架构节点上部署 Red Hat Quay,以最大程度降低订阅要求。
  • 您可以在 OpenShift Container Platform 集群上运行 Container Security Operator (CSO)和 Quay Bridge Operator (QBO),而无需额外成本。
注意

Red Hat Quay 地理复制需要每个存储复制订阅。然而,数据库是共享的。

有关购买 Red Hat Quay 订阅的更多信息,请参阅 Red Hat Quay

7.3. 使用带有内部 registry 的 Red Hat Quay

Red Hat Quay 可以在带有其内部 registry 的多个 OpenShift Container Platform 集群之前用作外部 registry。

涉及自动化构建和部署推出部署时,也可以使用 Red Hat Quay 来代替内部 registry。所需 SecretImageStreams 是由 Quay Bridge Operator 自动进行的,可以从 OperatorHub for OpenShift Container Platform 启动。

第 8 章 配额管理架构

启用配额管理功能后,单个 blob 大小总和在存储库和命名空间级别。例如,如果同一存储库中的两个标签引用同一 blob,则该 blob 的大小仅计算出一到存储库总数。此外,清单列表总数计算为存储库总数。

重要

因为清单列表总数计算到存储库总数中,所以从以前的 Red Hat Quay 版本升级时消耗的配额总数可能会在 Red Hat Quay 3.9 中报告不同。在某些情况下,新总计可能会超过存储库的之前设置的限制。Red Hat Quay 管理员可能需要调整一个存储库分配的配额,以考虑这些更改。

配额管理功能的工作原理是计算具有回填 worker 的现有存储库和命名空间的大小,然后为在words 后推送或垃圾收集的每个镜像添加或减去。另外,在清单垃圾回收时,从总中减去总。

注意

因为在收集清单时从总数中减去,所以大小计算中有一个延迟,直到能够收集垃圾回收为止。如需有关垃圾回收的更多信息,请参阅 Red Hat Quay 垃圾回收

以下数据库表包含机构中 Red Hat Quay 存储库的配额存储库大小、配额命名空间大小和配额 registry 大小(以字节为单位):

  • QuotaRepositorySize
  • QuotaNameSpaceSize
  • QuotaRegistrySize

机构大小由回填 worker 计算,以确保它不会重复。初始化镜像推送时,会验证用户的机构存储,以检查它是否超出配置的配额限值。如果镜像推送超过定义的配额限制,则会出现软或硬检查:

  • 对于软检查,用户会收到通知。
  • 对于硬检查,推送将停止。

如果存储消耗在配置的配额限制内,则允许推送。

镜像清单删除遵循类似的流程,只要关联的镜像标签和清单之间的链接会被删除。另外,在镜像清单被删除后,存储库大小会在 QuotaRepositorySize,QuotaNameSpaceSize, 和 QuotaRegistrySize 表中重新计算和更新。

第 9 章 命名空间自动架构

对于命名空间自动运行功能,在数据库架构中创建两个不同的数据库表:一个用于 namespaceautoprunepolicy,另一个用于 autoprunetaskstatus。自动修剪工作程序负责执行配置的策略。

命名空间自动修剪策略数据库表

namespaceautoprunepolicy 数据库表包含单个命名空间的策略配置。每个命名空间只有一个条目,但支持每个 namespace_id 的多行。policy 字段包含策略详情,如 {method: "creation_date", olderThan: "2w"}{method: "number_of_tags", numTags: 100}

表 9.1. namespaceautoprunepolicy 数据库表
字段类型属性描述

uuid

character varying (DU)

唯一的索引

此策略的唯一标识符

namespace_id

整数

外键

策略属于的命名空间

policy

text

JSON

策略配置

自动修剪任务状态数据库表

autoprunetaskstatus 表注册由自动修剪 worker 要执行的任务。任务在单个命名空间上下文中执行。每个命名空间只有一个任务。

表 9.2. autoprunetaskstatus 数据库表
字段类型属性描述

namespace_id

整数

外键

此任务所属的命名空间

last_ran_ms

big Integer (bigint)

nullable, indexed

worker 为此命名空间执行策略的最后时间

status

text

nullable

最后一次执行任务的详情

9.1. 自动修剪 worker

以下小节详细介绍了自动修剪 worker 的信息。

9.1.1. auto-prune-task-creation

namespaceautoprunepolicy 数据库表中创建新策略时,也会在 autoprunetask 表中创建一个行。这是在同一事务中完成的。auto-prune worker 使用 autoprunetask 表中的条目来识别应为其执行策略的命名空间。

9.1.2. 自动修剪 worker 执行

auto-pruning worker 是一个异步作业,它执行配置策略。其工作流基于 autoprunetask 表中的值。当任务启动时,会出现以下情况:

  • 自动修剪 worker 以设定的时间间隔启动,默认为 30 秒。
  • auto-prune worker 从 autoprunetask 中选择一个包括 least, 或 null, last_ran_msFOR UPDATE SKIP LOCKED 的行。

    • null last_ran_ms 表示该任务从未运行。
    • 尚未运行的任务在最长时间内运行,或者根本未运行,则会优先考虑。
  • 自动修剪 worker 从 namespaceautoprunepolicy 表中获取策略配置。

    • 如果没有策略配置,则会为这个命名空间删除 autoprunetask 中的条目,这个过程会立即停止。
  • 自动修剪工作程序开始对组织下所有存储库进行分页循环。

    • 自动修剪工作程序根据 policy.method 来确定要使用的大量修剪方法。
  • 自动修剪 worker 使用前面检索到的策略配置执行修剪方法。

    • 若要按标签数量进行修剪:自动修剪 worker 获取按创建日期排序的当前活跃标签数量,并将旧标签删除到配置的数量。
    • 要按日期进行修剪:自动修剪 worker 获取超过指定时间范围的活动标签,返回的任何标签都会被删除。
  • auto-prune worker 添加已删除的标签的审计日志。
  • 选择了 autoprunetask 的行后,last_ran_ms 会被更新。
  • 自动修剪工作程序结束。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.