第 18 章 在独立部署中备份和恢复 Red Hat Quay
使用本节中的内容在独立部署中备份和恢复 Red Hat Quay。
18.1. 可选:为 Red Hat Quay 启用只读模式 复制链接链接已复制到粘贴板!
为 Red Hat Quay 部署启用只读模式允许您管理 registry 操作。Red Hat Quay 管理员可以启用只读模式来限制对 registry 的写访问,这有助于确保数据完整性,降低维护窗口期间的风险,并对 registry 数据提供不必要的修改。它还有助于确保您的 Red Hat Quay registry 保持在线状态,并可供用户使用。
在某些情况下,无法进行 Red Hat Quay 的只读选项,因为它需要插入服务密钥和其他手动配置更改。作为只读模式的替代选择,Red Hat Quay 管理员可能会考虑启用 DISABLE_PUSHES 功能。当此字段设置为 true 时,用户无法在使用 CLI 时将镜像或镜像标签推送到 registry。启用 DISABLE_PUSHES 与 只读模式 不同,因为数据库在启用时没有 设置为只读。
在某些情况下,此字段可能很有用,如 Red Hat Quay 管理员想要计算其 registry 配额和禁用镜像推送,直到计算完成后为止。使用这个方法,管理员可以避免将整个 registry 置于 只读模式,这会影响数据库,以便仍可执行大多数操作。
有关启用此配置字段的详情,请参考 其它配置字段。
先决条件
如果您使用 Red Hat Enterprise Linux (RHEL) 7.x:
- 您已启用了 Red Hat Software Collections List (RHSCL)。
- 已安装 Python 3.6。
-
您已下载了
virtualenv软件包。 -
已安装
gitCLI。
如果您使用 Red Hat Enterprise Linux (RHEL) 8:
- 您已在机器上安装了 Python 3。
-
您已下载了
python3-virtualenv软件包。 -
已安装
gitCLI。
-
您已克隆了
https://github.com/quay/quay.git软件仓库。
18.1.1. 为独立 Red Hat Quay 创建服务密钥 复制链接链接已复制到粘贴板!
Red Hat Quay 使用服务密钥与各种组件进行通信。这些密钥用于签署已完成的请求,如请求扫描镜像、登录、存储访问等。
流程
如果您的 Red Hat Quay registry 可用,您可以在
Quayregistry 容器中生成服务密钥。输入以下命令在
Quay容器内生成密钥对:podman exec quay python3 tools/generatekeypair.py quay-readonly
$ podman exec quay python3 tools/generatekeypair.py quay-readonlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您的 Red Hat Quay 不可用,您必须在虚拟环境中生成您的服务密钥。
进入 Red Hat Quay 部署的目录,并在该目录中创建虚拟环境:
cd <$QUAY>/quay && virtualenv -v venv
$ cd <$QUAY>/quay && virtualenv -v venvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令激活虚拟环境:
source venv/bin/activate
$ source venv/bin/activateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。安装
pipCLI 工具(如果没有安装它):venv/bin/pip install --upgrade pip
$ venv/bin/pip install --upgrade pipCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Red Hat Quay 目录中,使用以下内容创建一个
requirements-generatekeys.txt文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令安装
requirements-generatekeys.txt文件中定义的 Python 依赖项:venv/bin/pip install -r requirements-generatekeys.txt
$ venv/bin/pip install -r requirements-generatekeys.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建所需的服务密钥:
PYTHONPATH=. venv/bin/python /<path_to_cloned_repo>/tools/generatekeypair.py quay-readonly
$ PYTHONPATH=. venv/bin/python /<path_to_cloned_repo>/tools/generatekeypair.py quay-readonlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pem
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令取消激活虚拟环境:
deactivate
$ deactivateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.1.2. 在 PostgreSQL 数据库中添加密钥 复制链接链接已复制到粘贴板!
使用以下步骤将服务密钥添加到 PostgreSQL 数据库中。
先决条件
- 您已创建了服务密钥。
流程
输入以下命令输入 Red Hat Quay 数据库环境:
podman exec -it postgresql-quay psql -U postgres -d quay
$ podman exec -it postgresql-quay psql -U postgres -d quayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令显示
servicekeyapproval的批准类型和相关备注:quay=# select * from servicekeyapproval;
quay=# select * from servicekeyapproval;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下查询在 Red Hat Quay 数据库中添加服务密钥:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
INSERT 0 1
INSERT 0 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接下来,使用以下查询添加密钥批准:
quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
INSERT 0 1
INSERT 0 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将所创建的服务键行中的
approval_字段设置为所创建的服务密钥批准中的 id 字段。您可以使用以下idSELECT语句来获取必要的 ID:UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';
UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';Copy to Clipboard Copied! Toggle word wrap Toggle overflow UPDATE 1
UPDATE 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.1.3. 为独立 Red Hat Quay 配置只读模式 复制链接链接已复制到粘贴板!
创建服务密钥并添加到 PostgreSQL 数据库后,您必须在独立部署中重启 Quay 容器。
先决条件
- 您已创建了服务密钥,并将它们添加到 PostgreSQL 数据库中。
流程
关闭所有虚拟机上的所有 Red Hat Quay 实例。例如:
podman stop <quay_container_name_on_virtual_machine_a>
$ podman stop <quay_container_name_on_virtual_machine_a>Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman stop <quay_container_name_on_virtual_machine_b>
$ podman stop <quay_container_name_on_virtual_machine_b>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将
quay-readonly.kid文件的内容和quay-readonly.pem文件复制到保存 Red Hat Quay 配置捆绑包的目录中:cp quay-readonly.kid quay-readonly.pem $Quay/config
$ cp quay-readonly.kid quay-readonly.pem $Quay/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令在配置捆绑包文件夹中的所有文件设置文件权限:
setfacl -m user:1001:rw $Quay/config/*
$ setfacl -m user:1001:rw $Quay/config/*Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改 Red Hat Quay
config.yaml文件并添加以下信息:... ...
# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将新配置捆绑包分发到所有 Red Hat Quay 实例。
输入以下命令启动 Red Hat Quay:
podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay-main-app \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ {productrepo}/{quayimage}:{productminv}$ podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay-main-app \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ {productrepo}/{quayimage}:{productminv}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 Red Hat Quay 后,您的实例中的一个横幅告知用户 Red Hat Quay 以只读模式运行。推送应被拒绝,应记录 405 错误。您可以运行以下命令来测试它:
podman push <quay-server.example.com>/quayadmin/busybox:test
$ podman push <quay-server.example.com>/quayadmin/busybox:testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
613be09ab3c0: Preparing denied: System is currently read-only. Pulls will succeed but all write operations are currently suspended.
613be09ab3c0: Preparing denied: System is currently read-only. Pulls will succeed but all write operations are currently suspended.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以只读模式部署 Red Hat Quay,您可以安全地管理 registry 的操作并执行此类操作,如备份和恢复。
可选。完成只读模式后,您可以通过从
config.yaml文件中删除以下信息来返回到正常操作。然后,重启 Red Hat Quay 部署:... ...
# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman restart <container_id>
$ podman restart <container_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.1.4. 更新只读过期时间 复制链接链接已复制到粘贴板!
Red Hat Quay 只读密钥具有过期日期,当该日期通过密钥时,会停用该密钥。在密钥过期前,可以在数据库中更新其过期时间。要更新密钥,请使用前面描述的方法连接 Red Hat Quay production 数据库,并发出以下查询:
quay=# UPDATE servicekey SET expiration_date = 'new-date' WHERE id = servicekey_id;
quay=# UPDATE servicekey SET expiration_date = 'new-date' WHERE id = servicekey_id;
可以通过运行以下查询来获取服务密钥 ID 列表:
SELECT id, name, expiration_date FROM servicekey;
SELECT id, name, expiration_date FROM servicekey;