14.4. 使用 Red Hat Quay Operator 进行异地复制


Georeplication architecture

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

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

14.4.1. 在 Openshift 中设置异地复制

流程

  1. 部署 Quay postgres 实例:

    1. 登录到数据库
    2. 为 Quay 创建数据库

      CREATE DATABASE quay;
      Copy to Clipboard Toggle word wrap
    3. 在数据库中启用 pg_trm 扩展

      \c quay;
      CREATE EXTENSION IF NOT EXISTS pg_trgm;
      Copy to Clipboard Toggle word wrap
  2. 部署 Redis 实例:

    注意
    • 如果您的云供应商有自己的服务,部署 Redis 实例可能会不需要。
    • 如果使用 Builder,则需要部署 Redis 实例。
    1. 为 Redis 部署虚拟机
    2. 确保可以从运行 Quay 的集群进行访问
    3. 端口 6379/TCP 必须被打开
    4. 在实例内运行 Redis

      sudo dnf install -y podman
      podman run -d --name redis -p 6379:6379 redis
      Copy to Clipboard Toggle word wrap
  3. 创建两个对象存储后端,每个集群一个

    理想情况下,一个对象存储存储桶接近于第 1 个集群(主设备),其它接近第 2 个集群(次要)。

  4. 使用环境变量覆盖部署具有相同配置捆绑包的集群,为单个集群选择适当的存储后端
  5. 配置负载均衡器,为集群提供单一入口点

14.4.1.1. 配置

config.yaml 文件在集群间共享,并将包含常见 PostgreSQL、Redis 和存储后端的详情:

config.yaml

SERVER_HOSTNAME: <georep.quayteam.org or any other name> 
1

DB_CONNECTION_ARGS:
  autorollback: true
  threadlocals: true
DB_URI: postgresql://postgres:password@10.19.0.1:5432/quay 
2

BUILDLOGS_REDIS:
  host: 10.19.0.2
  port: 6379
USER_EVENTS_REDIS:
  host: 10.19.0.2
  port: 6379
DISTRIBUTED_STORAGE_CONFIG:
  usstorage:
    - GoogleCloudStorage
    - access_key: GOOGQGPGVMASAAMQABCDEFG
      bucket_name: georep-test-bucket-0
      secret_key: AYWfEaxX/u84XRA2vUX5C987654321
      storage_path: /quaygcp
  eustorage:
    - GoogleCloudStorage
    - access_key: GOOGQGPGVMASAAMQWERTYUIOP
      bucket_name: georep-test-bucket-1
      secret_key: AYWfEaxX/u84XRA2vUX5Cuj12345678
      storage_path: /quaygcp
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS:
  - usstorage
  - eustorage
DISTRIBUTED_STORAGE_PREFERENCE:
  - usstorage
  - eustorage
FEATURE_STORAGE_REPLICATION: true
Copy to Clipboard Toggle word wrap

1
必须使用正确的 SERVER_HOSTNAME 作为路由,且必须与全局负载均衡器的主机名匹配。
2
要检索使用 OpenShift Operator 部署的 Clair 实例的配置文件,请参阅检索 Clair 配置

创建 configBundleSecret

$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
Copy to Clipboard Toggle word wrap

在每个集群中,设置 configBundleSecret 并使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量覆盖来为集群配置适当的存储:

注意

两个部署之间的 config.yaml 文件都必须匹配。如果对一个集群进行更改,则必须同时更改它。

美国集群

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: example-registry
  namespace: quay-enterprise
spec:
  configBundleSecret: georep-config-bundle
  components:
    - kind: objectstorage
      managed: false
    - kind: route
      managed: true
    - kind: tls
      managed: false
    - kind: postgres
      managed: false
    - kind: clairpostgres
      managed: false
    - kind: redis
      managed: false
    - kind: quay
      managed: true
      overrides:
        env:
        - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
          value: usstorage
    - kind: mirror
      managed: true
      overrides:
        env:
        - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
          value: usstorage
Copy to Clipboard Toggle word wrap

+

注意

由于 TLS 为非受管,且路由是受管的,所以您必须使用 config 工具或直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由

欧洲集群

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: example-registry
  namespace: quay-enterprise
spec:
  configBundleSecret: georep-config-bundle
  components:
    - kind: objectstorage
      managed: false
    - kind: route
      managed: true
    - kind: tls
      managed: false
    - kind: postgres
      managed: false
    - kind: clairpostgres
      managed: false
    - kind: redis
      managed: false
    - kind: quay
      managed: true
      overrides:
        env:
        - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
          value: eustorage
    - kind: mirror
      managed: true
      overrides:
        env:
        - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
          value: eustorage
Copy to Clipboard Toggle word wrap

+

注意

由于 TLS 为非受管,且路由是受管的,所以您必须使用 config 工具或直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由

14.4.2. 跨地域复制的混合存储

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

  • 使用 VPN 防止内部存储的可见性
  • 使用仅允许访问 Quay 使用的指定存储桶的令牌对

这将使 Red Hat Quay 的公有云实例可以访问预先存储,但网络将被加密、保护和使用 ACL,从而满足安全要求。

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat