18.2. 在独立部署中恢复 Red Hat Quay

此流程描述了如何在独立部署中恢复 Red Hat Quay。

前提条件

  • 您已备份了 Red Hat Quay 部署。

流程

  1. 在 Red Hat Quay 容器内创建一个将绑定挂载到 /conf/stack 的新目录:

    $ mkdir /opt/new-quay-install
  2. 将备份 独立部署的 Red Hat Quay 中创建的临时备份目录的内容复制到第 1 步中创建的 new-quay-install1 目录中:

    $ cp /tmp/quay-backup/quay-backup.tar.gz /opt/new-quay-install/
  3. 输入以下命令改变 new-quay-install 目录:

    $ cd /opt/new-quay-install/
  4. 提取 Red Hat Quay 目录的内容:

    $ tar xvf /tmp/quay-backup/quay-backup.tar.gz *

    输出示例:

    config.yaml
    config.yaml.bak
    extra_ca_certs/
    extra_ca_certs/ca.crt
    ssl.cert
    ssl.key
  5. 输入以下命令从您的支持的 config.yaml 文件中重新调用 DB_URI

    $ grep DB_URI config.yaml

    输出示例:

    postgresql://<username>:test123@172.24.10.50/quay
  6. 运行以下命令进入 PostgreSQL 数据库服务器:

    $ sudo postgres
  7. 输入 psql 并在 172.24.10.50 中创建新数据库,以恢复 quay 数据库,例如: example_restore_registry_quay_database

    $ psql "host=172.24.10.50  port=5432 dbname=postgres user=<username>  password=test123"
    postgres=> CREATE DATABASE example_restore_registry_quay_database;

    输出示例:

    CREATE DATABASE
  8. 运行以下命令来连接到数据库:

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

    输出示例:

    You are now connected to database "example-restore-registry-quay-database" as user "postgres".
  9. 运行以下命令,创建 Quay 数据库的 pg_trmg 扩展:

    example_restore_registry_quay_database=> CREATE EXTENSION IF NOT EXISTS pg_trgm;

    输出示例:

    CREATE EXTENSION
  10. 输入以下命令退出 postgres CLI:

    \q
  11. 运行以下命令,将数据库备份导入到新数据库中:

    $ psql "host=172.24.10.50 port=5432 dbname=example_restore_registry_quay_database user=<username> password=test123"  -W <  /tmp/quay-backup/quay-backup.sql

    输出示例:

    SET
    SET
    SET
    SET
    SET

    在重启 Red Hat Quay 部署前,将 config.yaml 中的 DB_URI 的值从postgresql://<username>:test123@172.24.10.50/quay 更新到 postgresql://<username>:test123@172.24.10.50/example-restore-registry-quay-database

    注意

    DB_URI 格式是 DB_URI postgresql://<login_user_name>:<login_user_password>@<postgresql_host>/<quay_database>。如果您要从一个 PostgreSQL 服务器移动到另一个 PostgreSQL 服务器,请同时更新 < login_user_name>、< login_user_password><postgresql_host > 的值。

  12. /opt/new-quay-install 目录中打印您的 DISTRIBUTED_STORAGE_CONFIG 捆绑包的内容:

    $ cat config.yaml | grep DISTRIBUTED_STORAGE_CONFIG -A10

    输出示例:

    DISTRIBUTED_STORAGE_CONFIG:
       default:
    DISTRIBUTED_STORAGE_CONFIG:
       default:
        - S3Storage
        - s3_bucket: <bucket_name>
          storage_path: /registry
          s3_access_key: <s3_access_key>
          s3_secret_key: <s3_secret_key>
          host: <host_name>
    注意

    在重启 Red Hat Quay 部署前,必须更新 /opt/new-quay-install 中的 DISTRIBUTED_STORAGE_CONFIG

  13. 使用在第 13 步中获得的 access_key 凭证导出 AWS_ACCESS_KEY_ID

    $ export AWS_ACCESS_KEY_ID=<access_key>
  14. 使用在第 13 步中获得的 secret_key 导出 AWS_SECRET_ACCESS_KEY:

    $ export AWS_SECRET_ACCESS_KEY=<secret_key>
  15. 输入以下命令创建新 s3 存储桶:

    $ aws s3 mb s3://<new_bucket_name>  --region us-east-2

    输出示例:

    $ make_bucket: quay
  16. 输入以下命令将所有 blob 上传到新的 s3 存储桶:

    $ aws s3 sync --no-verify-ssl \
    --endpoint-url <example_endpoint_url> 1
    /tmp/quay-backup/blob-backup/. s3://quay/
    1
    在备份和恢复前,Red Hat Quay registry 端点必须相同。

    输出示例:

    upload: ../../tmp/quay-backup/blob-backup/datastorage/registry/sha256/50/505edb46ea5d32b5cbe275eb766d960842a52ee77ac225e4dc8abb12f409a30d to s3://quay/datastorage/registry/sha256/50/505edb46ea5d32b5cbe275eb766d960842a52ee77ac225e4dc8abb12f409a30d
    upload: ../../tmp/quay-backup/blob-backup/datastorage/registry/sha256/27/27930dc06c2ee27ac6f543ba0e93640dd21eea458eac47355e8e5989dea087d0 to s3://quay/datastorage/registry/sha256/27/27930dc06c2ee27ac6f543ba0e93640dd21eea458eac47355e8e5989dea087d0
    upload: ../../tmp/quay-backup/blob-backup/datastorage/registry/sha256/8c/8c7daf5e20eee45ffe4b36761c4bb6729fb3ee60d4f588f712989939323110ec to s3://quay/datastorage/registry/sha256/8c/8c7daf5e20eee45ffe4b36761c4bb6729fb3ee60d4f588f712989939323110ec
    ...
  17. 在重启 Red Hat Quay 部署前,更新 config.yaml 中的存储设置:

    DISTRIBUTED_STORAGE_CONFIG:
       default:
    DISTRIBUTED_STORAGE_CONFIG:
       default:
        - S3Storage
        - s3_bucket: <new_bucket_name>
          storage_path: /registry
          s3_access_key: <s3_access_key>
          s3_secret_key: <s3_secret_key>
          host: <host_name>