第 6 章 备份和恢复由 Red Hat Quay Operator 管理的 Red Hat Quay
在 OpenShift Container Platform 上由 Red Hat Quay Operator 管理时,使用本节中的内容来备份和恢复 Red Hat Quay
在 OpenShift Container Platform 部署中为 Red Hat Quay 启用只读模式,您可以管理 registry 的操作。管理员可以启用只读模式来限制对 registry 的写入访问,这有助于确保数据完整性,降低维护窗口期间的风险,并提供防止对 registry 数据的意外修改。它还可帮助您确保 Red Hat Quay registry 保持在线状态,并可供用户提供镜像。
在备份和恢复时,您需要在 OpenShift Container Platform 部署中缩减 Red Hat Quay。这会导致在备份期间服务不可用,在某些情况下,可能无法接受。在 OpenShift Container Platform 部署中为 Red Hat Quay 启用只读模式可确保在备份和恢复过程中服务可用性。
先决条件
如果您使用 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软件仓库。 -
已安装
ocCLI。 -
您可以使用
cluster-admin权限访问集群。
Red Hat Quay 使用服务密钥与各种组件通信。这些密钥用于签署已完成的请求,如请求扫描镜像、登录、存储访问等。
步骤
输入以下命令获取 Red Hat Quay pod 列表:
oc get pods -n <namespace>
$ oc get pods -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令打开到
Quay容器的远程 shell 会话:oc rsh example-registry-quay-app-76c8f55467-52wjz
$ oc rsh example-registry-quay-app-76c8f55467-52wjzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建所需的服务密钥:
python3 tools/generatekeypair.py quay-readonly
sh-4.4$ python3 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
6.1.2. 将密钥添加到 PostgreSQL 数据库 复制链接链接已复制到粘贴板!
使用以下步骤将服务密钥添加到 PostgreSQL 数据库中。
先决条件
- 您已创建了服务密钥。
步骤
输入以下命令进入 Red Hat Quay 数据库环境:
oc rsh example-registry-quay-app-76c8f55467-52wjz psql -U <database_username> -d <database_name>
$ oc rsh example-registry-quay-app-76c8f55467-52wjz psql -U <database_username> -d <database_name>Copy 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
在创建了服务密钥并添加到 PostgreSQL 数据库后,您必须在 OpenShift Container Platform 部署中重启 Quay 容器。
以只读模式在 OpenShift Container Platform 上部署 Red Hat Quay 要求您修改存储在 OpenShift Container Platform 集群中的 secret。强烈建议您在更改 secret 前创建 secret 备份。
先决条件
- 您已创建了服务密钥,并将它们添加到 PostgreSQL 数据库中。
步骤
输入以下命令在 OpenShift Container Platform 部署中读取 Red Hat Quay 的 secret 名称:
oc get deployment -o yaml <quay_main_app_deployment_name>
$ oc get deployment -o yaml <quay_main_app_deployment_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
base64命令对quay-readonly.kid和quay-readonly.pem文件进行编码:base64 -w0 quay-readonly.kid
$ base64 -w0 quay-readonly.kidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ZjUyNDFm...
ZjUyNDFm...Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64 -w0 quay-readonly.pem
$ base64 -w0 quay-readonly.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
LS0tLS1CRUdJTiBSU0E...
LS0tLS1CRUdJTiBSU0E...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来获取当前的配置捆绑包和 secret:
oc get secret quay-config-secret-name -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > config.yaml
$ oc get secret quay-config-secret-name -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
config.yaml文件并添加以下信息:# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
# ... 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 运行以下命令保存文件和
base64编码:base64 -w0 quay-config.yaml
$ base64 -w0 quay-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Red Hat Quay Operator pod 缩减为
0。这样可确保 Operator 在编辑后不会协调 secret。oc scale --replicas=0 deployment quay-operator -n openshift-operators
$ oc scale --replicas=0 deployment quay-operator -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 secret 使其包含新内容:
oc edit secret quay-config-secret-name -n quay-namespace
$ oc edit secret quay-config-secret-name -n quay-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在只读模式下使用 Red Hat Quay on OpenShift Container Platform 部署,您可以安全地管理 registry 的操作并执行诸如备份和恢复的操作。
当您不再需要 OpenShift Container Platform 上的 Red Hat Quay 处于只读模式时,您可以扩展部署,并从 secret 中删除添加的内容。
步骤
编辑
config.yaml文件并删除以下信息:# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
# ... 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 Operator:
oc scale --replicas=1 deployment quay-operator -n openshift-operators
oc scale --replicas=1 deployment quay-operator -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow