14.3. 使用独立 Red Hat Quay 进行区域复制
在以下镜像中,Red Hat Quay 在两个独立的区域独立运行,一个通用数据库和通用 Redis 实例。本地化镜像存储在每个区域中提供,镜像拉取是从最接近的可用存储引擎提供的。容器镜像推送被写入 Red Hat Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。
如果 Clair 在一个集群中失败,例如 US 集群,则美国用户不会在 Red Hat Quay for the second cluster (EU)中看到漏洞报告。这是因为所有 Clair 实例都有相同的状态。当 Clair 失败时,通常是因为集群中的问题。
地理复制架构
14.3.1. 启用存储复制 - 独立 Quay
使用以下步骤在 Red Hat Quay 上启用存储复制。
流程
- 在 Red Hat Quay 配置编辑器中,找到 Registry Storage 部分。
- 点 Enable Storage Replication。
- 添加要复制数据的每个存储引擎。必须列出所有要使用的存储引擎。
如果需要将所有镜像完整复制到所有存储引擎,请在每个存储引擎配置下点 Replicate to storage engine。这样可确保所有镜像都复制到该存储引擎。
注意要启用每个命名空间的复制,请联络 Red Hat Quay 支持。
- 完成后,点 Save Configuration Changes。Red Hat Quay 重启后将生效。
在为 geo-replication 添加存储并在存储引擎 中启用复制后,您必须在所有存储中同步现有镜像数据。要做到这一点,您必须在容器中
oc exec
(alternative,docker exec
或kubectl exec
),并输入以下命令:# scl enable python27 bash # python -m util.backfillreplication
注意这是一个在添加新存储后同步内容的一次性操作。
14.3.2. 使用存储首选项运行 Red Hat Quay
- 将 config.yaml 复制到运行 Red Hat Quay 的所有机器上
对于每个区域中的每台机器,使用运行机器的区域的首选存储引擎添加一个
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
环境变量。例如,对于在 Europe 中运行的机器,且主机上的 config 目录来自
$QUAY/config
:$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -e QUAY_DISTRIBUTED_STORAGE_PREFERENCE=europestorage \ registry.redhat.io/quay/quay-rhel8:v3.9.7
注意指定的环境变量的值必须与配置面板中定义的 Location ID 的名称匹配。
- 重启所有 Red Hat Quay 容器
14.3.3. 从独立的 Red Hat Quay 部署中删除地理复制站点
通过按照以下流程,Red Hat Quay 管理员可以删除地理复制设置中的站点。
先决条件
-
您已为 Red Hat Quay geo-replication 配置至少两个站点,例如
usstorage
和eustorage
。 - 每个站点都有自己的组织、存储库和镜像标签。
流程
运行以下命令,在所有定义的站点间同步 Blob:
$ python -m util.backfillreplication
警告在从 Red Hat Quay
config.yaml
文件中删除存储引擎 前,您必须确保 所有 Blob 在所有定义的站点间同步。在继续操作前,请完成此步骤。-
在站点
usstorage
的 Red Hat Quayconfig.yaml
文件中,删除eustorage
站点的DISTRIBUTED_STORAGE_CONFIG
条目。 输入以下命令获取正在运行的容器列表:
$ podman ps
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92c5321cde38 registry.redhat.io/rhel8/redis-5:1 run-redis 11 days ago Up 11 days ago 0.0.0.0:6379->6379/tcp redis 4e6d1ecd3811 registry.redhat.io/rhel8/postgresql-13:1-109 run-postgresql 33 seconds ago Up 34 seconds ago 0.0.0.0:5432->5432/tcp postgresql-quay d2eadac74fda registry-proxy.engineering.redhat.com/rh-osbs/quay-quay-rhel8:v3.9.0-131 registry 4 seconds ago Up 4 seconds ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay
输入以下命令在 PostgreSQL 容器内执行 shell:
$ podman exec -it postgresql-quay -- /bin/bash
运行以下命令来输入 psql :
bash-4.4$ psql
输入以下命令在 geo-replicated 部署中显示站点列表:
quay=# select * from imagestoragelocation;
输出示例
id | name ----+------------------- 1 | usstorage 2 | eustorage
输入以下命令退出 postgres CLI 以重新输入 bash-4.4 :
\q
输入以下命令永久删除
eustorage
站点:重要无法撤销以下操作。请谨慎使用。
bash-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