15.4. 使用 Red Hat Quay Operator 的 geo-replication


Geo-replication architecture

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

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

15.4.1. 在 Openshift 中设置 geo-replication

流程

  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 实例可能会不需要。
    • 如果要使用 Builders,则需要部署 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. 配置负载均衡器,为集群提供单一入口点

15.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 是非受管,并且路由受管理,因此您必须使用配置工具或直接向配置捆绑包提供证书。如需更多信息,请参阅配置 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 是非受管,并且路由受管理,因此您必须使用配置工具或直接向配置捆绑包提供证书。如需更多信息,请参阅配置 TLS 和路由

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

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

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

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

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat