17.2. 使用备份的独立内容迁移到 OpenShift Container Platform。

前提条件

  • 您的独立 Red Hat Quay 数据、blob、数据库和 config.yaml 已被备份。
  • Red Hat Quay 使用 Quay Operator 部署到 OpenShift Container Platform 上。
  • 将带有所有组件的 QuayRegistry 设置为 managed
流程

本文档中的步骤使用以下命名空间: quay-enterprise

  1. 缩减 Red Hat Quay Operator:

    $ oc scale --replicas=0 deployment quay-operator.v3.6.2 -n openshift-operators
  2. 缩减应用程序并镜像部署:

    $ oc scale --replicas=0 deployment QUAY_MAIN_APP_DEPLOYMENT QUAY_MIRROR_DEPLOYMENT
  3. 将数据库 SQL 备份复制到 Quay PostgreSQL 数据库实例中:

    $ oc cp /tmp/user/quay-backup/quay-database-backup.sql quay-enterprise/quayregistry-quay-database-54956cdd54-p7b2w:/var/lib/pgsql/data/userdata
  4. 从 Operator 创建的 config.yaml 文件获取数据库密码:

    $ oc get deployment quay-quay-app -o json | jq '.spec.template.spec.volumes[].projected.sources' | grep -i config-secret

    输出示例:

          "name": "QUAY_CONFIG_SECRET_NAME"
    $ oc get secret quay-quay-config-secret-9t77hb84tb -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > /tmp/quay-backup/operator-quay-config-yaml-backup.yaml
    cat /tmp/quay-backup/operator-quay-config-yaml-backup.yaml | grep -i DB_URI

    输出示例:

    postgresql://QUAY_DATABASE_OWNER:PASSWORD@DATABASE_HOST/QUAY_DATABASE_NAME
  5. 在数据库 pod 中执行 shell:

    # oc exec -it quay-postgresql-database-pod -- /bin/bash
  6. Enter psql:

    bash-4.4$ psql
  7. 丢弃数据库:

    postgres=# DROP DATABASE "example-restore-registry-quay-database";

    输出示例:

    DROP DATABASE
  8. 创建新数据库并设置所有者与名称相同:

    postgres=# CREATE DATABASE "example-restore-registry-quay-database" OWNER "example-restore-registry-quay-database";

    输出示例:

    CREATE DATABASE
  9. 连接到数据库:

    postgres=# \c "example-restore-registry-quay-database";

    输出示例:

    You are now connected to database "example-restore-registry-quay-database" as user "postgres".
  10. 创建 Quay 数据库的 pg_trmg 扩展:

    example-restore-registry-quay-database=# create extension pg_trgm ;

    输出示例:

    CREATE EXTENSION
  11. 退出 postgres CLI 以重新输入 bash-4.4:

    \q
  12. 设置 PostgreSQL 部署的密码:

    bash-4.4$ psql -h localhost -d "QUAY_DATABASE_NAME" -U QUAY_DATABASE_OWNER -W < /var/lib/pgsql/data/userdata/quay-database-backup.sql

    输出示例:

    SET
    SET
    SET
    SET
    SET
  13. 退出 bash 模式:

    bash-4.4$ exit
  14. 为 Red Hat Quay Operator 创建新的配置捆绑包。

    $ touch config-bundle.yaml
  15. 在新的 config-bundle.yaml 中,包括 registry 需要的所有信息,如 LDAP 配置、密钥以及旧 registry 的其他修改。运行以下命令,将 secret_key 移到 config-bundle.yaml 中:

    $ cat /tmp/quay-backup/config.yaml | grep SECRET_KEY > /tmp/quay-backup/config-bundle.yaml
    注意

    您必须手动复制所有 LDAP、OIDC 和其他信息并将其添加到 /tmp/quay-backup/config-bundle.yaml 文件中。

  16. 在 OpenShift 集群内创建配置捆绑包 secret:

    $ oc create secret generic new-custom-config-bundle --from-file=config.yaml=/tmp/quay-backup/config-bundle.yaml
  17. 扩展 Quay pod:

    $ oc scale --replicas=1 deployment quayregistry-quay-app
    deployment.apps/quayregistry-quay-app scaled
  18. 扩展镜像 pod:

    $ oc scale --replicas=1  deployment quayregistry-quay-mirror
    deployment.apps/quayregistry-quay-mirror scaled
  19. QuayRegistry CRD 进行补丁,使其包含对新自定义配置捆绑包的引用:

    $ oc patch quayregistry QUAY_REGISTRY_NAME --type=merge -p '{"spec":{"configBundleSecret":"new-custom-config-bundle"}}'
    注意

    如果 Quay 返回 500 个内部服务器错误,您可能需要将 DISTRIBUTED_STORAGE_CONFIG 的位置 更新为 默认的

  20. /.aws/ 目录中创建一个新的 AWS credentials.yaml,并包含来自 Operator 创建的 config.yaml 文件中的 access_keysecret_key

    $ touch credentials.yaml
    $ grep -i DISTRIBUTED_STORAGE_CONFIG -A10 /tmp/quay-backup/operator-quay-config-yaml-backup.yaml
    $ cat > ~/.aws/credentials << EOF
    [default]
    aws_access_key_id = ACCESS_KEY_FROM_QUAY_CONFIG
    aws_secret_access_key = SECRET_KEY_FROM_QUAY_CONFIG
    EOF
    注意

    如果 aws cli 不会自动从 '~/.aws/credentials 文件 收集 access_keysecret_key,您可以通过运行 aws 配置并手动输入凭证来配置 这些配置。

  21. 记录 NooBaa 的公开端点:

    $ oc get route s3 -n openshift-storage -o yaml -o jsonpath="{.spec.host}{'\n'}"
  22. 将备份数据同步到 NooBaa 后端存储:

    $ aws s3 sync --no-verify-ssl --endpoint-url https://NOOBAA_PUBLIC_S3_ROUTE /tmp/quay-backup/bucket-backup/* s3://QUAY_DATASTORE_BUCKET_NAME
  23. 将 Operator 扩展至 1 个 pod:

    $ oc scale –replicas=1 deployment quay-operator.v3.6.4 -n openshift-operators

Operator 将使用提供的自定义配置捆绑包,并将协调所有 secret 和部署。在 OpenShift Container Platform 上,您的新 Quay 部署应包含旧部署所需的所有信息。所有镜像均应可以拉取。