14.4. 使用 Red Hat Quay Operator 进行 geo-replication
在上例中,Red Hat Quay Operator 部署在两个独立区域,带有通用数据库和通用 Redis 实例。本地化镜像存储在每个区域中提供,镜像拉取是从最接近的可用存储引擎提供的。容器镜像推送被写入 Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。
因为 Operator 现在单独管理 Clair 安全扫描程序及其数据库,所以可以利用 geo-replication 设置,以便不管理 Clair 数据库。相反,会使用外部共享数据库。Red Hat Quay 和 Clair 支持 PostgreSQL 的多个供应商和供应商,可在 Red Hat Quay 3.x 测试列表中找到。另外,Operator 还支持可注入部署的自定义 Clair 配置,允许用户使用外部数据库的连接凭证配置 Clair。
14.4.1. 在 OpenShift Container Platform 中设置地理复制
使用以下步骤在 OpenShift Container Platform 上设置异地复制。
流程
- 为 Red Hat Quay 部署 postgres 实例。
输入以下命令登录到数据库:
psql -U <username> -h <hostname> -p <port> -d <database_name>
为 Red Hat Quay 创建名为
quay
的数据库。例如:CREATE DATABASE quay;
在数据库中启用 pg_trm 扩展
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
部署 Redis 实例:
注意- 如果云供应商有自己的服务,则可能无法部署 Redis 实例。
- 如果您使用 Builders,则需要部署 Redis 实例。
- 为 Redis 部署虚拟机
- 验证可以从运行 Red Hat Quay 的集群访问它
- 必须打开端口 6379/TCP
在实例内运行 Redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
- 创建两个对象存储后端,每个集群一个。理想情况下,一个对象存储桶将接近第一个或主、集群,另一个将接近第二个或次要集群。
- 使用环境变量覆盖来部署具有相同配置捆绑包的集群,以便为单个集群选择适当的存储后端。
- 配置负载均衡器以为集群提供单一入口点。
14.4.1.1. 在 OpenShift Container Platform 上为 Red Hat Quay Operator 配置 geo-replication
使用以下步骤为 Red Hat Quay Operator 配置 geo-replication。
流程
创建在集群之间共享的
config.yaml
文件。此config.yaml
文件包含常见 PostgreSQL、Redis 和存储后端的详情:geo-replication
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
运行以下命令来创建
configBundleSecret
:$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
在每个集群中,设置
configBundleSecret
,并使用QUAY_DISTRIBUTED_STORAGE_PREFERENCE
环境变量覆盖来配置该集群的相应存储。例如:注意两个部署之间的
config.yaml
文件都必须匹配。如果更改一个集群,还必须在另一个集群中更改它。美国集群
QuayRegistry
示例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
注意因为 SSL/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
注意因为 SSL/TLS 是非受管的,并且路由被管理,因此您必须使用配置工具或直接在配置捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由。
14.4.2. 从 Red Hat Quay Operator 部署中删除地理复制站点
通过按照以下流程,Red Hat Quay 管理员可以删除地理复制设置中的站点。
先决条件
- 已登陆到 OpenShift Container Platform。
-
您已为 Red Hat Quay geo-replication 配置至少两个站点,例如
usstorage
和eustorage
。 - 每个站点都有自己的组织、存储库和镜像标签。
流程
运行以下命令,在所有定义的站点间同步 Blob:
$ python -m util.backfillreplication
警告在从 Red Hat Quay
config.yaml
文件中删除存储引擎 前,您必须确保 所有 Blob 在所有定义的站点间同步。运行此命令时,会创建复制 worker 提取的复制作业。如果存在需要复制的 Blob,脚本会返回要复制的 Blob 的 UUID。如果您多次运行此命令,并且返回脚本的输出为空,这并不意味着复制过程已完成;这意味着没有为复制进行排队。在继续操作前,客户应该使用适当的 judgement,因为分配的时间复制取决于检测到的 Blob 数量。
另外,您可以使用 Microsoft Azure 等第三方云工具来检查同步状态。
在继续操作前,必须完成此步骤。
-
在站点
usstorage
的 Red Hat Quayconfig.yaml
文件中,删除eustorage
站点的DISTRIBUTED_STORAGE_CONFIG
条目。 输入以下命令识别您的
Quay
应用程序 pod:$ oc get pod -n <quay_namespace>
输出示例
quay390usstorage-quay-app-5779ddc886-2drh2 quay390eustorage-quay-app-66969cd859-n2ssm
输入以下命令在
usstorage
pod 中打开交互式 shell 会话:$ oc rsh quay390usstorage-quay-app-5779ddc886-2drh2
输入以下命令永久删除
eustorage
站点:重要无法撤销以下操作。请谨慎使用。
sh-4.4$ python -m util.removelocation eustorage
输出示例
WARNING: This is a destructive operation. Are you sure you want to remove eustorage from your storage locations? [y/n] y Deleted placement 30 Deleted placement 31 Deleted placement 32 Deleted placement 33 Deleted location eustorage