部署 Red Hat Quay - 高可用性
前言
Red Hat Quay 是一个企业级容器 registry。使用 Quay 构建和存储容器,然后将它们部署到您企业内的服务器中。
这个步骤描述了如何部署高可用性、企业级的 Red Hat Quay 设置。
第 1 章 Red Hat Quay 功能
Red Hat Quay 定期发布,带有新的功能和软件更新。Red Hat Quay 部署提供了以下功能,但列表并不完整:
- 高可用性
- geo-replication
- 仓库镜像
- Docker v2,模式 2 (多架构)支持
- 持续集成
- 使用 Clair 进行安全扫描
- 自定义日志轮转
- 零停机时间垃圾回收
- 24/7 支持
用户应查看 Red Hat Quay 发行注记 中的最新功能信息。
第 2 章 Red Hat Quay 支持
Red Hat Quay 对以下提供支持:
- 多种身份验证和访问方法
- 多个存储后端
-
Quay
、Clair
和存储后端容器的自定义证书 - 应用程序 registry
- 不同的容器镜像类型
2.1. 架构
Red Hat Quay 包括几个核心组件,包括内部和外部的核心组件。
有关完整的架构分类,请参阅 Red Hat Quay 架构指南。
2.1.1. 内部组件
Red Hat Quay 包括以下内部组件:
-
Quay (容器 registry)将
Quay
容器作为服务运行,由 pod 中的多个组件组成。 - Clair.扫描容器镜像以查找漏洞,并推荐修复。
2.1.2. 外部组件
Red Hat Quay 包括以下外部组件:
- 数据库.由 Red Hat Quay 用作其主要元数据存储。请注意,这不适用于镜像存储。
- redis (key-value store).存储实时构建器日志和 Red Hat Quay 指南。还包括垃圾回收所需的锁定机制。
云存储.对于支持的部署,必须使用以下存储类型之一:
- 公共云存储.在公有云环境中,您应该使用云供应商的对象存储,如 Amazon Web Services 的 Amazon S3 或 Google Cloud Storage。
- 私有云存储.在私有云中,需要 S3 或 Swift 兼容对象存储,如 Ceph RADOS 或 OpenStack Swift。
对于任何生产环境的配置,不要使用"本地挂载的目录"存储引擎。不支持挂载的 NFS 卷。本地存储适用于仅限 Red Hat Quay 测试的安装。
第 3 章 准备 Red Hat Quay (高可用性)
此流程提供有关如何设置 Red Hat Quay 的高可用、生产质量部署的信息。
3.1. 先决条件
在开始 Red Hat Quay 高可用性部署前,您需要了解以下几个事项:
Postgres 或 MySQL 可用于提供数据库服务。postgres 被选为数据库,因为它包含支持 Clair 安全扫描所需的功能。其他选项包括:
- Crunchy Data PostgreSQL Operator:尽管不受红帽直接支持,但 Postgres 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: Three (或更多)系统提供 Ceph 服务用于存储。如果要部署到云中,您可以使用前面描述的云存储功能。此流程为 Ansible (ceph05)使用额外的系统,一个用于 Ceph 对象网关(ceph04)。
每个系统都应该具有以下属性:
Red Hat Enterprise Linux (RHEL) 8:从 Downloads 页中 获取最新的 Red Hat Enterprise Linux 8 服务器介质,并按照 Red Hat Enterprise Linux 9 产品文档 中提供的安装说明进行操作。
- 有效的红帽订阅 :配置 有效的 Red Hat Enterprise Linux 8 服务器订阅。
- CPU :两个或更多虚拟 CPU
- RAM: 4GB 用于每个 A 和 B 系统;每个 C 系统需要 8GB
- 磁盘空间 :关于每个 A 和 B 系统的 20GB 磁盘空间(10GB 用于操作系统)和 10GB 用于 Docker 存储。C 系统至少 30GB 磁盘空间(或根据所需的容器存储有更多)。
3.2. 使用 podman
本文档使用 podman 来创建和部署容器。如果您的系统中没有 podman,可以使用对应的 docker 命令。有关 podman 和相关技术的更多信息,请参阅在 Red Hat Enterprise Linux 8 上构建、运行和管理 Linux 容器。
对于 Red Hat Quay 的高可用性、生产质量部署,强烈建议使用 podman。Docker 尚未与 Red Hat Quay 3.14 测试,并将在以后的版本中弃用。
3.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 端口:
Copy to clipboardCopied# 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、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 服务:
Copy to clipboardCopied# systemctl restart haproxy
输入以下命令为 PostgreSQL 数据库创建文件夹:
Copy to clipboardCopied$ mkdir -p /var/lib/pgsql/data
为
/var/lib/pgsql/data
文件夹设置以下权限:
Copy to clipboardCopied$ chmod 777 /var/lib/pgsql/data
输入以下命令启动 PostgreSQL 数据库:
Copy to clipboardCopied$ 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
目录中。输入以下命令列出可用的扩展:
Copy to clipboardCopied$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "SELECT * FROM pg_available_extensions" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
输出示例
Copy to clipboardCopiedname | default_version | installed_version | comment -----------+-----------------+-------------------+---------------------------------------- adminpack | 1.0 | | administrative functions for PostgreSQL ...
输入以下命令创建
pg_trgm
扩展:
Copy to clipboardCopied$ 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
已创建:
Copy to clipboardCopied$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "SELECT * FROM pg_extension" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
输出示例
Copy to clipboardCopiedextname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition ---------+----------+--------------+----------------+------------+-----------+-------------- plpgsql | 10 | 11 | f | 1.0 | | pg_trgm | 10 | 2200 | t | 1.3 | | (2 rows)
更改 Postgres 用户
quayuser
的权限,并为他们授予超级用户
角色,授予用户对数据库的不受限制的访问权限:
Copy to clipboardCopied$ sudo podman exec -it postgresql_database /bin/bash -c 'echo "ALTER USER quayuser WITH SUPERUSER;" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
输出示例
Copy to clipboardCopiedALTER ROLE
如果您的系统中有一个 firewalld 服务,请运行以下命令使 PostgreSQL 端口可以通过防火墙使用:
Copy to clipboardCopied# firewall-cmd --permanent --zone=trusted --add-port=5432/tcp
Copy to clipboardCopied# firewall-cmd --reload
可选。如果您没有安装
postgres
CLI 软件包,请输入以下命令安装它:
Copy to clipboardCopied# yum install postgresql -y
使用
psql
命令测试到 PostgreSQL 数据库的连接。注意要验证您可以远程访问该服务,请在远程系统中运行以下命令:
# psql -h localhost quaydb quayuser
输出示例
Copy to clipboardCopiedPassword 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
3.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 对象网关。
3.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 配置的受支持存储类型的详细信息,请参阅 表 3.2 中的 OSD Ansible 设置。在本例中,每个 OSD 节点上都配置与操作系统独立的、未格式化的块设备(
/dev/sdb
)。如果您要在裸机上安装,您可能需要为机器添加额外的硬盘驱动器。 - 安装 Red Hat Enterprise Linux 服务器版本,如 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
3.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 节点,作为 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!
3.4.3. 安装 Ceph 对象网关
在 Ansible 系统上(ceph05),将 Ceph 对象网关配置为 Ceph Storage 集群(最终会在 ceph04 上运行)。详情请参阅安装 Ceph 对象网关。
3.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 connectivity :您可以使用
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 部分。
第 4 章 配置 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.14.0 config my-secret-password
- 打开浏览器 :当 quay 配置工具启动时,打开浏览器到您要运行配置工具的系统 8080 的端口 8080 (例如 http://myquay.example.com:8080)。会提示您输入用户名和密码。
-
以 quayconfig 身份登录 :在提示时,输入
quayconfig
用户名和密码(podman run
命令行中的一个)。 - 填写所需字段 : 当您在不挂载现有配置捆绑包的情况下启动配置工具时,您将引导至初始设置会话。在设置会话中,会自动填写默认值。以下步骤将了解如何填写剩余的必填字段。
识别数据库 :对于初始设置,您必须包含有关 Red Hat Quay 使用的数据库类型和位置的以下信息:
- 数据库类型 :选择 MySQL 或 PostgreSQL。MySQL 将在基本示例中使用;PostgreSQL 与 OpenShift 示例上的高可用性 Red Hat Quay 一起使用。
- 数据库服务器 :识别数据库的 IP 地址或主机名,如果不是端口 3306,则标识其端口号。
- 用户名 :识别对数据库具有完全访问权限的用户。
- Password: 输入您分配给所选用户的密码。
- 数据库名称 :输入您在启动数据库服务器时分配的数据库名称。
SSL 证书 :对于生产环境,您应该提供 SSL 证书来连接数据库。
下图显示了用于标识 Red Hat Quay 使用的数据库的屏幕示例:
识别 Redis 主机名、服务器配置并添加其他所需的设置:您可以添加的其他设置 来完成设置,如下所示。针对基本部署的高可用性 Red Hat Quay 部署的更多设置:
- 对于基本测试配置,您需要确定 Redis 主机名都应该这样做。但是,您可以添加其他功能,如 Clair 扫描和存储库镜像,如此流程末尾的所述。
对于高可用性和 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,并配置相关的设置,如 配置操作日志存储 中所述。
- 操作日志轮转和存档 :选择启用日志轮转,这会将超过 30 天的日志移到存储中,然后指明存储区域。
- 安全扫描器 :选择安全扫描程序端点和身份验证密钥来启用安全扫描。要设置 Clair 进行镜像扫描,请参阅 Clair 设置和配置 Clair。建议高可用性。
- 应用程序 Registry :启用包括 Kubernetes 清单或 Helm chart 等其他应用程序 registry (请参阅 App Registry 规格)。
-
rkt Conversion :允许使用
rkt fetch
从 Red Hat Quay registry 获取镜像。需要公共和私有 GPG2 密钥。此字段已弃用。 - 电子邮件 :启用用于通知和用户密码重置的电子邮件。
- 内部身份验证 :将 registry 的默认身份验证从本地数据库更改为 LDAP、Keystone (OpenStack)、JWT 自定义身份验证或外部应用令牌。
- 外部授权(OAuth) :允许 GitHub 或 GitHub Enterprise 向 registry 进行身份验证。
- Google Authentication: 启用 以允许 Google 向 registry 进行身份验证。
- 访问设置 :默认启用基本用户名/密码身份验证。可以启用的其他身份验证类型包括:外部应用令牌(与 docker 或 rkt 命令一起使用的用户生成的令牌)、匿名访问(启用对可进入注册表的任何人的公共访问权限)、用户创建(用户创建自己的帐户)、加密客户端密码(需要命令行用户访问包含加密密码),以及前缀用户名自动补全(不需要在自动完成时完全匹配)。
-
registry 协议设置 :保留启用了
Restrict V1 Push Support
复选框,以限制对 Docker V1 协议推送的访问。虽然红帽建议启用 Docker V1 push 协议,但如果确实允许,您必须明确将启用它的命名空间列入白名单。 - Dockerfile 构建支持 :允许允许用户构建并推送到 Red Hat Quay 的 Dockerfile。对于多租户环境,我们不推荐这样做。
验证更改 :选择
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。
第 5 章 部署 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,如下所示:
注意Add
-e DEBUGLOG=true
添加到Quay
容器的podman run
命令行,以启用调试级别的日志记录。add-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.14.0
-
打开浏览器到 UI :在
Quay
容器启动后,前往 Web 浏览器,再打开 URL,以运行Quay
容器的节点。 - 登录 Red Hat Quay :使用您在配置中创建的超级用户帐户,登录并确保 Red Hat Quay 正常工作。
-
添加更多 Red Hat Quay 节点 :此时,您可以选择向这个 Red Hat Quay 集群添加更多节点,只需进入每个节点,然后添加 tarball 并启动
Quay
容器。 - 添加可选功能 : 要在 Red Hat Quay 集群中添加更多功能,如 Clair 镜像扫描和存储库镜像,请继续下一部分。
5.1. 为 Red Hat Quay 添加 Clair 镜像扫描
为您的 Red Hat Quay 部署设置和部署 Clair 镜像扫描信息包括在 Clair Security Scanning
5.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.14.0 repomirror
- 登录到配置工具 :登录到 Red Hat Quay Setup Web UI (配置工具)。
- 启用存储库镜像功能 :缩减 Repository Mirroring 部分,再选择 Enable Repository Mirroring 复选框,如下所示:
-
选择 HTTPS 和证书验证 :如果要在镜像过程中需要 HTTPS 通信并验证证书,请选择此复选框。
- 保存配置 :选择 Save Configuration Changes 按钮。现在,您的 Red Hat Quay 集群上应启用存储库镜像。有关设置您自己的 镜像容器镜像存储库的详情,请参阅 Red Hat Quay 中的 存储库镜像。
第 6 章 开始使用 Red Hat Quay
现在运行 Red Hat Quay,您可以:
- 从 Quay 主页中选择 Tutorial,以试用 15 分钟的教程。在教程中,您将了解如何登录 Quay,启动容器,创建镜像、推送存储库、查看存储库,以及更改存储库权限。
- 有关使用 Red Hat Quay 存储库的详情,请参考使用 Red Hat Quay。
第 7 章 升级独立 Red Hat Quay 的地理复制部署
使用以下步骤升级您的地理复制 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 实例:
Copy to clipboardCopied$ sudo podman ps
输出示例
Copy to clipboardCopiedCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec16ece208c0 registry.redhat.io/quay/quay-rhel8:v{producty-n1} 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 实例:
Copy to clipboardCopied$ sudo podman ps
输出示例
Copy to clipboardCopiedCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ae0c9a8b37d registry.redhat.io/quay/quay-rhel8:v{producty-n1} 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 实例:
Copy to clipboardCopied$ sudo podman ps
输出示例
Copy to clipboardCopiedCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e75c4aebfee9 registry.redhat.io/quay/quay-rhel8:v{producty-n1} 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 实例:
Copy to clipboardCopied$ sudo podman stop ec16ece208c0
在 System B 中输入以下命令来关闭 Red Hat Quay 实例:
Copy to clipboardCopied$ sudo podman stop 7ae0c9a8b37d
在 System C 中输入以下命令来关闭 Red Hat Quay 实例:
Copy to clipboardCopied$ sudo podman stop e75c4aebfee9
在每个系统上获取最新的 Red Hat Quay 版本,如 Red Hat Quay 3.14。
在 System A 中输入以下命令以获取最新的 Red Hat Quay 版本:
Copy to clipboardCopied$ sudo podman pull registry.redhat.io/quay/quay-rhel8:{productminv}
在 System B 中输入以下命令以获取最新的 Red Hat Quay 版本:
Copy to clipboardCopied$ sudo podman pull registry.redhat.io/quay/quay-rhel8:v{producty}
在 System C 中输入以下命令以获取最新的 Red Hat Quay 版本:
Copy to clipboardCopied$ sudo podman pull registry.redhat.io/quay/quay-rhel8:{productminv}
在高可用性 Red Hat Quay 部署的 System A 中,运行新镜像版本,如 Red Hat Quay 3.14:
Copy to clipboardCopied# 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:{productminv}
等待新的 Red Hat Quay 容器在 System A 上完全正常工作。您可以输入以下命令来检查容器的状态:
Copy to clipboardCopied$ sudo podman ps
输出示例
Copy to clipboardCopiedCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 70b9f38c3fb4 registry.redhat.io/quay/quay-rhel8:v{producty} 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.14:
Copy to clipboardCopied# 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:{productminv}
在高可用性 Red Hat Quay 部署的 System C 中,运行新镜像版本,如 Red Hat Quay 3.14:
Copy to clipboardCopied# 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:{productminv}
您可以输入以下命令来检查 System B 和 System C 上的容器状态:
Copy to clipboardCopied$ sudo podman ps
第 8 章 在 Red Hat Quay 部署中执行健康检查
健康检查机制旨在评估系统、服务或组件的健康状态和功能。健康检查有助于确保一切正常工作,并可用于在潜在问题成为关键问题前识别潜在的问题。通过监控系统的健康状况,Red Hat Quay 管理员可以处理异常或潜在的故障,如地理复制部署、Operator 部署、独立 Red Hat Quay 部署、对象存储问题等。执行健康检查还有助于降低遇到故障排除场景的可能性。
健康检查机制可以通过提供有关系统当前状态的宝贵信息来诊断问题的角色。通过将健康检查结果与预期基准或预定义的阈值进行比较,可以更快地识别或异常情况。
8.1. Red Hat Quay 健康检查端点
这里包含的任何外部网站的链接仅为方便用户而提供。红帽没有审阅链接的内容,并不对其内容负责。包含任何指向外部网站的链接并不表示红帽认可网站或其实体、产品或服务。您同意红帽对因您使用(或依赖)外部网站或内容而导致的任何损失或费用不承担任何责任。
Red Hat Quay 有几个健康检查端点。下表显示了健康检查、描述、端点和示例输出。
健康检查 | 描述 | 端点 | 输出示例 |
---|---|---|---|
|
|
|
|
|
|
| |
|
|
|
8.2. 导航到 Red Hat Quay 健康检查端点
使用以下步骤导航到 实例
端点。对于 endtoend
和 warning
端点,可以重复这个过程。
步骤
-
在您的 Web 浏览器中,导航到
https://{quay-ip-endpoint}/health/instance
。 您要进入健康实例页面,它会返回类似如下的信息:
Copy to clipboardCopied{"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
,则部署会出现问题。