部署 Red Hat Quay - 高可用性
部署 Red Hat Quay HA
摘要
前言
Red Hat Quay 是一个企业级容器 registry。使用 Quay 构建和存储容器,然后将其部署到企业内的服务器上。
此流程描述了如何部署高可用性、企业级质量的 Red Hat Quay 设置。
第 1 章 概述
Red Hat Quay 包括以下功能:
- 高可用性
- geo-replication
- 仓库镜像
- Docker v2、模式 2 (多架构)支持
- 持续集成
- 使用 Clair 进行安全扫描
- 自定义日志轮转
- 零停机时间垃圾回收
- 24/7 支持
Red Hat Quay 对以下提供支持:
- 多个身份验证和访问方法
- 多个存储后端
- Quay、Clair 和存储后端的自定义证书
- 应用程序 registry
- 不同的容器镜像类型
1.1. 架构
Red Hat Quay 包括几个核心组件,包括内部和外部。
1.1.1. 内部组件
Red Hat Quay 包括以下内部组件:
-
Quay (容器注册表)将
Quay容器作为服务运行,由 pod 中的多个组件组成。 - Clair.扫描容器镜像中的漏洞并推荐修复。
1.1.2. 外部组件
Red Hat Quay 包括以下外部组件:
- 数据库.Red Hat Quay 用作其主要元数据存储。请注意,这不是镜像存储。
- redis (键-值存储)存储实时构建器日志和 Red Hat Quay 指南。还包括垃圾回收所需的锁定机制。
云存储。对于支持的部署,必须使用以下存储类型之一:
- 公共云存储.在公共云环境中,您应该使用云供应商的对象存储,如 Amazon Web Services 的 Amazon S3 或 Google Cloud 的 Google Cloud Storage。
- 私有云存储.在私有云中,需要 S3 或 Swift 兼容对象存储,如 Ceph RADOS 或 OpenStack Swift。
对于任何生产环境的配置,不要使用"本地挂载的目录"存储引擎。不支持挂载的 NFS 卷。本地存储用于 Red Hat Quay 测试安装。
第 2 章 准备 Red Hat Quay (高可用性)
此流程介绍了如何设置高度可用的、生产环境质量的 Red Hat Quay 部署。
2.1. 先决条件
在开始 Red Hat Quay 高可用性部署前,您需要了解以下几点:
Postgres 或 MySQL 可用于提供数据库服务。这里选择了 postgres 作为数据库,因为它包含支持 Clair 安全扫描所需的功能。其他选项包括:
- Crunchy Data PostgreSQL Operator:虽然红帽不直接支持,但 CrunchDB Operator 可从 Crunchy Data 中获得,供 Red Hat Quay 使用。如果您采用此路由,您应该有一个与 Crunchy Data 的支持合同,并直接与它们合作以获取与 Operator 及其数据库相关的使用指导或问题。
- 如果您的组织已有一个高可用性(HA)数据库,您可以将该数据库与 Red Hat Quay 搭配使用。如需有关支持第三方数据库和其他组件的详细信息,请参阅 Red Hat Quay 支持政策。
Ceph 对象网关(也称为 RADOS 网关)是一个产品示例,可以提供 Red Hat Quay 所需的对象存储。如果您希望 Red Hat Quay 设置执行异地复制,则需要 Ceph 对象网关或其他支持的对象存储。对于云安装,您可以使用以下任何云对象存储:
- Amazon S3 (请参阅 S3 IAM Bucket 策略,以了解有关为 Quay 配置 S3 存储桶策略的详细信息)
- Azure Blob Storage
- Google Cloud Storage
- Ceph 对象网关
- OpenStack Swift
- CloudFront + S3
- NooBaa S3 Storage
- 本例中使用了 haproxy 服务器,但您可以使用适用于您的环境的任何代理服务。
系统数量:这个流程使用通过以下任务分配的 7 个系统(物理或虚拟):
- 答:db01: Load balancer 和 database :运行 haproxy 负载均衡器和 Postgres 数据库。请注意,这些组件本身不可用,而是用于指示如何设置自己的负载均衡器或生产数据库。
- b: quay01, quay02, quay03: Quay 和 Redis: 三个(或更多)系统被分配来运行 Quay 和 Redis 服务。
- C: ceph01, ceph02, ceph03, ceph04, ceph05: Ceph: 三个系统提供 Ceph 服务,用于存储。如果要部署到云中,您可以使用前面描述的云存储功能。此流程将额外的系统用于 Ansible (ceph05),另一个用于 Ceph 对象网关(ceph04)。
每个系统都应该具有以下属性:
Red Hat Enterprise Linux (RHEL) 8:获取 下载页面中 的最新 Red Hat Enterprise Linux 8 服务器介质,并按照 Red Hat Enterprise Linux 9 产品文档中的安装说明进行操作。
- 有效的红帽订阅:配置 有效的 Red Hat Enterprise Linux 8 服务器订阅。
- CPU :两个或更多虚拟 CPU
- RAM :每个 A 和 B 系统的 4GB;每个 C 系统 8GB
- 磁盘空间 :对于每个 A 和 B 系统,关于 20GB 的磁盘空间(对于操作系统,10GB 用于操作系统,以及 10GB 用于 docker 存储)。C 系统至少有 30GB 磁盘空间(或者更依赖于所需的容器存储)。
2.2. 使用 podman
本文档使用 podman 来创建和部署容器。如果您的系统中没有 podman,可以使用对应的 docker 命令。有关 podman 和相关技术的更多信息,请参阅在 Red Hat Enterprise Linux 8 上构建、运行和管理 Linux 容器。
对于高可用性、生产环境质量部署 Red Hat Quay,我们强烈建议使用 Podman。Docker 尚未通过 Red Hat Quay 3.9 测试,并将在以后的版本中被弃用。
2.3. 设置 HAProxy 负载均衡器和 PostgreSQL 数据库
使用以下步骤设置 HAProxy 负载均衡器和 PostgreSQL 数据库。
前提条件
- 已安装 Podman 或 Docker CLI。
流程
在前两个系统(
q01和q02)上,安装 HAProxy 负载均衡器和 PostgreSQL 数据库。这会将 HAProxy 配置为在不同系统上运行的以下服务的接入点和负载均衡器:- Red Hat Quay (B 系统上的端口 80 和 443)
- Redis (B 系统上的端口 6379)
- RADOS (C 系统上的端口 7480)
在 SELinux 中打开所有 HAProxy 端口,并在防火墙中打开所选 HAProxy 端口:
# setsebool -P haproxy_connect_any=on # firewall-cmd --permanent --zone=public --add-port=6379/tcp --add-port=7480/tcp success # firewall-cmd --reload success
将
/etc/haproxy/haproxy.cfg配置为指向提供 Red Hat Quay、Red Hat Quay、Redis 和 Ceph RADOS 服务的系统和端口。以下是默认值和添加了 frontend 和 backend 设置的示例:#--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode tcp log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend fe_http *:80 default_backend be_http frontend fe_https *:443 default_backend be_https frontend fe_redis *:6379 default_backend be_redis frontend fe_rdgw *:7480 default_backend be_rdgw backend be_http balance roundrobin server quay01 quay01:80 check server quay02 quay02:80 check server quay03 quay03:80 check backend be_https balance roundrobin server quay01 quay01:443 check server quay02 quay02:443 check server quay03 quay03:443 check backend be_rdgw balance roundrobin server ceph01 ceph01:7480 check server ceph02 ceph02:7480 check server ceph03 ceph03:7480 check backend be_redis server quay01 quay01:6379 check inter 1s server quay02 quay02:6379 check inter 1s server quay03 quay03:6379 check inter 1s在新的
haproxy.cfg文件就位后,输入以下命令重启 HAProxy 服务:# systemctl restart haproxy
输入以下命令为 PostgreSQL 数据库创建一个文件夹:
$ mkdir -p /var/lib/pgsql/data
为
/var/lib/pgsql/data文件夹设置以下权限:$ chmod 777 /var/lib/pgsql/data
输入以下命令启动 PostgreSQL 数据库:
$ sudo podman run -d --name postgresql_database \ -v /var/lib/pgsql/data:/var/lib/pgsql/data:Z \ -e POSTGRESQL_USER=quayuser -e POSTGRESQL_PASSWORD=quaypass \ -e POSTGRESQL_DATABASE=quaydb -p 5432:5432 \ registry.redhat.io/rhel8/postgresql-13:1-109注意容器中的数据将保存在主机系统的
/var/lib/pgsql/data目录中。输入以下命令列出可用的扩展:
$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "SELECT * FROM pg_available_extensions" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
输出示例
name | default_version | installed_version | comment -----------+-----------------+-------------------+---------------------------------------- adminpack | 1.0 | | administrative functions for PostgreSQL ...
输入以下命令来创建
pg_trgm扩展:$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS pg_trgm;" | /opt/rh/rh-postgresql96/root/usr/bin/psql -d quaydb'
输入以下命令确认
pg_trgm已创建:$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "SELECT * FROM pg_extension" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
输出示例
extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition ---------+----------+--------------+----------------+------------+-----------+-------------- plpgsql | 10 | 11 | f | 1.0 | | pg_trgm | 10 | 2200 | t | 1.3 | | (2 rows)
更改 Postgres 用户
quayuser的权限,并授予其超级用户角色,授予用户对数据库的不受限制的访问权限:$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "ALTER USER quayuser WITH SUPERUSER;" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
输出示例
ALTER ROLE
如果您的系统中活跃了 firewalld 服务,请运行以下命令使 PostgreSQL 端口通过防火墙可用:
# firewall-cmd --permanent --zone=trusted --add-port=5432/tcp
# firewall-cmd --reload
可选。如果您没有安装
postgresCLI 软件包,请输入以下命令安装它:# yum install postgresql -y
使用
psql命令测试与 PostgreSQL 数据库的连接。注意要验证您可以远程访问该服务,请在远程系统中运行以下命令:
# psql -h localhost quaydb quayuser
输出示例
Password for user test: psql (9.2.23, server 9.6.5) WARNING: psql version 9.2, server version 9.6. Some psql features might not work. Type "help" for help. test=> \q
2.4. 设置 Ceph
对于此 Red Hat Quay 配置,我们创建一个三节点 Ceph 集群,它带有几个其他支持节点,如下所示:
- ceph01、ceph02 和 ceph03 - Ceph monitor、Ceph Manager 和 Ceph OSD 节点
- ceph04 - Ceph RGW 节点
- ceph05 - Ceph Ansible 管理节点
有关安装 Ceph 节点的详情,请参阅在 Red Hat Enterprise Linux 上安装 Red Hat Ceph Storage。
设置 Ceph 存储集群后,创建一个 Ceph 对象网关(也称为 RADOS 网关)。详情请参阅安装 Ceph 对象网关。
2.4.1. 安装每个 Ceph 节点
在 ceph01, ceph02, ceph03, ceph04, 和 ceph05 上,执行以下操作:
查看 安装 Red Hat Ceph Storage 要求中设置 Ceph 节点的先决条件。特别是:
- 决定要在 OSD 节点 上使用 RAID 控制器。
- 决定是否需要单独的集群网络用于 Ceph 网络配置。
-
准备 OSD 存储(仅限 ceph01、ceph02 和 ceph03)。在三个 OSD 节点上设置 OSD 存储(ceph01、ceph02 和 ceph03)。如需了解有关稍后进入 Ansible 配置中支持的存储类型的详细信息,请参阅 Table 3.2 中的 OSD Ansible Settings。在本例中,每个 OSD 节点上配置了一个未格式化的块设备(
/dev/sdb),它与操作系统分开。如果要在裸机上安装,您可能需要在机器中添加额外的硬盘驱动器。 - 安装 Red Hat Enterprise Linux Server 版本,如 RHEL 7 安装指南 所述。
注册并订阅每个 Ceph 节点,如 注册 Red Hat Ceph Storage 节点 中所述。以下是如何订阅必要的存储库:
# subscription-manager repos --disable=* # subscription-manager repos --enable=rhel-7-server-rpms # subscription-manager repos --enable=rhel-7-server-extras-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-rpms # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
在每个节点上创建一个具有 root 特权的 ansible 用户。选择您需要的任何名称。例如:
# USER_NAME=ansibleadmin # useradd $USER_NAME -c "Ansible administrator" # passwd $USER_NAME New password: ********* Retype new password: ********* # cat << EOF >/etc/sudoers.d/admin admin ALL = (root) NOPASSWD:ALL EOF # chmod 0440 /etc/sudoers.d/$USER_NAME
2.4.2. 配置 Ceph Ansible 节点(ceph05)
登录 Ceph Ansible 节点(ceph05),并将它配置如下:您需要运行 ceph01、ceph02 和 ceph03 节点来完成这些步骤。
在 Ansible 用户的主目录中,创建一个目录来存储从 ceph-ansible playbook 创建的临时值
# USER_NAME=ansibleadmin # sudo su - $USER_NAME [ansibleadmin@ceph05 ~]$ mkdir ~/ceph-ansible-keys
为 ansible 用户启用无密码 ssh。在 ceph05 上运行 ssh-keygen (将密码短语留空),然后运行并重复 ssh-copy-id,将公钥复制到 ceph01、ceph02 和 ceph03 系统上的 Ansible 用户:
# USER_NAME=ansibleadmin # sudo su - $USER_NAME [ansibleadmin@ceph05 ~]$ ssh-keygen [ansibleadmin@ceph05 ~]$ ssh-copy-id $USER_NAME@ceph01 [ansibleadmin@ceph05 ~]$ ssh-copy-id $USER_NAME@ceph02 [ansibleadmin@ceph05 ~]$ ssh-copy-id $USER_NAME@ceph03 [ansibleadmin@ceph05 ~]$ exit #
安装 ceph-ansible 软件包:
# yum install ceph-ansible
在这两个目录间创建一个符号链接:
# ln -s /usr/share/ceph-ansible/group_vars \ /etc/ansible/group_vars创建 Ceph 示例 yml 文件的副本以进行修改:
# cd /usr/share/ceph-ansible # cp group_vars/all.yml.sample group_vars/all.yml # cp group_vars/osds.yml.sample group_vars/osds.yml # cp site.yml.sample site.yml
编辑复制的 group_vars/all.yml 文件。有关详细信息,请参阅 表 3.1 中的常规 Ansible 设置。例如:
ceph_origin: repository ceph_repository: rhcs ceph_repository_type: cdn ceph_rhcs_version: 3 monitor_interface: eth0 public_network: 192.168.122.0/24
请注意,您的网络设备和地址范围可能有所不同。
编辑复制的
group_vars/osds.yml文件。有关详细信息,请参阅 表 3.2 中的 OSD Ansible 设置。在本例中,每个 OSD 节点上的第二个磁盘设备(/dev/sdb)用于数据和日志存储:osd_scenario: collocated devices: - /dev/sdb dmcrypt: true osd_auto_discovery: false
编辑
/etc/ansible/hosts清单文件,将 Ceph 节点识别为 Ceph 监视器、OSD 和管理器节点。在本例中,存储设备也会在每个节点上识别:[mons] ceph01 ceph02 ceph03 [osds] ceph01 devices="[ '/dev/sdb' ]" ceph02 devices="[ '/dev/sdb' ]" ceph03 devices="[ '/dev/sdb' ]" [mgrs] ceph01 devices="[ '/dev/sdb' ]" ceph02 devices="[ '/dev/sdb' ]" ceph03 devices="[ '/dev/sdb' ]"
将此行添加到
/etc/ansible/ansible.cfg文件中,将运行的每个 Ansible playbook 的输出保存到 Ansible 用户的主目录中:retry_files_save_path = ~/
检查 Ansible 是否可以访问您配置为 Ansible 用户的所有 Ceph 节点:
# USER_NAME=ansibleadmin # sudo su - $USER_NAME [ansibleadmin@ceph05 ~]$ ansible all -m ping ceph01 | SUCCESS => { "changed": false, "ping": "pong" } ceph02 | SUCCESS => { "changed": false, "ping": "pong" } ceph03 | SUCCESS => { "changed": false, "ping": "pong" } [ansibleadmin@ceph05 ~]$运行 ceph-ansible playbook (以 Ansible 用户身份):
[ansibleadmin@ceph05 ~]$ cd /usr/share/ceph-ansible/ [ansibleadmin@ceph05 ~]$ ansible-playbook site.yml
此时,Ansible playbook 将检查您的 Ceph 节点,并根据您请求的服务配置它们。如果有任何失败,请进行必要的更正并重新运行该命令。
登录到三个 Ceph 节点(ceph01、ceph02 或 ceph03)并检查 Ceph 集群的健康状态:
# ceph health HEALTH_OK
在同一节点上,验证监控是否使用 rados :
# ceph osd pool create test 8 # echo 'Hello World!' > hello-world.txt # rados --pool test put hello-world hello-world.txt # rados --pool test get hello-world fetch.txt # cat fetch.txt Hello World!
2.4.3. 安装 Ceph 对象网关
在 Ansible 系统上(ceph05),将 Ceph 对象网关配置为 Ceph Storage 集群(最终会在 ceph04 上运行)。详情请参阅安装 Ceph 对象网关。
2.5. 设置 Redis
在三个 Red Hat Quay 系统(quay01、quay02 和 quay03)中安装 Red Hat Enterprise Linux 8 服务器时,安装并启动 Redis 服务,如下所示:
安装 / Deploy Redis: 在三个 quay0* 系统上作为容器运行 Redis:
# mkdir -p /var/lib/redis # chmod 777 /var/lib/redis # sudo podman run -d -p 6379:6379 \ -v /var/lib/redis:/var/lib/redis/data:Z \ registry.redhat.io/rhel8/redis-5检查 redis 连接 :您可以使用
telnet命令测试与 redis 服务的连接。键入 MONITOR (开始监控服务),再键入 QUIT 退出:# yum install telnet -y # telnet 192.168.122.99 6379 Trying 192.168.122.99... Connected to 192.168.122.99. Escape character is '^]'. MONITOR +OK +1525703165.754099 [0 172.17.0.1:43848] "PING" QUIT +OK Connection closed by foreign host.
有关使用 podman 和重启容器的更多信息,请参阅本文档前面"使用 podman"一节。
第 3 章 配置 Red Hat Quay
在将 Red Hat Quay 服务作为容器运行前,您需要使用同一 Quay 容器来创建部署 Red Hat Quay 所需的配置文件(config.yaml)。为此,您需要将 config 参数和一个密码 (在此替换 my-secret-password) 传递给 Quay 容器。之后,您可以使用该密码以 quayconfig 用户身份登录配置工具。
以下是如何进行此操作的示例:
以设置模式启动 quay :在第一个 quay 节点上运行以下命令:
# sudo podman run --rm -it --name quay_config -p 8080:8080 registry.redhat.io/quay/quay-rhel8:v3.9.0 config my-secret-password
- 打开浏览器 :在 quay 配置工具启动时,打开浏览器指向您要在其上运行配置工具的系统的 URL 和端口 8080 (例如 http://myquay.example.com:8080)。会提示您输入用户名和密码。
-
以 quayconfig 身份登录 :在提示时,输入
quayconfig用户名和密码(podman run命令行中的一个)。 - 填写所需字段 :当您在不挂载现有配置捆绑包的情况下启动配置工具时,您将引导至初始设置会话。在设置会话中,将自动填写默认值。以下步骤将了解如何填写剩余的必填字段。
识别数据库 :对于初始设置,您必须包含有关 Red Hat Quay 使用的数据库类型和位置的信息:
- 数据库类型 :选择 MySQL 或 PostgreSQL。MySQL 将在基本示例中使用;PostgreSQL 与 OpenShift 示例上的高可用性 Red Hat Quay 一起使用。
- 数据库服务器 :识别数据库的 IP 地址或主机名,如果不是端口 3306,则标识其端口号。
- 用户名 :识别对数据库具有完全访问权限的用户。
- 密码 :输入您分配给所选用户的密码。
- 数据库名称 :输入您在启动数据库服务器时分配的数据库名称。
SSL 证书 :对于生产环境,您应该提供 SSL 证书以连接到数据库。
下图显示了识别 Red Hat Quay 使用的数据库的屏幕示例:
识别 Redis 主机名、服务器配置并添加其他所需设置 :您可以添加其他设置 来完成设置,如下所示。用于基本部署的高可用性 Red Hat Quay 部署的更多设置:
- 对于基本测试配置,标识 Redis 主机名 应该都是您需要做的。但是,您可以添加其他功能,如 Clair Scanning 和 Repository Mirroring,如此过程末尾所述。
对于高可用性和 OpenShift 配置,需要更多设置(如下所述),以允许共享存储、系统和其他功能间的安全通信。
以下是您需要考虑的设置:
自定义 SSL 证书 :上传自定义或自签名 SSL 证书,供 Red Hat Quay 使用。详情请参阅 使用 SSL 保护到 Red Hat Quay 的连接。建议高可用性。
重要对于基本和高可用性部署,建议使用 SSL 证书。如果您决定不使用 SSL,您必须将容器客户端配置为使用新的 Red Hat Quay 设置作为不安全的 registry,如 Test a Insecure Registry 所述。
- 基本配置 :上传公司徽标以重新构建您的 Red Hat Quay registry。
服务器配置 :用于访问 Red Hat Quay 服务的主机名或 IP 地址,以及 TLS 表示(在生产环境中安装推荐)。所有 Red Hat Quay 部署都需要 Server Hostname。TLS 终止可以通过两种不同的方式完成:
-
在实例本身上,具有由
Quay容器中 nginx 服务器管理的所有 TLS 流量(推荐)。 - 在负载均衡器中。不建议这样做。如果没有在负载均衡器上正确完成 TLS 设置,则对 Red Hat Quay 的访问可能会丢失。
-
在实例本身上,具有由
- 数据一致性设置 :选择放宽日志记录一致性保证以提高性能和可用性。
- 时间机器 :允许旧镜像标签在存储库中保留,并允许用户选择自己的标签过期时间。
- Redis :标识主机名或 IP 地址(及可选密码)以连接到 Red Hat Quay 使用的 redis 服务。
- Repository Mirroring :选择 Enable Repository Mirroring 复选框。启用后,您可以在 Red Hat Quay 集群中创建软件仓库,从远程 registry 中镜像所选存储库。在启用存储库镜像前,请启动存储库镜像 worker,如此流程所述。
- Registry Storage :识别存储位置。有各种云和本地存储选项。高可用性需要远程存储。如果您遵循 Red Hat Quay 高可用性存储示例,请识别 Ceph 存储位置。在 OpenShift 上,示例使用 Amazon S3 存储。
- action Log Storage Configuration: Action 日志默认存储在 Red Hat Quay 数据库中。如果您有大量操作日志,可以让这些日志定向到 Elasticsearch,以便稍后进行搜索和分析。为此,请将 Action Logs Storage 的值改为 Elasticsearch,并配置相关的设置,如 Configure action log storage 所述。
- 操作日志轮转和存档 :选择启用日志轮转,这会将超过 30 天的日志移到存储中,然后指示存储区域。
- 安全扫描器 :选择安全扫描程序端点和身份验证密钥来启用安全扫描。要设置 Clair 以进行镜像扫描,请参阅 Clair 设置和配置 Clair。建议高可用性。
- Application Registry :启用包含 Kubernetes 清单或 Helm chart 等其它应用程序 registry (请参阅 App Registry 规格)。
-
rkt Conversion :允许使用
rkt fetch从 Red Hat Quay registry 获取镜像。需要公钥和私有 GPG2 密钥。此字段已弃用。 - 电子邮件 :启用用于通知和用户密码重置的电子邮件。
- 内部身份验证 :将 registry 的默认身份验证从 Local Database 更改为 LDAP、Keystone (OpenStack)、JWT 自定义身份验证或外部应用令牌。
- 外部授权(OAuth) :允许 GitHub 或 GitHub Enterprise 向 registry 进行身份验证。
- Google Authentication :允许 Google 向 registry 进行身份验证。
- 访问设置 :默认启用基本用户名/密码身份验证。其他可启用的身份验证类型包括:外部应用程序令牌(用户生成的令牌用于 docker 或 rkt 命令)、匿名访问(对可获取 registry 的任何人具有公共访问权限)、用户创建(加载用户创建自己的帐户)、加密的客户端密码(需要命令行用户访问,使其包含加密密码),以及前缀 username autocompletion (禁用在自动完成时需要完全的用户名匹配)。
-
registry 协议设置 :启用
Restrict V1 Push Support复选框来限制对 Docker V1 协议推送的访问。虽然红帽建议不要启用 Docker V1 push 协议,但如果您确实允许它,则必须明确将启用它的命名空间列入白名单。 - Dockerfile 构建支持 :允许用户提交 Dockerfile,并推送到 Red Hat Quay。不建议在多租户环境中这样做。
验证更改 :选择
Validate Configuration Changes。如果验证成功,您将看到以下 Download Configuration 模式:
-
下载配置 :选择
Download Configuration按钮,并将 tarball (quay-config.tar.gz)保存到本地目录中,供以后使用来启动 Red Hat Quay。
此时,您可以关闭 Red Hat Quay 配置工具并关闭浏览器。接下来,将 tarball 文件复制到您要在其上安装第一个 Red Hat Quay 节点的系统中。对于基本安装,您可能只在同一系统上运行 Red Hat Quay。
第 4 章 部署 Red Hat Quay
要在集群中的节点上部署 Red Hat Quay 服务,您可以使用您用于创建配置文件的同一 Quay 容器。这里的区别是:
- 识别存储配置和数据的目录
-
使用
--sysctl net.core.somaxconn=4096运行命令 -
不要使用
配置选项或密码
对于基本设置,您可以在单一节点上部署 ; 对于高可用性,您可能需要 3 个或更多节点(例如: quay01、quay02 和 quay03)。
生成的 Red Hat Quay 服务将侦听常规端口 8080 和 SSL 端口 8443。这与之前版本的 Red Hat Quay 不同,它们分别侦听标准端口 80 和 443。在本文档中,我们将 8080 和 8443 分别映射到主机上的标准端口 80 和 443。在本文档的其余部分中,我们假设您已以这种方式映射了端口。
以下是您的操作:
创建目录 :创建两个目录来存储主机上的配置信息和数据。例如:
# mkdir -p /mnt/quay/config # #optional: if you don't choose to install an Object Store # mkdir -p /mnt/quay/storage
复制配置文件 :将 tarball (
quay-config.tar.gz)复制到配置目录并解包它。例如:# cp quay-config.tar.gz /mnt/quay/config/ # tar xvf quay-config.tar.gz config.yaml ssl.cert ssl.key
部署 Red Hat Quay: 具有 Quay.io 身份验证(请参阅 访问 Red Hat Quay)将 Red Hat Quay 作为容器运行,如下所示:
注意将
-e DEBUGLOG=true添加到Quay容器的podman run命令行,以启用调试级别日志记录。添加-e IGNORE_VALIDATION=true,以便在启动过程期间绕过验证。# sudo podman run --restart=always -p 443:8443 -p 80:8080 \ --sysctl net.core.somaxconn=4096 \ --privileged=true \ -v /mnt/quay/config:/conf/stack:Z \ -v /mnt/quay/storage:/datastorage:Z \ -d registry.redhat.io/quay/quay-rhel8:v3.9.0
-
打开浏览器 UI :在
Quay容器启动后,前往 Web 浏览器,再打开 URL,再到运行Quay容器的节点。 - 登录 Red Hat Quay :使用您在配置中创建的超级用户帐户,登录并确保 Red Hat Quay 正常工作。
-
添加更多 Red Hat Quay 节点 :此时,您可以选择向这个 Red Hat Quay 集群添加更多节点,只需进入每个节点,然后添加 tarball 并启动
Quay容器,如所示所示。 - 添加可选功能 : 要在 Red Hat Quay 集群中添加更多功能,如 Clair 镜像扫描和存储库镜像,请继续到下一部分。
4.1. 为 Red Hat Quay 添加 Clair 镜像扫描
有关为您的 Red Hat Quay 部署设置和部署 Clair 镜像扫描,请参阅 Clair Security Scanning
4.2. 添加存储库镜像 Red Hat Quay
启用存储库镜像允许您在 Red Hat Quay 集群上创建与所选外部 registry 内容完全匹配的容器镜像存储库,然后定期根据需要同步这些存储库的内容。
将存储库镜像功能添加到 Red Hat Quay 集群:
-
运行存储库镜像 worker。要做到这一点,您可以使用
repomirror选项启动一个 quay pod。 - 选择 "Enable Repository Mirroring in the Red Hat Quay Setup tool.
- 登录您的 Red Hat Quay Web UI,并开始创建已镜像的存储库,如 Red Hat Quay 中的 存储库镜像中所述。
以下流程假设您已在 OpenShift 平台上运行 Red Hat Quay 集群,并在浏览器中运行 Red Hat Quay Setup 容器:
Start the repo mirroring worker: 以
repomirror默认启动Quay容器。本例假设您已使用当前存储在/root/ca.crt中的证书配置了 TLS 通信。如果没有,请删除将/root/ca.crt添加到容器的行:$ sudo podman run -d --name mirroring-worker \ -v /mnt/quay/config:/conf/stack:Z \ -v /root/ca.crt:/etc/pki/ca-trust/source/anchors/ca.crt \ registry.redhat.io/quay/quay-rhel8:v3.9.0 repomirror
- 登录到配置工具 :登录到 Red Hat Quay Setup Web UI (config 工具)。
- 启用存储库镜像 :滚动存储库镜像部分,并选择 Enable Repository Mirroring 复选框,如下所示:
-
选择 HTTPS 和证书验证 :如果您要在镜像过程中需要 HTTPS 通信并验证证书,请选择此复选框。
- 保存配置 :选择 Save Configuration Changes 按钮。现在,您的 Red Hat Quay 集群上应启用存储库镜像功能。如需了解有关设置自己的镜像容器镜像存储库的详细信息,请参阅 Red Hat Quay 中的 存储库镜像。
第 5 章 开始使用 Red Hat Quay
使用 Red Hat Quay 现在运行,您可以:
- 从 Quay 主页中选择 Tutorial,以尝试 15 分钟教程。在教程中,您将了解如何登录 Quay,启动容器、创建镜像、推送存储库、查看存储库以及更改 Quay 的存储库权限。
- 有关使用 Red Hat Quay 存储库的信息,请参阅使用 Red Hat Quay。
第 6 章 升级 Red Hat Quay 的地理复制部署
使用以下步骤升级您的 geo-replication Red Hat Quay 部署。
- 当将 geo-replication Red Hat Quay 部署升级到下一个 y-stream 版本(例如,Red Hat Quay 3.7 → Red Hat Quay 3.8)或 geo-replication 部署时,您必须在升级前停止操作。
- 故障时间从一个 y-stream 版本升级到下一个版本会间歇性。
- 在升级前,强烈建议您备份 Red Hat Quay 部署。
先决条件
-
已登录到
registry.redhat.io
此流程假设您在三个(或更多)系统上运行 Red Hat Quay 服务。如需更多信息,请参阅准备 Red Hat Quay 高可用性。
获取运行 Red Hat Quay 实例的每个系统上所有 Red Hat Quay 实例的列表。
在 System A 中输入以下命令来显示 Red Hat Quay 实例:
$ sudo podman ps
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec16ece208c0 registry.redhat.io/quay/quay-rhel8:v3.7.0 registry 6 minutes ago Up 6 minutes ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay01
在 System B 中输入以下命令来显示 Red Hat Quay 实例:
$ sudo podman ps
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ae0c9a8b37d registry.redhat.io/quay/quay-rhel8:v3.7.0 registry 5 minutes ago Up 2 seconds ago 0.0.0.0:82->8080/tcp, 0.0.0.0:445->8443/tcp quay02
在 System C 中输入以下命令来显示 Red Hat Quay 实例:
$ sudo podman ps
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e75c4aebfee9 registry.redhat.io/quay/quay-rhel8:v3.7.0 registry 4 seconds ago Up 4 seconds ago 0.0.0.0:84->8080/tcp, 0.0.0.0:447->8443/tcp quay03
在每个系统中临时关闭所有 Red Hat Quay 实例。
在 System A 中输入以下命令来关闭 Red Hat Quay 实例:
$ sudo podman stop ec16ece208c0
在 System B 中输入以下命令来关闭 Red Hat Quay 实例:
$ sudo podman stop 7ae0c9a8b37d
在 System C 中输入以下命令来关闭 Red Hat Quay 实例:
$ sudo podman stop e75c4aebfee9
在每个系统上获取最新的 Red Hat Quay 版本,如 Red Hat Quay 3.9。
在 System A 中输入以下命令来获取最新的 Red Hat Quay 版本:
$ sudo podman pull registry.redhat.io/quay/quay-rhel8:v3.8.0
在 System B 中输入以下命令来获取最新的 Red Hat Quay 版本:
$ sudo podman pull registry.redhat.io/quay/quay-rhel8:v3.8.0
在 System C 中输入以下命令来获取最新的 Red Hat Quay 版本:
$ sudo podman pull registry.redhat.io/quay/quay-rhel8:v3.8.0
在高可用性 Red Hat Quay 部署的系统 A 上,运行新镜像版本,如 Red Hat Quay 3.9 :
# sudo podman run --restart=always -p 443:8443 -p 80:8080 \ --sysctl net.core.somaxconn=4096 \ --name=quay01 \ -v /mnt/quay/config:/conf/stack:Z \ -v /mnt/quay/storage:/datastorage:Z \ -d registry.redhat.io/quay/quay-rhel8:v3.8.0
等待新的 Red Hat Quay 容器在 System A 上完全正常工作。您可以输入以下命令检查容器的状态:
$ sudo podman ps
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 70b9f38c3fb4 registry.redhat.io/quay/quay-rhel8:v3.8.0 registry 2 seconds ago Up 2 seconds ago 0.0.0.0:82->8080/tcp, 0.0.0.0:445->8443/tcp quay01
- 可选:通过进入到 Red Hat Quay UI 来确保 Red Hat Quay 已完全操作。
确保 System A 上的 Red Hat Quay 完全正常工作后,在 System B 和 System C 上运行新镜像版本。
在高可用性 Red Hat Quay 部署的 System B 上,运行新镜像版本,如 Red Hat Quay 3.9 :
# sudo podman run --restart=always -p 443:8443 -p 80:8080 \ --sysctl net.core.somaxconn=4096 \ --name=quay02 \ -v /mnt/quay/config:/conf/stack:Z \ -v /mnt/quay/storage:/datastorage:Z \ -d registry.redhat.io/quay/quay-rhel8:v3.8.0
在高可用性 Red Hat Quay 部署的系统 C 上,运行新镜像版本,如 Red Hat Quay 3.9 :
# sudo podman run --restart=always -p 443:8443 -p 80:8080 \ --sysctl net.core.somaxconn=4096 \ --name=quay03 \ -v /mnt/quay/config:/conf/stack:Z \ -v /mnt/quay/storage:/datastorage:Z \ -d registry.redhat.io/quay/quay-rhel8:v3.8.0
您可以输入以下命令来检查 System B 和 System C 中的容器状态:
$ sudo podman ps
第 7 章 在 Red Hat Quay 部署上执行健康检查
健康检查机制旨在评估系统、服务或组件的健康和功能。健康检查有助于确保一切正常工作,并可用于在潜在问题成为严重问题之前识别潜在问题。通过监控系统的健康状况,Red Hat Quay 管理员可以针对地域复制部署、Operator 部署、独立 Red Hat Quay 部署、对象存储问题等方面解决异常或潜在的故障。执行健康检查有助于降低遇到故障排除场景的可能性。
通过提供有关系统当前状态的宝贵信息,健康检查机制可以在诊断问题方面扮演角色。通过将健康检查结果与预期的基准测试或预定义的阈值进行比较,可以更快地识别 deviations 或 anomalies。
7.1. Red Hat Quay 健康检查端点
此处包含的任何外部网站的链接仅为方便用户而提供。红帽没有审阅链接的内容,并不对其内容负责。包含到外部网站的任何链接并不意味着红帽认可该网站或其实体、产品或服务。您同意红帽对因您使用(或依赖)外部网站或内容而导致的任何损失或费用不承担任何责任。
Red Hat Quay 有几个健康检查端点。下表显示了健康检查、描述、端点和示例输出。
表 7.1. 健康检查端点
| 健康检查 | 描述 | 端点 | 输出示例 |
|---|---|---|---|
|
|
|
|
|
|
|
|
| |
|
|
|
|
7.2. 导航到 Red Hat Quay 健康检查端点
使用以下步骤导航到 实例 端点。对于 端到端 和警告 端点,这个过程可以重复。
步骤
-
在 Web 浏览器中,导航到
https://{quay-ip-endpoint}/health/instance。 您使用健康实例页面,它会返回类似如下的信息:
{"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}对于 Red Hat Quay,
"status_code": 200表示实例是健康的。相反,如果您收到"status_code": 503,则部署有问题。