在 OpenShift Container Platform 上部署 Red Hat Quay Operator
在 OpenShift Container Platform 上部署 Red Hat Quay Operator
摘要
前言 复制链接链接已复制到粘贴板!
Red Hat Quay 是一个企业级容器 registry。使用 Red Hat Quay 来构建和存储容器镜像,然后将其提供给整个企业。
Red Hat Quay Operator 提供了在 OpenShift 集群上部署和管理 Red Hat Quay 的简单方法。
从 Red Hat Quay 3.4.0 开始,Operator 已完全重写,以改进开箱即用的体验,并支持更多的第 2 天操作。因此,新 Operator 更为容易使用,并更为关注。与早期版本的 Operator 相比,重要的区别是:
-
QuayEcosystem自定义资源已被QuayRegistry自定义资源替换 - 默认安装选项会生成一个完全支持的 Quay 环境,其中包含支持生产用途的所有受管依赖项(数据库、缓存、对象存储等)
- Quay 配置的新强大的验证库,该库由 Quay 应用程序和配置工具共享,以实现一致性
-
对象存储现在可以由 Operator 使用
ObjectBucketClaimKubernetes API 管理(Red Hat OpenShift Data Foundation 可用于在 OpenShift 上提供此 API 支持的实现) - 自定义部署 Pod 用来测试和开发场景的容器镜像
第 1 章 Red Hat Quay Operator 简介 复制链接链接已复制到粘贴板!
本文档概述了使用 Red Hat Quay Operator 在 OpenShift 上配置、部署、管理和升级 Red Hat Quay 的步骤。
它演示了如何:
- 安装 Red Hat Quay Operator
- 配置对象存储,可以是受管或非受管
- 如果需要,配置其他非受管组件,包括数据库、Redis、路由、TLS 等。
- 使用 Operator 在 OpenShift 上部署 Red Hat Quay registry
- 使用 Operator 支持的高级功能
- 通过升级 Operator 来升级 registry
1.1. QuayRegistry API 复制链接链接已复制到粘贴板!
Quay Operator 提供了 QuayRegistry 自定义资源 API,以声明性地管理集群中的 Quay 容器 registry。使用 OpenShift UI 或命令行工具与 API 交互。
-
创建
QuayRegistry将导致 Operator 部署和配置在集群中运行 Quay 所需的所有资源。 -
编辑
QuayRegistry将导致 Operator 协调更改并创建/更新/删除对象以匹配所需的配置。 -
删除
QuayRegistry将导致所有之前创建的资源垃圾回收,而Quay容器 registry 将不再可用。
QuayRegistry API 非常简单,这些字段在以下部分中所述。
1.2. Quay Operator 组件 复制链接链接已复制到粘贴板!
Quay 是一个强大的容器 registry 平台,因此有大量依赖项。这包括数据库、对象存储、Redis 等。Quay Operator 管理 Quay 及其对 Kubernetes 的依赖部署。这些依赖项被视为 组件,并通过 QuayRegistry API 配置。
在 QuayRegistry 自定义资源中,spec.components 字段配置组件。每个组件包含两个字段:type - 组件的名称,以及 managed - 布尔值是否由 Operator 处理。默认情况下(忽略此字段),所有组件都会管理,并在协调后自动填充,以便可见性:
spec:
components:
- kind: quay
managed: true
- kind: postgres
managed: true
- kind: clair
managed: true
- kind: redis
managed: true
- kind: horizontalpodautoscaler
managed: true
- kind: objectstorage
managed: true
- kind: route
managed: true
- kind: mirror
managed: true
- kind: monitoring
managed: true
- kind: tls
managed: true
- kind: clairpostgres
managed: true
1.3. 使用受管组件 复制链接链接已复制到粘贴板!
除非您的 QuayRegistry 自定义资源另有指定,否则 Red Hat Quay Operator 会针对以下受管组件使用默认值:
- Quay: 保存 Red Hat Quay 部署的覆盖。例如,环境变量和副本数。此组件在 Red Hat Quay 3.7 中是新的,无法设置为 unmanaged。
- postgres: 用于存储 registry 元数据,请使用 Software Collections中的 Postgres 10 版本
- Clair: 提供镜像漏洞策略扫描
- Redis: 存储实时构建器日志和 Red Hat Quay 指南。还包括垃圾回收所需的锁定机制。
-
HorizontalPodAutoscaler: 根据 memory/cpu 消耗调整
Quaypod 的数量 -
ObjectStorage: 用于存储镜像层 Blob,请使用由 Noobaa/RHOCS 提供的
ObjectBucketClaimKubernetes API - Route: 从 OpenShift Container Platform 外部为 Red Hat Quay registry 提供外部入口点
- mirror : 配置存储库镜像 worker 以支持可选存储库镜像
- Monitoring: 功能包括 Grafana 仪表板、访问各个指标以及用于经常重启 Quay pod 的警报
- tls : 配置 Red Hat Quay 还是 OpenShift Container Platform 处理 SSL/TLS
- clairpostgres : 配置受管 Clair 数据库
Red Hat Quay Operator 处理 Red Hat Quay 使用受管组件所需的任何所需的配置和安装工作。如果 Red Hat Quay Operator 执行的 opinionated 部署不适用于您的环境,您可以为 Red Hat Quay Operator 提供 非受管 资源(overrides),如以下部分所述。
1.4. 对依赖项使用非受管组件 复制链接链接已复制到粘贴板!
如果您有现有组件,如 Postgres、Redis 或对象存储与 Quay 搭配使用,则首先在 Quay 配置捆绑包(config.yaml)中配置它们,然后在 QuayRegistry (作为 Kubernetes Secret)中引用捆绑包,同时指示哪些组件是非受管组件。
Quay 配置编辑器也可用于创建或修改现有配置捆绑包,并简化了更新 Kubernetes Secret 的过程,特别是针对多个更改。当 Quay 的配置通过配置编辑器更改并发送到 Operator 时,将更新 Quay 部署以反映新配置。
1.5. 配置捆绑包 secret 复制链接链接已复制到粘贴板!
spec.configBundleSecret 自动是一个到与 QuayRegistry 相同的命名空间中的一个 Secret 的 metadata.name 的引用。此 Secret 必须包含 config.yaml 键/值对。此 config.yaml 文件是一个 Quay 配置 YAML 文件。此字段是可选的,如果没有提供,Operator 将自动填充。如果提供,它将充当稍后与任何受管组件中的其他字段合并的基本配置字段,以此组成最终输出 Secret,然后挂载到 Quay 应用程序 Pod 中。
1.6. OpenShift 上的 Red Hat Quay 的先决条件 复制链接链接已复制到粘贴板!
在 OpenShift 上开始部署 Red Hat Quay Operator 前,您应该考虑以下几点:
1.6.1. OpenShift cluster 复制链接链接已复制到粘贴板!
您需要一个特权帐户到部署 Red Hat Quay Operator 的 OpenShift 4.5 或更高版本的集群。该帐户必须能够在集群范围内创建命名空间。
1.6.2. 资源要求 复制链接链接已复制到粘贴板!
每个 Red Hat Quay 应用程序 pod 都具有以下资源要求:
- 8Gi 内存
- 2000 个 CPU 毫秒。
Red Hat Quay Operator 将为每个它管理的 Red Hat Quay 部署至少创建一个应用程序 pod。确保 OpenShift 集群有足够的计算资源来满足这些要求。
1.6.3. 对象存储 复制链接链接已复制到粘贴板!
默认情况下,Red Hat Quay Operator 使用 ObjectBucketClaim Kubernetes API 来置备对象存储。使用这个 API 会将 Operator 与任何特定于供应商的实现分离。Red Hat OpenShift Data Foundation 通过其 NooBaa 组件提供这个 API,本例将使用它。
Red Hat Quay 可以手动配置为使用以下任何受支持的云存储选项:
- Amazon S3 (请参阅 S3 IAM Bucket Policy 以了解有关为 Red Hat Quay 配置 S3 存储桶策略的详细信息)
- Azure Blob Storage
- Google Cloud Storage
- Ceph 对象网关(RADOS)
- OpenStack Swift
- CloudFront + S3
第 2 章 从 OperatorHub 安装 Quay Operator 复制链接链接已复制到粘贴板!
使用 OpenShift 控制台,选择 Operators → OperatorHub,然后选择 Red Hat Quay Operator。如果有多个版本,请确保使用红帽认证的 Operator 而不是社区版本。
安装页面概述了功能和先决条件:
选择 Install。此时会出现 Operator 安装页面。
以下选择可用于自定义安装:
-
更新频道 : 为最新版本选择
stable-3.7更新频道。 -
Installation Mode: 如果您希望 Operator 在集群范围可用,请选择
All namespaces on the cluster。如果您只想在一个命名空间中部署,请选择A specific namespace on the cluster。建议您在集群范围内安装 Operator。如果选择单个命名空间,则默认不提供监控组件。 - Approval Strategy: 选择批准自动或手动更新。建议自动更新策略。
-
更新频道 : 为最新版本选择
- 选择 Install。
- 片刻之后,您将在 Installed Operators 页面中看到 Operator 已成功安装。
第 3 章 在部署前配置 Quay 复制链接链接已复制到粘贴板!
Operator 可以在 OpenShift 上部署时管理所有 Red Hat Quay 组件,这是默认配置。另外,您还可以自行管理一个或多个组件,其中需要对集合进行更多控制,然后允许 Operator 管理剩余的组件。
配置非受管组件的标准模式是:
-
使用适当的设置创建
config.yaml配置文件 使用配置文件创建 Secret
$ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret创建 QuayRegistry YAML 文件
quayregistry.yaml,识别非受管组件以及引用所创建的 Secret,例如:quayregistry.yaml
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false使用 YAML 文件部署 registry:
$ oc create -n quay-enterprise -f quayregistry.yaml
3.1. 预配置 Red Hat Quay 以进行自动化 复制链接链接已复制到粘贴板!
Red Hat Quay 有几个支持自动化的配置选项。这些选项可以在部署前设置,以便最大程度减少与用户界面交互的需求。
3.1.1. 允许 API 创建第一个用户 复制链接链接已复制到粘贴板!
要使用 /api/v1/user/initialize API 创建第一个用户,请将 FEATURE_USER_INITIALIZE 参数设置为 true。与需要现有机构中 OAuth 应用的 OAuth 令牌生成的所有其他 registry API 调用不同,API 端点不需要身份验证。
部署 Red Hat Quay 后,您可以使用 API 创建用户,如 quayadmin,假设尚未创建其他用户。如需更多信息 ,请参阅使用 API 创建第一个用户。
3.1.2. 启用常规 API 访问 复制链接链接已复制到粘贴板!
将配置选项 BROWSER_API_CALLS_XHR_ONLY 设置为 false,以允许常规访问 Red Hat Quay registry API。
3.1.3. 添加超级用户 复制链接链接已复制到粘贴板!
部署 Red Hat Quay 后,您可以创建一个用户。建议第一个用户被授予具有完整权限的管理员特权。可以使用 SUPER_USER 配置对象提前配置完全权限。例如:
...
SERVER_HOSTNAME: quay-server.example.com
SETUP_COMPLETE: true
SUPER_USERS:
- quayadmin
...
3.1.4. 限制用户创建 复制链接链接已复制到粘贴板!
配置超级用户后,您可以限制创建新用户到超级用户组的能力。将 FEATURE_USER_CREATION 设置为 false 来限制用户创建。例如:
...
FEATURE_USER_INITIALIZE: true
BROWSER_API_CALLS_XHR_ONLY: false
SUPER_USERS:
- quayadmin
FEATURE_USER_CREATION: false
...
3.1.5. 启用新功能 复制链接链接已复制到粘贴板!
要使用新的 Red Hat Quay 3.8 功能,请启用一些或全部的功能:
...
FEATURE_UI_V2: true
FEATURE_LISTEN_IP_VERSION:
FEATURE_SUPERUSERS_FULL_ACCESS: true
GLOBAL_READONLY_SUPER_USERS:
-
FEATURE_RESTRICTED_USERS: true
RESTRICTED_USERS_WHITELIST:
-
...
3.1.6. 启用新功能 复制链接链接已复制到粘贴板!
要使用新的 Red Hat Quay 3.7 功能,请启用一些或全部的功能:
...
FEATURE_QUOTA_MANAGEMENT: true
FEATURE_BUILD_SUPPORT: true
FEATURE_PROXY_CACHE: true
FEATURE_STORAGE_REPLICATION: true
DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000
...
3.1.7. 推荐的自动化配置 复制链接链接已复制到粘贴板!
建议对自动化使用以下 config.yaml 参数:
...
FEATURE_USER_INITIALIZE: true
BROWSER_API_CALLS_XHR_ONLY: false
SUPER_USERS:
- quayadmin
FEATURE_USER_CREATION: false
...
3.2. 配置对象存储 复制链接链接已复制到粘贴板!
您需要在安装 Red Hat Quay 前配置对象存储,无论是否允许 Operator 管理存储还是自己管理它。
如果您希望 Operator 负责管理存储,请参阅有关安装和配置 NooBaa / RHOCS Operator 的信息,请参阅受管存储部分。???
如果您使用单独的存储解决方案,请在配置 Operator 时将 Objectstorage 设置为 unmanaged。请参见以下部分。非受管存储,用于配置现有存储的详细信息。
3.2.1. 非受管存储 复制链接链接已复制到粘贴板!
本节提供了非受管存储的一些配置示例,以便方便。有关设置对象存储的详情,请参阅 Red Hat Quay 配置指南。
3.2.1.1. AWS S3 存储 复制链接链接已复制到粘贴板!
DISTRIBUTED_STORAGE_CONFIG:
s3Storage:
- S3Storage
- host: s3.us-east-2.amazonaws.com
s3_access_key: ABCDEFGHIJKLMN
s3_secret_key: OL3ABCDEFGHIJKLMN
s3_bucket: quay_bucket
storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- s3Storage
3.2.1.2. Google Cloud 存储 复制链接链接已复制到粘贴板!
DISTRIBUTED_STORAGE_CONFIG:
googleCloudStorage:
- GoogleCloudStorage
- access_key: GOOGQIMFB3ABCDEFGHIJKLMN
bucket_name: quay-bucket
secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN
storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- googleCloudStorage
3.2.1.3. Azure 存储 复制链接链接已复制到粘贴板!
DISTRIBUTED_STORAGE_CONFIG:
azureStorage:
- AzureStorage
- azure_account_name: azure_account_name_here
azure_container: azure_container_here
storage_path: /datastorage/registry
azure_account_key: azure_account_key_here
sas_token: some/path/
endpoint_url: https://[account-name].blob.core.usgovcloudapi.net
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- azureStorage
- 1
- Azure 存储的
endpoint_url参数是可选的,可用于 Microsoft Azure Government (MAG)端点。如果留空,endpoint_url将连接到普通的 Azure 区域。从 Red Hat Quay 3.7 开始,您必须使用 MAG Blob 服务的主端点。使用 MAG Blob 服务的二级端点将导致以下错误:
AuthenticationErrorDetail:Cannot find the claimed account when to getProperties for the account whusc8-secondary.
3.2.1.4. Ceph/RadosGW Storage 复制链接链接已复制到粘贴板!
DISTRIBUTED_STORAGE_CONFIG:
radosGWStorage: #storage config name
- RadosGWStorage #actual driver
- access_key: access_key_here #parameters
secret_key: secret_key_here
bucket_name: bucket_name_here
hostname: hostname_here
is_secure: 'true'
port: '443'
storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE: #must contain name of the storage config
- radosGWStorage
3.2.1.5. Swift 存储 复制链接链接已复制到粘贴板!
DISTRIBUTED_STORAGE_CONFIG:
swiftStorage:
- SwiftStorage
- swift_user: swift_user_here
swift_password: swift_password_here
swift_container: swift_container_here
auth_url: https://example.org/swift/v1/quay
auth_version: 1
ca_cert_path: /conf/stack/swift.cert"
storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- swiftStorage
3.2.1.6. NooBaa Unmanaged 存储 复制链接链接已复制到粘贴板!
使用以下步骤将 NooBaa 部署为您的非受管存储配置。
流程
- 通过导航到 Storage → Object Bucket Claims,在 {product-title} 控制台中创建一个 NooBaa Object Bucket Claim。
- 检索 Object Bucket Claim Data 详细信息,包括 Access Key, Bucket Name, Endpoint (hostname)和 Secret Key。
使用 Object Bucket Claim 的信息创建
config.yaml配置文件:DISTRIBUTED_STORAGE_CONFIG: default: - RHOCSStorage - access_key: WmrXtSGk8B3nABCDEFGH bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef hostname: s3.openshift-storage.svc.cluster.local is_secure: true port: "443" secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
有关配置对象 Bucket 声明的更多信息,请参阅 对象 Bucket 声明。
3.2.2. 受管存储 复制链接链接已复制到粘贴板!
如果您希望 Operator 管理 Quay 的对象存储,您的集群需要能够通过 ObjectBucketClaim API 提供对象存储。使用 Red Hat OpenShift Data Foundation (ODF) Operator,有两个支持的选项:
由本地 Kubernetes
PersistentVolume存储支持的 Multi-Cloud Object Gateway 的独立实例- 不可用
- 包含在 Quay 订阅中
- 不需要 ODF 的独立订阅
使用 scale-out Object Service 和 Ceph 的 ODF 生产环境部署
- 高可用性
- 需要 ODF 的独立订阅
要使用独立实例选项,请继续阅读以下内容。有关 ODF 生产环境部署,请参阅 官方文档。
对象存储磁盘空间由带有 50 GiB 的 Operator 自动分配。这个数字代表了 Red Hat Quay 安装中最小的存储量,但可能不适合您的用例。Operator 当前没有处理 RHOCS 卷的大小。如需了解更多详细信息,请参阅以下有关重新定义受管存储大小的部分。
作为 Red Hat Quay 订阅的一部分,用户有权使用 Red Hat OpenShift Data Foundation Operator 的 Multicloud Object Gateway 组件(以前称为 OpenShift Container Storage Operator)。此网关组件允许您将 S3 兼容对象存储接口提供给由基于 Kubernetes PersistentVolume- 的块存储支持的 Red Hat Quay。使用量仅限于由 Operator 管理的 Red Hat Quay 部署,以及 multicloud Object Gateway 实例的确切规格,如下所述。
因为 Red Hat Quay 不支持本地文件系统存储,因此用户可以将网关与 Kubernetes PersistentVolume 存储结合使用,以提供受支持的部署。PersistentVolume 直接挂载到网关实例上,作为对象存储的后备存储,支持任何基于块的 StorageClass。
通过 PersistentVolume 的性质,这不是横向扩展、高度可用的解决方案,不会取代像 Red Hat OpenShift Data Foundation 等横向扩展的存储系统。仅运行一个网关实例正在运行。如果因为重新调度、更新或计划外停机运行网关的 pod 不可用,这会导致连接的 Red Hat Quay 实例出现临时降级。
使用以下步骤,安装 Local Storage Operator、Red Hat OpenShift Data Foundation,并创建独立多云对象网关,以便在 OpenShift Container Platform 上部署 Red Hat Quay。
以下文档与官方 Red Hat OpenShift Data Foundation 文档 共享通用性。
在本地存储设备上创建 Red Hat OpenShift Data Foundation 集群前,使用以下步骤从 Operator Hub 安装 Local Storage Operator。
- 登录 OpenShift Web 控制台。
- 点 Operators → OperatorHub。
- 在搜索框中输入 本地存储,从 Operator 列表中选择 Local Storage Operator。点 Local Storage。
- 点 Install。
在 Install Operator 页面中设置以下选项:
- 对于 Update channel,选择 stable。
- 对于 Installation 模式,选择 A specific namespace on the cluster。
- 对于 Installed Namespace,请选择 Operator recommended namespace openshift-local-storage。
- 对于 Update approval,请选择 Automatic。
- 点 Install。
使用以下步骤在 OpenShift Container Platform 上安装 Red Hat OpenShift Data Foundation。
先决条件
-
使用具有
cluster-admin和 Operator 安装权限的账户访问 OpenShift Container Platform 集群。 - OpenShift Container Platform 集群中必须至少有三个 worker 节点。
- 有关其他资源要求,请参阅规划您的部署指南。
流程
- 登录 OpenShift Web 控制台。
- 点 Operators → OperatorHub。
- 在搜索框中输入 OpenShift Data Foundation。单击 OpenShift Data Foundation。
- 点 Install。
在 Install Operator 页面中设置以下选项:
- 对于 Update channel,选择最新的稳定版本。
- 对于 Installation 模式,选择 A specific namespace on the cluster。
- 对于 Installed Namespace,选择 Operator recommended Namespace: openshift-storage。
对于 Update approval,请选择 Automatic 或 Manual。
如果选择 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。
如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 Operator 更新至更新的版本。
- 对于 Console 插件,选择 Enable。
点 Install。
安装 Operator 后,用户界面中会出现一个带有消息的弹出窗口,
Web 控制台更新就会出现在用户界面中。点这个弹出窗口中的 Refresh web console 来反映控制台的更改。- 继续以下部分"创建独立多云对象网关",以利用 Red Hat Quay 的多云对象网关组件。
3.2.2.1.3. 使用 OpenShift Container Platform UI 创建独立多云对象网关 复制链接链接已复制到粘贴板!
使用以下步骤创建独立多云对象网关。
先决条件
- 已安装 Local Storage Operator。
- 已安装 Red Hat OpenShift Data Foundation Operator。
流程
在 OpenShift Web 控制台中,点 Operators → Installed Operators 查看所有已安装的 Operator。
确保命名空间为
openshift-storage。- 单击 Create StorageSystem。
在 Backing storage 页面中,选择以下内容:
- 为 Deployment 类型选择 Multicloud Object Gateway。
- 选择 Create a new StorageClass using the local storage devices 选项。
点 Next。
注意如果还没有安装,系统会提示您安装 Local Storage Operator。点 Install,并按照 "Installing the Local Storage Operator on OpenShift Container Platform" 中所述的步骤进行操作。
在 Create local volume set 页面中,提供以下信息:
- 为 LocalVolumeSet 和 StorageClass 输入一个名称。默认情况下,存储类名称会出现本地卷集名称。您可以更改名称。
选择以下任意一项:
所有节点上的磁盘
使用与所有节点上所选过滤器匹配的可用磁盘。
所选节点上的磁盘
仅在所选节点上使用与所选过滤器匹配的可用磁盘。
- 从可用 Disk Type 列表中,选择 SSD/NVMe。
展开 Advanced 部分并设置以下选项:
Expand 卷模式
文件系统会被默认选择。始终为卷模式选择 Filesystem。
设备类型
从下拉列表中选择一个或多个设备类型。
磁盘大小
为设备设置最小 100GB 大小,以及需要包含的设备的最大可用大小。
磁盘限制上限
这表示节点上可以创建的 PV 数量上限。如果此字段留空,则为匹配节点上的所有可用磁盘创建 PV。
点 Next
此时会显示一个用于确认创建
LocalVolumeSet的弹出窗口。- 单击 Yes 以继续。
在 Capacity 和 nodes 页面中,配置以下内容:
- 可用的原始容量会根据与存储类关联的所有附加磁盘填充容量值。这将需要一些时间才能出现。Selected nodes 列表根据存储类显示节点。
- 点 Next 继续。
可选的。选择 Connect to an external key management service 复选框。这是集群范围加密的可选选项。
- 从 Key Management Service Provider 下拉列表中,选择 Vault 或 Thales CipherTrust Manager (using KMIP)。如果选择了 Vault,请进入下一步。如果您选择了 Thales CipherTrust Manager (using KMIP),请转到步骤 iii。
选择身份验证方法。
使用令牌验证方法
- 输入唯一的连接名称 , Vault 服务器的主机地址('https://<hostname 或 ip>'),端口号和令牌。
展开 Advanced Settings,以根据您的
Vault配置输入其他设置和证书详情:- 在 后端路径中输入为 OpenShift Data Foundation 专用且唯一的 Key Value secret 路径。
- (可选)输入 TLS 服务器名称和 Vault Enterprise 命名空间。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、 客户端证书和客户端私钥。
点 Save 并跳过步骤 iv。
使用 Kubernetes 验证方法
- 输入唯一的 Vault Connection Name, Vault 服务器的主机地址('https://<hostname 或 ip>')、端口号和角色名称。
展开 Advanced Settings 以根据您的 Vault 配置输入额外的设置和证书详情:
- 在 后端路径中输入为 Red Hat OpenShift Data Foundation 专用 且唯一的 Key Value secret 路径。
- 可选:输入 TLS Server Name 和 Authentication Path (如果适用)。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、客户端证书和客户端私钥。
- 点 Save 并跳过步骤 iv。
要使用 Thales CipherTrust Manager (using KMIP) 作为 KMS 供应商,请按照以下步骤执行:
- 在项目中输入密钥管理服务的唯一连接名称。
在 Address 和 Port 部分中,输入 Thales CipherTrust Manager 的 IP 以及在其中启用了 KMIP 接口的端口。例如:
- 地址: 123.34.3.2
- 端口 :5696
- 上传 客户端证书、CA 证书和 客户端私钥。
- 如果启用了 StorageClass 加密,请输入用于加密和解密的唯一标识符。
-
TLS Server 字段是可选的,并在没有 KMIP 端点的 DNS 条目时使用。例如,kmip
_all_<port>.ciphertrustmanager.local。
- 选择 网络。
- 点 Next。
- 在 Review and create 页面中,检查配置详情。若要修改任何配置设置,请单击 Back。
- 单击 Create StorageSystem。
3.2.2.1.4. 使用 CLI 创建独立多云对象网关 复制链接链接已复制到粘贴板!
使用以下步骤安装 Red Hat OpenShift Data Foundation (以前称为 OpenShift Container Storage)Operator 并配置单个实例 Multi-Cloud Gateway 服务。
以下配置无法在安装 Red Hat OpenShift Data Foundation 的集群上并行运行。
流程
- 在 OpenShift Web 控制台中,然后选择 Operators → OperatorHub。
- 搜索 Red Hat OpenShift Data Foundation,然后选择 Install。
- 接受所有默认选项,然后选择 Install。
通过查看 Status 列确认已安装 Operator,它应标记为 Succeeded。
警告安装 Red Hat OpenShift Data Foundation Operator 后,系统会提示您创建存储系统。不要遵循这个指令。反之,按照以下步骤创建 NooBaa 对象存储。
在机器上,使用以下信息创建一个名为
noobaa.yaml的文件:apiVersion: noobaa.io/v1alpha1 kind: NooBaa metadata: name: noobaa namespace: openshift-storage spec: dbResources: requests: cpu: '0.1' memory: 1Gi dbType: postgres coreResources: requests: cpu: '0.1' memory: 1Gi这将创建 多云对象网关 的单一实例部署。
使用以下命令应用配置:
$ oc create -n openshift-storage -f noobaa.yaml输出示例
noobaa.noobaa.io/noobaa created几分钟后,Multi-cloud 对象网关 应该完成调配。您可以输入以下命令来检查其状态:
$ oc get -n openshift-storage noobaas noobaa -w输出示例
NAME MGMT-ENDPOINTS S3-ENDPOINTS IMAGE PHASE AGE noobaa [https://10.0.32.3:30318] [https://10.0.32.3:31958] registry.redhat.io/ocs4/mcg-core-rhel8@sha256:56624aa7dd4ca178c1887343c7445a9425a841600b1309f6deace37ce6b8678d Ready 3d18h通过创建以下 YAML 文件,名为
noobaa-pv-backing-store.yaml,为网关配置后备存储:apiVersion: noobaa.io/v1alpha1 kind: BackingStore metadata: finalizers: - noobaa.io/finalizer labels: app: noobaa name: noobaa-pv-backing-store namespace: openshift-storage spec: pvPool: numVolumes: 1 resources: requests: storage: 50Gi1 storageClass: STORAGE-CLASS-NAME2 type: pv-pool输入以下命令应用配置:
$ oc create -f noobaa-pv-backing-store.yaml输出示例
backingstore.noobaa.io/noobaa-pv-backing-store created这会为网关创建后备存储配置。Red Hat Quay 中的所有镜像将通过网关存储在由上述配置创建的
PersistentVolume中的对象。运行以下命令,使
PersistentVolume后端存储 Red Hat Quay Operator 发布的所有ObjectBucketClaims的默认 :$ oc patch bucketclass noobaa-default-bucket-class --patch '{"spec":{"placementPolicy":{"tiers":[{"backingStores":["noobaa-pv-backing-store"]}]}}}' --type merge -n openshift-storage
3.3. 配置数据库 复制链接链接已复制到粘贴板!
3.3.1. 使用现有的 Postgres 数据库 复制链接链接已复制到粘贴板!
要求:
如果使用外部管理的 PostgreSQL 数据库,您必须手动启用 pg_trgm 扩展才能成功部署。
使用必要的数据库字段创建配置文件
config.yaml:config.yaml:
DB_URI: postgresql://test-quay-database:postgres@test-quay-database:5432/test-quay-database使用配置文件创建 Secret:
$ kubectl create secret generic --from-file config.yaml=./config.yaml config-bundle-secret创建一个 QuayRegistry YAML 文件
quayregistry.yaml,它将postgres组件标记为非受管并引用所创建的 Secret:quayregistry.yaml
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: config-bundle-secret components: - kind: postgres managed: false- 按照以下部分所述部署 registry。
3.3.2. 数据库配置 复制链接链接已复制到粘贴板!
本节论述了可用于 Red Hat Quay 部署的数据库配置字段。
3.3.2.1. 数据库 URI 复制链接链接已复制到粘贴板!
在 Red Hat Quay 中,使用所需的 DB_URI 字段配置与数据库的连接。
下表描述了 DB_URI 配置字段:
| 字段 | 类型 | 描述 |
|---|---|---|
|
DB_URI | 字符串 | 用于访问数据库的 URI,包括任何凭据。
postgresql://quayuser:quaypass@quay-server.example.com:5432/quay |
3.3.2.2. 数据库连接参数 复制链接链接已复制到粘贴板!
可选的连接参数由 DB_CONNECTION_ARGS 参数配置。DB_CONNECTION_ARGS 下定义的一些键值对是通用的,另一些则特定于数据库。
下表描述了数据库连接参数:
| 字段 | 类型 | 描述 |
|---|---|---|
| DB_CONNECTION_ARGS | 对象 | 数据库的可选连接参数,如超时和 SSL。 |
| .autorollback | 布尔值 |
是否使用线程本地连接。 |
| .threadlocals | 布尔值 |
是否使用自动回滚连接。 |
3.3.2.2.1. PostgreSQL SSL 连接参数 复制链接链接已复制到粘贴板!
使用 SSL 时,配置取决于您部署的数据库。以下示例显示了 PostgreSQL SSL 配置:
DB_CONNECTION_ARGS:
sslmode: verify-ca
sslrootcert: /path/to/cacert
sslmode 选项决定是否与服务器协商安全 SSL TCP/IP 连接的优先级。有六个模式:
| 模式 | 描述 |
|---|---|
| disable | 您的配置只尝试非 SSL 连接。 |
| allow | 您的配置首先尝试非 SSL 连接。出现故障时,尝试 SSL 连接。 |
|
首选 | 您的配置首先尝试 SSL 连接。失败时,尝试非 SSL 连接。 |
| require | 您的配置只尝试 SSL 连接。如果存在 root CA 文件,它会像指定 verify-ca 一样验证证书。 |
| verify-ca | 您的配置只尝试 SSL 连接,并验证服务器证书是否由可信证书颁发机构(CA)发布。 |
| verify-full | 仅尝试 SSL 连接,并验证服务器证书是否由可信 CA 发布,并且请求的服务器主机名是否与证书中的匹配。 |
如需有关 PostgreSQL 有效参数的更多信息,请参阅 数据库连接控制功能。
3.3.2.2.2. MySQL SSL 连接参数 复制链接链接已复制到粘贴板!
以下示例显示了 MySQL SSL 配置示例:
DB_CONNECTION_ARGS:
ssl:
ca: /path/to/cacert
有关 MySQL 的有效连接参数的信息,请访问 使用类似URI的字符串或键-值对连接到服务器。
3.3.3. 使用受管 PostgreSQL 复制链接链接已复制到粘贴板!
建议:
- 应该使用 Postgres 镜像提供的工具或您自己的备份基础架构定期执行数据库备份。Operator 目前不确保 Postgres 数据库已被备份。
-
必须从备份中恢复 Postgres 数据库必须使用 Postgres 工具和流程进行。请注意,在数据库恢复进行时,您的 Quay
Pod不应正在运行。 - 数据库磁盘空间由带有 50 GiB 的 Operator 自动分配。这个数字代表了 Red Hat Quay 安装中最小的存储量,但可能不适合您的用例。重新定义数据库卷的大小目前没有被 Operator 处理。
3.4. 配置 SSL/TLS 和路由 复制链接链接已复制到粘贴板!
通过新的受管组件 tls 添加了对 OpenShift Container Platform Edge-Termination 路由的支持。这会将 路由 组件与 SSL/TLS 分开,并允许用户单独配置。
EXTERNAL_TLS_TERMINATION: true 是建议的设置。
-
Managed
tls表示使用默认的集群通配符证书。 -
Unmanaged
tls表示用户提供的密钥和证书对被注入到Route中。
ssl.cert 和 ssl.key 现在被移到一个单独的持久性 secret 中,这样可确保每次协调时不会重新生成密钥和证书对。密钥和证书对现在格式化为 边缘路由,并挂载到 Quay 容器中的同一目录中。
在配置 SSL/TLS 和路由时,可以多个规定,但适用以下规则:
-
如果
管理SSL/TLS,则必须管理您的路由 -
如果 SSL/TLS 是
非受管的,则必须使用 config 工具或直接在配置捆绑包中提供证书
下表描述了有效选项:
| 选项 | Route | TLS | 提供的证书 | 结果 |
|---|---|---|---|---|
| 我的负载均衡器处理 TLS | Managed | Managed | 否 | 带有默认通配符证书的边缘路由 |
| Red Hat Quay 处理 TLS | Managed | Unmanaged | 是 | 带有挂载到 pod 中的证书的透传路由 |
| Red Hat Quay 处理 TLS | Unmanaged | Unmanaged | 是 | 证书在 quay pod 中设置,但必须手动创建路由 |
当 TLS 由 Operator 管理时,Red Hat Quay 3.7 不支持构建器。
3.4.1. 使用 SSL/TLS 证书和密钥对创建配置捆绑包 secret 复制链接链接已复制到粘贴板!
使用以下步骤创建包含您自己的 SSL/TLS 证书和密钥对的配置捆绑包 secret。
流程
输入以下命令来创建包含您自己的 SSL/TLS 证书和密钥对的配置捆绑包 secret:
$ oc create secret generic --from-file config.yaml=./config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secret
3.5. 配置外部 Redis 复制链接链接已复制到粘贴板!
使用本节中的内容进行外部 Redis 部署。
3.5.1. 使用外部 Redis 复制链接链接已复制到粘贴板!
使用以下步骤使用外部 Redis 数据库。
如果要使用外部 Redis 数据库,请在 QuayRegistry 实例中将组件设置为非受管:
流程
使用以下 Redis 字段创建
config.yaml文件:BUILDLOGS_REDIS: host: quay-server.example.com port: 6379 ssl: false USER_EVENTS_REDIS: host: quay-server.example.com port: 6379 ssl: false输入以下命令使用配置文件创建 secret:
$ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret创建
quayregistry.yaml文件,将 Redis 组件设置为非受管并引用所创建的 secret:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: config-bundle-secret components: - kind: redis managed: false- 部署 Red Hat Quay registry。
3.5.2. Pod 横向自动扩展 复制链接链接已复制到粘贴板!
Pod 横向自动扩展(HPA)已添加到 Clair、Quay 和 Mirror pod 中,以便在负载激增过程中自动扩展。
由于 HPA 默认配置为 managed,因此 Clair、Quay 和 Mirror Pod 的数量被设置为 2。这有助于避免在 Operator 更新或重新配置 Red Hat Quay 时或重新调度事件期间避免停机。
3.5.2.1. 禁用 Horizontal Pod Autoscaler 复制链接链接已复制到粘贴板!
要禁用自动扩展或创建自己的 HorizontalPodAutoscaler,请在 QuayRegistry 实例中将组件指定为 unmanaged。例如:
apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
name: example-registry
namespace: quay-enterprise
spec:
components:
- kind: horizontalpodautoscaler
managed: false
3.5.3. 禁用路由组件 复制链接链接已复制到粘贴板!
使用以下步骤防止 Red Hat Quay Operator 创建路由。
流程
在
quayregistry.yaml文件中将组件设置为非受管:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: components: - kind: route managed: false编辑
config.yaml文件,以指定 Red Hat Quay 处理 SSL/TLS。例如:... EXTERNAL_TLS_TERMINATION: false ... SERVER_HOSTNAME: example-registry-quay-quay-enterprise.apps.user1.example.com ... PREFERRED_URL_SCHEME: https ...如果您没有正确配置
非受管路由,则会返回以下错误:{ { "kind":"QuayRegistry", "namespace":"quay-enterprise", "name":"example-registry", "uid":"d5879ba5-cc92-406c-ba62-8b19cf56d4aa", "apiVersion":"quay.redhat.com/v1", "resourceVersion":"2418527" }, "reason":"ConfigInvalid", "message":"required component `route` marked as unmanaged, but `configBundleSecret` is missing necessary fields" }
禁用默认路由意味着您现在负责 创建路由、服务或 Ingress,以访问 Red Hat Quay 实例。另外,您使用的任何 DNS 都必须与 Red Hat Quay 配置中的 SERVER_HOSTNAME 匹配。
3.5.4. 非受管监控 复制链接链接已复制到粘贴板!
如果您在单一命名空间中安装 Red Hat Quay Operator,则监控组件会自动设置为 非受管。使用以下引用来显式禁用监控。
非受管监控
apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
name: example-registry
namespace: quay-enterprise
spec:
components:
- kind: monitoring
managed: false
要在这种情况下启用监控,请参阅 在单个命名空间中安装 Red Hat Quay Operator 时启用监控 部分。
3.5.5. 非受管镜像 复制链接链接已复制到粘贴板!
明确禁用镜像:
apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
name: example-registry
namespace: quay-enterprise
spec:
components:
- kind: mirroring
managed: false
第 4 章 使用 Quay Operator 部署 Quay 复制链接链接已复制到粘贴板!
Operator 可以从命令行或从 OpenShift 控制台部署,但基本步骤相同。
4.1. 从命令行部署 Red Hat Quay 复制链接链接已复制到粘贴板!
-
创建一个命名空间,如
quay-enterprise。 - 如果要预配置部署的各个方面,请为配置捆绑包创建 secret
在名为
quayregistry.yaml的文件中创建QuayRegistry自定义资源对于最小部署,使用所有默认值:
quayregistry.yaml:
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise如果要有一些组件非受管组件,请在
spec字段中添加此信息。例如,最小部署可能类似如下:quayregistry.yaml:
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: components: - kind: clair managed: false - kind: horizontalpodautoscaler managed: false - kind: mirror managed: false - kind: monitoring managed: false如果您创建了配置捆绑包,如
init-config-bundle-secret,请在quayregistry.yaml文件中引用它:quayregistry.yaml:
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: init-config-bundle-secret如果您配置了代理,您可以使用 Quay、Clair 和 mirror 的覆盖添加信息:
quayregistry.yaml:
kind: QuayRegistry metadata: name: quay37 spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false - kind: route managed: true - kind: mirror managed: true overrides: env: - name: DEBUGLOG value: "true" - name: HTTP_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: HTTPS_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: NO_PROXY value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com - kind: tls managed: false - kind: clair managed: true overrides: env: - name: HTTP_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: HTTPS_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: NO_PROXY value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com - kind: quay managed: true overrides: env: - name: DEBUGLOG value: "true" - name: NO_PROXY value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com - name: HTTP_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: HTTPS_PROXY value: quayproxy.qe.devcluster.openshift.com:3128
在指定命名空间中创建
QuayRegistry:$ oc create -n quay-enterprise -f quayregistry.yaml- 有关如何跟踪部署进度的信息,请参阅监控和调试部署过程。
等待
status.registryEndpoint填充。$ oc get quayregistry -n quay-enterprise example-registry -o jsonpath="{.status.registryEndpoint}" -w
4.1.1. 使用命令行查看创建的组件 复制链接链接已复制到粘贴板!
使用 oc get pods 命令查看部署的组件:
$ oc get pods -n quay-enterprise
NAME READY STATUS RESTARTS AGE
example-registry-clair-app-5ffc9f77d6-jwr9s 1/1 Running 0 3m42s
example-registry-clair-app-5ffc9f77d6-wgp7d 1/1 Running 0 3m41s
example-registry-clair-postgres-54956d6d9c-rgs8l 1/1 Running 0 3m5s
example-registry-quay-app-79c6b86c7b-8qnr2 1/1 Running 4 3m42s
example-registry-quay-app-79c6b86c7b-xk85f 1/1 Running 4 3m41s
example-registry-quay-app-upgrade-5kl5r 0/1 Completed 4 3m50s
example-registry-quay-config-editor-597b47c995-svqrl 1/1 Running 0 3m42s
example-registry-quay-database-b466fc4d7-tfrnx 1/1 Running 2 3m42s
example-registry-quay-mirror-6d9bd78756-6lj6p 1/1 Running 0 2m58s
example-registry-quay-mirror-6d9bd78756-bv6gq 1/1 Running 0 2m58s
example-registry-quay-postgres-init-dzbmx 0/1 Completed 0 3m43s
example-registry-quay-redis-8bd67b647-skgqx 1/1 Running 0 3m42s
4.1.2. Pod 横向自动扩展(HPA) 复制链接链接已复制到粘贴板!
默认部署显示以下正在运行的 pod:
-
两个用于 Quay 应用程序本身的 pod (
example-registry-quay-app the) -
一个用于 Quay 日志记录的 Redis pod (
example-registry-quay-redis) -
Quay 用于元数据存储的 PostgreSQL 的一个数据库 pod (
example-registry-quay-database the) -
一个用于 Quay 配置编辑器的 pod (
example-registry-quay-config-editor the) -
两个 Quay 镜像 pod (
example-registry-quay-mirror) -
Clair 应用程序的两个 pod (
example-registry-clair-appö) -
一个用于 Clair 的 PostgreSQL pod (
example-registry-clair-postgres047)
由于 HPA 默认被配置为 managed,Quay 的 pod 数量,Clair 和存储库镜像数被设为 2。这有助于避免在通过 Operator 更新/重新配置 Quay 或重新调度事件期间避免停机。
$ oc get hpa -n quay-enterprise
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
example-registry-clair-app Deployment/example-registry-clair-app 16%/90%, 0%/90% 2 10 2 13d
example-registry-quay-app Deployment/example-registry-quay-app 31%/90%, 1%/90% 2 20 2 13d
example-registry-quay-mirror Deployment/example-registry-quay-mirror 27%/90%, 0%/90% 2 20 2 13d
4.1.3. 使用 API 部署 Red Hat Quay 复制链接链接已复制到粘贴板!
本节介绍了使用 API 部署 Red Hat Quay。
先决条件
-
配置选项
FEATURE_USER_INITIALIZE必须设为true。 - 数据库中还没有存在用户。
如需有关预配置 Red Hat Quay 部署的更多信息,请参阅 预配置 Red Hat Quay for automation部分
4.1.3.1. 使用 API 创建第一个用户 复制链接链接已复制到粘贴板!
使用以下步骤在 Red Hat Quay 组织中创建第一个用户。
此流程通过指定 "access_token": true 来请求 OAuth 令牌。
以 root 用户身份,输入以下命令安装
python39:$ sudo yum install python39升级 Python 3.9 的
pip软件包管理器:$ python3.9 -m pip install --upgrade pip使用
pip软件包管理器安装bcrypt软件包:$ pip install bcrypt输入以下命令,使用 Python 3.9 中的
bcrypt软件包生成安全散列密码:$ python3.9 -c 'import bcrypt; print(bcrypt.hashpw(b"subquay12345", bcrypt.gensalt(12)).decode("utf-8"))'打开 Red Hat Quay 配置文件并更新以下配置字段:
FEATURE_USER_INITIALIZE: true SUPER_USERS: - quayadmin输入以下命令停止 Red Hat Quay 服务:
$ sudo podman stop quay输入以下命令启动 Red Hat Quay 服务:
$ sudo podman run -d -p 80:8080 -p 443:8443 --name=quay -v $QUAY/config:/conf/stack:Z -v $QUAY/storage:/datastorage:Z {productrepo}/{quayimage}:{productminv}运行以下
CURL命令,以使用用户名、密码、电子邮件和访问令牌生成新用户:$ curl -X POST -k http://quay-server.example.com/api/v1/user/initialize --header 'Content-Type: application/json' --data '{ "username": "quayadmin", "password":"quaypass12345", "email": "quayadmin@example.com", "access_token": true}'如果成功,命令会返回带有用户名、电子邮件和加密的密码的对象。例如:
{"access_token":"6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED", "email":"quayadmin@example.com","encrypted_password":"1nZMLH57RIE5UGdL/yYpDOHLqiNCgimb6W9kfF8MjZ1xrfDpRyRs9NUnUuNuAitW","username":"quayadmin"} # gitleaks:allow如果用户已在数据库中存在,则返回错误:
{"message":"Cannot initialize user in a non-empty database"}如果您的密码不至少为 8 个字符或包含空格,则会返回错误:
{"message":"Failed to initialize user: Invalid password, password must be at least 8 characters and contain no whitespace."}输入以下命令登录到您的 Red Hat Quay 部署:
$ sudo podman login -u quayadmin -p quaypass12345 http://quay-server.example.com --tls-verify=false输出示例
Login Succeeded!
4.1.4. 监控和调试部署过程 复制链接链接已复制到粘贴板!
用户现在可以在部署阶段排除问题。QuayRegistry 对象中的状态可帮助您监控部署期间组件的健康状态,以帮助您调试可能出现的问题:
$ oc get quayregistry -n quay-enterprise -o yaml
部署后,QuayRegistry 对象将显示基本配置:
apiVersion: v1
items:
- apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
creationTimestamp: "2021-09-14T10:51:22Z"
generation: 3
name: example-registry
namespace: quay-enterprise
resourceVersion: "50147"
selfLink: /apis/quay.redhat.com/v1/namespaces/quay-enterprise/quayregistries/example-registry
uid: e3fc82ba-e716-4646-bb0f-63c26d05e00e
spec:
components:
- kind: postgres
managed: true
- kind: clair
managed: true
- kind: redis
managed: true
- kind: horizontalpodautoscaler
managed: true
- kind: objectstorage
managed: true
- kind: route
managed: true
- kind: mirror
managed: true
- kind: monitoring
managed: true
- kind: tls
managed: true
configBundleSecret: example-registry-config-bundle-kt55s
kind: List
metadata:
resourceVersion: ""
selfLink: ""
使用 oc get pods 命令查看部署组件的当前状态:
$ oc get pods -n quay-enterprise
NAME READY STATUS RESTARTS AGE
example-registry-clair-app-86554c6b49-ds7bl 0/1 ContainerCreating 0 2s
example-registry-clair-app-86554c6b49-hxp5s 0/1 Running 1 17s
example-registry-clair-postgres-68d8857899-lbc5n 0/1 ContainerCreating 0 17s
example-registry-quay-app-upgrade-h2v7h 0/1 ContainerCreating 0 9s
example-registry-quay-config-editor-5f646cbcb7-lbnc2 0/1 ContainerCreating 0 17s
example-registry-quay-database-66f495c9bc-wqsjf 0/1 ContainerCreating 0 17s
example-registry-quay-mirror-854c88457b-d845g 0/1 Init:0/1 0 2s
example-registry-quay-mirror-854c88457b-fghxv 0/1 Init:0/1 0 17s
example-registry-quay-postgres-init-bktdt 0/1 Terminating 0 17s
example-registry-quay-redis-f9b9d44bf-4htpz 0/1 ContainerCreating 0 17s
部署正在进行时,QuayRegistry 对象将显示当前状态。在本实例中,会发生数据库迁移,其他组件将等到这个完成为止。
status:
conditions:
- lastTransitionTime: "2021-09-14T10:52:04Z"
lastUpdateTime: "2021-09-14T10:52:04Z"
message: all objects created/updated successfully
reason: ComponentsCreationSuccess
status: "False"
type: RolloutBlocked
- lastTransitionTime: "2021-09-14T10:52:05Z"
lastUpdateTime: "2021-09-14T10:52:05Z"
message: running database migrations
reason: MigrationsInProgress
status: "False"
type: Available
configEditorCredentialsSecret: example-registry-quay-config-editor-credentials-btbkcg8dc9
configEditorEndpoint: https://example-registry-quay-config-editor-quay-enterprise.apps.docs.quayteam.org
lastUpdated: 2021-09-14 10:52:05.371425635 +0000 UTC
unhealthyComponents:
clair:
- lastTransitionTime: "2021-09-14T10:51:32Z"
lastUpdateTime: "2021-09-14T10:51:32Z"
message: 'Deployment example-registry-clair-postgres: Deployment does not have minimum availability.'
reason: MinimumReplicasUnavailable
status: "False"
type: Available
- lastTransitionTime: "2021-09-14T10:51:32Z"
lastUpdateTime: "2021-09-14T10:51:32Z"
message: 'Deployment example-registry-clair-app: Deployment does not have minimum availability.'
reason: MinimumReplicasUnavailable
status: "False"
type: Available
mirror:
- lastTransitionTime: "2021-09-14T10:51:32Z"
lastUpdateTime: "2021-09-14T10:51:32Z"
message: 'Deployment example-registry-quay-mirror: Deployment does not have minimum availability.'
reason: MinimumReplicasUnavailable
status: "False"
type: Available
当部署过程成功完成时,QuayRegistry 对象中的状态不会显示不健康的组件:
status:
conditions:
- lastTransitionTime: "2021-09-14T10:52:36Z"
lastUpdateTime: "2021-09-14T10:52:36Z"
message: all registry component healthchecks passing
reason: HealthChecksPassing
status: "True"
type: Available
- lastTransitionTime: "2021-09-14T10:52:46Z"
lastUpdateTime: "2021-09-14T10:52:46Z"
message: all objects created/updated successfully
reason: ComponentsCreationSuccess
status: "False"
type: RolloutBlocked
configEditorCredentialsSecret: example-registry-quay-config-editor-credentials-hg7gg7h57m
configEditorEndpoint: https://example-registry-quay-config-editor-quay-enterprise.apps.docs.quayteam.org
currentVersion: {producty}
lastUpdated: 2021-09-14 10:52:46.104181633 +0000 UTC
registryEndpoint: https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org
unhealthyComponents: {}
4.2. 从 OpenShift 控制台部署 Red Hat Quay 复制链接链接已复制到粘贴板!
-
创建一个命名空间,如
quay-enterprise。 - 选择 Operators → Installed Operators,然后选择 Quay Operator 以导航到 Operator 详情视图。
- 点 'Provided APIs' 下的"Create Instance"标题上的 'Create Instance'。
-
(可选)更改
QuayRegistry的 'Name'。这将影响 registry 的主机名。所有其他字段都填充了默认值。 -
点 'Create' 提交由 Quay Operator 部署的
QuayRegistry。 -
您应该被重定向到
QuayRegistry列表视图。点您刚才创建的QuayRegistry来查看详情视图。 - 在 'Registry Endpoint' 有值后,可以在 UI 中点来访问新的 Quay registry。现在,您可以选择 'Create Account' 来创建用户并登录。
4.2.1. 使用 Quay UI 创建第一个用户 复制链接链接已复制到粘贴板!
此流程假设 FEATURE_USER_CREATION 配置选项尚未设置为 false。如果是 false,则禁用 UI 上的 Create Account 功能,您必须使用 API 创建第一个用户。
- 在 OpenShift 控制台中,导航到 Operators → Installed Operators,其中包含适当的命名空间 / 项目。
点新安装的 QuayRegistry,以查看详情:
-
当
Registry 端点具有值后,在浏览器中进入此 URL 在 Quay registry UI 中选择"Create Account"来创建用户
输入用户名、密码、电子邮件的详细信息,然后单击
创建帐户
您会自动登录到 Quay registry
第 5 章 在 OpenShift 上配置 Quay 复制链接链接已复制到粘贴板!
部署后,您可以通过编辑 Quay 配置捆绑包 secret spec.configBundleSecret 来配置 Quay 应用程序,您还可以更改 QuayRegistry 资源的 spec.components 对象中的受管状态
另外,您可以使用配置编辑器 UI 来配置 Quay 应用程序,如 第 6 章 使用配置工具在 OpenShift 上重新配置 Quay 部分所述。
5.1. 在 OpenShift 控制台中编辑配置捆绑包 secret 复制链接链接已复制到粘贴板!
流程
在 Quay Registry 概述屏幕上,点 Config Bundle Secret 的链接:
要编辑 secret,请点击 Actions → Edit Secret
修改配置并保存更改
- 监控部署以确保成功完成并且配置更改已生效
5.2. 确定 QuayRegistry 端点和 secret 复制链接链接已复制到粘贴板!
您可以使用 oc describe quayregistry 或 oc get quayregistry -o yaml 检查 QuayRegistry 资源,以确定当前的端点和 secret:
$ oc get quayregistry example-registry -n quay-enterprise -o yaml
apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
...
name: example-registry
namespace: quay-enterprise
...
spec:
components:
- kind: quay
managed: true
...
- kind: clairpostgres
managed: true
configBundleSecret: init-config-bundle-secret
status:
configEditorCredentialsSecret: example-registry-quay-config-editor-credentials-fg2gdgtm24
configEditorEndpoint: https://example-registry-quay-config-editor-quay-enterprise.apps.docs.gcp.quaydev.org
currentVersion: 3.7.0
lastUpdated: 2022-05-11 13:28:38.199476938 +0000 UTC
registryEndpoint: https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org
相关字段有:
-
registryEndpoint:registry 的 URL、浏览器访问 registry UI 和 registry API 端点 -
configBundleSecret:包含config.yaml文件和任何 SSL 证书的配置捆绑包 secret -
configEditorEndpoint:配置编辑器工具的 URL、浏览器访问配置工具和配置 API -
configEditorCredentialsSecret:包含用户名(通常为quayconfig)和配置编辑器工具的密码的 secret
要确定配置编辑器工具的用户名和密码:
检索 secret:
$ oc get secret -n quay-enterprise example-registry-quay-config-editor-credentials-fg2gdgtm24 -o yaml apiVersion: v1 data: password: SkZwQkVKTUN0a1BUZmp4dA== username: cXVheWNvbmZpZw== kind: Secret解码用户名:
$ echo 'cXVheWNvbmZpZw==' | base64 --decode quayconfig解码密码:
$ echo 'SkZwQkVKTUN0a1BUZmp4dA==' | base64 --decode JFpBEJMCtkPTfjxt
5.3. 下载现有配置 复制链接链接已复制到粘贴板!
有多种方法访问当前配置:
使用配置编辑器端点,为配置编辑器指定用户名和密码:
$ curl -k -u quayconfig:JFpBEJMCtkPTfjxt https://example-registry-quay-config-editor-quay-enterprise.apps.docs.quayteam.org/api/v1/config{ "config.yaml": { "ALLOW_PULLS_WITHOUT_STRICT_LOGGING": false, "AUTHENTICATION_TYPE": "Database", ... "USER_RECOVERY_TOKEN_LIFETIME": "30m" }, "certs": { "extra_ca_certs/service-ca.crt": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVVENDQWptZ0F3SUJBZ0lJRE9kWFhuUXFjMUF3RFFZSktvWklodmNOQVFFTEJRQXdOakUwTURJR0ExVUUKQXd3cmIzQmxibk5vYVdaMExYTmxjblpwWTJVdGMyVnlkbWx1WnkxemFXZHVaWEpBTVRZek1UYzNPREV3TXpBZQpGdzB5TVRBNU1UWXdOelF4TkRKYUZ..." } }使用配置捆绑包 secret
获取 secret 数据:
$ oc get secret -n quay-enterprise init-config-bundle-secret -o jsonpath='{.data}'输出示例
{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }解码数据:
$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decodeFEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_PROXY_CACHE: true FEATURE_BUILD_SUPPORT: true DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000
5.4. 使用配置捆绑包配置自定义 SSL 证书 复制链接链接已复制到粘贴板!
您可以通过创建或更新配置捆绑包 secret,在初始部署前或 Red Hat Quay 部署后配置自定义 SSL 证书。如果要将证书添加到现有部署中,您必须在新的配置捆绑包 secret 中包含现有的 config.yaml,即使您没有进行任何更改。
5.4.1. 将 TLS 设置为非受管状态 复制链接链接已复制到粘贴板!
在 Quay Registry yaml 中,将 kind: tls 设置为 managed: false :
- kind: tls
managed: false
在事件中,您应该看到更改被阻止,直到您设置适当的配置:
- lastTransitionTime: '2022-03-28T12:56:49Z'
lastUpdateTime: '2022-03-28T12:56:49Z'
message: >-
required component `tls` marked as unmanaged, but `configBundleSecret`
is missing necessary fields
reason: ConfigInvalid
status: 'True'
5.4.2. 将证书添加到配置捆绑包中 复制链接链接已复制到粘贴板!
流程
使用嵌入式数据或使用文件创建 secret:
直接在 Secret 资源 YAML 文件中嵌入配置详情,例如:
custom-ssl-config-bundle.yaml
apiVersion: v1 kind: Secret metadata: name: custom-ssl-config-bundle-secret namespace: quay-enterprise data: config.yaml: | FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_PROXY_CACHE: true FEATURE_BUILD_SUPPORT: true DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000 extra_ca_cert_my-custom-ssl.crt: | -----BEGIN CERTIFICATE----- MIIDsDCCApigAwIBAgIUCqlzkHjF5i5TXLFy+sepFrZr/UswDQYJKoZIhvcNAQEL BQAwbzELMAkGA1UEBhMCSUUxDzANBgNVBAgMBkdBTFdBWTEPMA0GA1UEBwwGR0FM .... -----END CERTIFICATE-----接下来,从 YAML 文件创建 secret:
$ oc create -f custom-ssl-config-bundle.yaml或者,您可以创建包含所需信息的文件,然后从这些文件创建 secret:
$ oc create secret generic custom-ssl-config-bundle-secret \ --from-file=config.yaml \ --from-file=extra_ca_cert_my-custom-ssl.crt=my-custom-ssl.crt
创建或更新 QuayRegistry YAML 文件
quayregistry.yaml,引用创建的 Secret,例如:quayregistry.yaml
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: custom-ssl-config-bundle-secret使用 YAML 文件部署或更新 registry:
oc apply -f quayregistry.yaml
第 6 章 使用配置工具在 OpenShift 上重新配置 Quay 复制链接链接已复制到粘贴板!
6.1. 访问配置编辑器 复制链接链接已复制到粘贴板!
在 QuayRegistry 屏幕的 Details 部分中,提供了配置编辑器的端点,以及包含用于登录到配置编辑器的凭证的 secret 的链接:
6.1.1. 检索配置编辑器凭证 复制链接链接已复制到粘贴板!
点配置编辑器 secret 的链接:
在 Secret 详情屏幕的 Data 部分,点
Reveal 值来查看用于登录到配置编辑器的凭证:
6.1.2. 登录到配置编辑器 复制链接链接已复制到粘贴板!
浏览配置编辑器端点,然后输入用户名,通常为 quayconfig,以及对应的密码来访问配置工具:
6.1.3. 更改配置 复制链接链接已复制到粘贴板!
在以下示例中,您可以通过更改已删除标签的默认过期周期来更新配置文件。
流程
- 在配置编辑器中,找到 Time Machine 部分。
在 Allowed expiration period 框中添加一个过期周期,例如
4w:
- 选择 Validate Configuration Changes 以确保更改有效。
按 Reconfigure Quay 来应用更改:
应用更改后,配置工具会通知您已向 Red Hat Quay 部署提交了更改:
+
使用配置工具 UI 重新配置 Red Hat Quay 可能会导致 registry 在应用更新的配置时短时间内不可用。
6.2. 在 UI 中监控重新配置 复制链接链接已复制到粘贴板!
6.2.1. QuayRegistry 资源 复制链接链接已复制到粘贴板!
重新配置 Operator 后,您可以在 QuayRegistry 的特定实例的 YAML 选项卡中跟踪重新部署的进度,本例中为 example-registry :
每次状态更改时,系统会提示您重新载入数据以查看更新的版本。最后,Operator 将协调更改,且不会报告不健康的组件。
6.2.2. 事件 复制链接链接已复制到粘贴板!
QuayRegistry 的 Events 选项卡显示与重新部署相关的一些事件:
对于受重新配置影响的命名空间中的所有资源,流事件位于 Home → Events 下的 OpenShift 控制台中:
6.3. 重新配置后访问更新的信息 复制链接链接已复制到粘贴板!
6.3.1. 在 UI 中访问更新的配置工具凭证 复制链接链接已复制到粘贴板!
在 Red Hat Quay 3.7 中,通过 UI 重新配置 Quay 不再生成新的登录密码。现在,密码只生成一次,并在协调 QuayRegistry 对象后保持不变。
6.3.2. 在 UI 中访问更新的 config.yaml 复制链接链接已复制到粘贴板!
使用 config 捆绑包访问更新的 config.yaml 文件。
- 在 QuayRegistry 详情屏幕上,点 Config Bundle Secret
-
在 Secret 详情屏幕的 Data 部分,点 Reveal values 查看
config.yaml文件 检查是否应用了更改。在这种情况下,
4w应该位于TAG_EXPIRATION_OPTIONS列表中:... SERVER_HOSTNAME: example-quay-openshift-operators.apps.docs.quayteam.org SETUP_COMPLETE: true SUPER_USERS: - quayadmin TAG_EXPIRATION_OPTIONS: - 2w - 4w ...
6.4. 自定义 SSL 证书 UI 复制链接链接已复制到粘贴板!
配置工具可用于加载自定义证书,以便于访问外部数据库等资源。选择要上传的自定义证书,确保它们采用 PEM 格式,其扩展名为 .crt。
配置工具还显示任何上传的证书列表。上传自定义 SSL 证书后,它将出现在列表中:
6.5. 对 Registry 的外部访问 复制链接链接已复制到粘贴板!
在 OpenShift 上运行时,Route API 可用,并将自动用作受管组件。创建 QuayRegistry 后,可以在 QuayRegistry 的状态块中找到外部接入点:
status:
registryEndpoint: some-quay.my-namespace.apps.mycluster.com
第 7 章 Quay Operator 的功能 复制链接链接已复制到粘贴板!
7.1. 控制台监控和警报 复制链接链接已复制到粘贴板!
Red Hat Quay 支持从 OpenShift 控制台监控使用 Operator 部署的 Quay 实例。新的监控功能包括 Grafana 仪表板、访问各个指标和警报以通知频繁重启 Quay pod。
要启用监控功能,Operator 必须以"所有命名空间"模式安装。
7.1.1. Dashboard 复制链接链接已复制到粘贴板!
在 OpenShift 控制台中,导航到 Monitoring → Dashboards 并搜索所需 Quay registry 实例的仪表板:
仪表板显示各种统计信息,包括:
- 机构、存储库、用户和过期帐户的数量
- CPU 用量和最大内存用量
- Image Pulls 和 Pushes 和 Authentication 请求的速度
- API 请求率
- 延迟
7.1.2. 指标 复制链接链接已复制到粘贴板!
您可以通过在 UI 中访问 Monitoring → Metrics 来查看 Quay 仪表板后面的底层指标。在 Expression 字段中,输入文本 quay_ 以查看可用的指标列表:
选择一个指标示例,如 quay_org_rows :
此指标显示 registry 中的机构数量,它也直接位于仪表板中。
7.1.3. 警报 复制链接链接已复制到粘贴板!
如果 Quay Pod 重启太频繁,则会引发警报。可通过从 consol UI 中的 Monitoring → Alerting 访问 Alerting rules 选项卡来配置警报,并搜索特定于 Quay 的警报:
选择 QuayPodFrequentlyRestarting 规则详情来配置警报:
7.2. Clair for Red Hat Quay 复制链接链接已复制到粘贴板!
Clair v4 (Clair)是一个开源应用程序,它利用静态代码分析来解析镜像内容和报告影响内容的漏洞。Clair 与 Red Hat Quay 打包,并可用于独立和 Operator 部署。它可以在高度可扩展的配置中运行,其中组件可根据企业环境单独扩展。
7.2.1. Clair 安全漏洞数据库 复制链接链接已复制到粘贴板!
Clair 使用以下漏洞数据库来报告您的镜像中的问题:
- Ubuntu Oval 数据库
- Debian Oval 数据库
- Red Hat Enterprise Linux (RHEL) Oval 数据库
- Dan Oval 数据库
- Oracle Oval 数据库
- alpine SecDB 数据库
- VMware Photon OS 数据库
- Amazon Web Services (AWS) UpdateInfo
- Pyup.io (Python)数据库
有关 Clair 如何使用不同数据库进行安全映射的详情,请参考 ClairCore严重性映射。
7.2.2. OpenShift Container Platform 上的 Clair 复制链接链接已复制到粘贴板!
要在 OpenShift Container Platform 上的 Red Hat Quay 部署上设置 Clair v4 (Clair),建议使用 Red Hat Quay Operator。默认情况下,Red Hat Quay Operator 将安装和升级 Clair 部署,以及您的 Red Hat Quay 部署并自动配置 Clair。
7.2.3. 测试 Clair 复制链接链接已复制到粘贴板!
使用以下步骤在一个独立 Red Hat Quay 部署或基于 OpenShift Container Platform Operator 的部署中测试 Clair。
先决条件
- 您已部署了 Clair 容器镜像。
流程
输入以下命令拉取示例镜像:
$ podman pull ubuntu:20.04输入以下命令将镜像标记到 registry:
$ sudo podman tag docker.io/library/ubuntu:20.04 <quay-server.example.com>/<user-name>/ubuntu:20.04输入以下命令将镜像推送到 Red Hat Quay registry:
$ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04- 通过 UI 登录您的 Red Hat Quay 部署。
- 单击存储库名称,如 quayadmin/ubuntu。
在导航窗格中,点 Tags。
报告概述
点镜像报告(如 45 个介质 )以显示更详细的报告:
报告详情
7.3. 联邦信息处理标准(FIPS)就绪和合规性 复制链接链接已复制到粘贴板!
由国家标准与技术(NIST)开发的联邦信息处理标准(FIPS)被认为是保护和加密敏感数据的高度关注,特别是在美国、企业和公共领域。Red Hat Enterprise Linux (RHEL)和 OpenShift Container Platform 通过提供 FIPS 模式 来支持 FIPS 标准,其中系统只允许使用特定的 FIPS 验证加密模块,如 openssl。这样可确保 FIPS 合规性。
从 Red Hat Quay 版本 3.5.0 开始,Red Hat Quay 支持在启用了 FIPS 的 RHEL 和 OpenShift Container Platform 环境中运行。
第 8 章 高级概念 复制链接链接已复制到粘贴板!
8.1. 在基础架构节点上部署 Quay 复制链接链接已复制到粘贴板!
默认情况下,当使用 Operator 部署 registry 时,与 Quay 相关的 pod 会放置到任意 worker 节点上。OpenShift Container Platform 文档演示了如何使用机器集将节点配置为仅托管基础架构组件(请参阅 https://docs.openshift.com/container-platform/4.7/machine_management/creating-infrastructure-machinesets.html)。
如果不使用 OCP MachineSet 资源来部署 infra 节点,本节演示了如何为基础架构目的手动标记和污点节点。
配置基础架构节点后,可以手动或使用机器集,然后使用节点选择器和容限控制这些节点上的 Quay pod 放置。
8.1.1. 用于基础架构使用的标签和污点节点 复制链接链接已复制到粘贴板!
在本例中,集群中有三个 master 节点和 6 个 worker 节点:
$ oc get nodes
NAME STATUS ROLES AGE VERSION
user1-jcnp6-master-0.c.quay-devel.internal Ready master 3h30m v1.20.0+ba45583
user1-jcnp6-master-1.c.quay-devel.internal Ready master 3h30m v1.20.0+ba45583
user1-jcnp6-master-2.c.quay-devel.internal Ready master 3h30m v1.20.0+ba45583
user1-jcnp6-worker-b-65plj.c.quay-devel.internal Ready worker 3h21m v1.20.0+ba45583
user1-jcnp6-worker-b-jr7hc.c.quay-devel.internal Ready worker 3h21m v1.20.0+ba45583
user1-jcnp6-worker-c-jrq4v.c.quay-devel.internal Ready worker 3h21m v1.20.0+ba45583
user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal Ready worker 3h21m v1.20.0+ba45583
user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal Ready worker 3h22m v1.20.0+ba45583
user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal Ready worker 3h21m v1.20.0+ba45583
为基础架构标记最后三个 worker 节点:
$ oc label node --overwrite user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal node-role.kubernetes.io/infra=
$ oc label node --overwrite user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal node-role.kubernetes.io/infra=
$ oc label node --overwrite user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal node-role.kubernetes.io/infra=
现在,当列出集群中的节点时,最后 3 个 worker 节点将具有添加的 infra 角色:
$ oc get nodes
NAME STATUS ROLES AGE VERSION
user1-jcnp6-master-0.c.quay-devel.internal Ready master 4h14m v1.20.0+ba45583
user1-jcnp6-master-1.c.quay-devel.internal Ready master 4h15m v1.20.0+ba45583
user1-jcnp6-master-2.c.quay-devel.internal Ready master 4h14m v1.20.0+ba45583
user1-jcnp6-worker-b-65plj.c.quay-devel.internal Ready worker 4h6m v1.20.0+ba45583
user1-jcnp6-worker-b-jr7hc.c.quay-devel.internal Ready worker 4h5m v1.20.0+ba45583
user1-jcnp6-worker-c-jrq4v.c.quay-devel.internal Ready worker 4h5m v1.20.0+ba45583
user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal Ready infra,worker 4h6m v1.20.0+ba45583
user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal Ready infra,worker 4h6m v1.20.0+ba45583
user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal Ready infra,worker 4h6m v1.20.0+ba45583
当将 infra 节点分配给 worker 时,用户工作负载可能会意外地分配给 infra 节点。要避免这种情况,您可以将污点应用到 infra 节点,然后为您要控制的 pod 添加容限。
$ oc adm taint nodes user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal node-role.kubernetes.io/infra:NoSchedule
$ oc adm taint nodes user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal node-role.kubernetes.io/infra:NoSchedule
$ oc adm taint nodes user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal node-role.kubernetes.io/infra:NoSchedule
8.1.2. 使用节点选择器和容限创建项目 复制链接链接已复制到粘贴板!
如果您已经使用 Quay Operator 部署 Quay,请删除已安装的 Operator 以及您为部署创建的任何特定命名空间。
创建 Project 资源,指定节点选择器和容限,如下例所示:
quay-registry.yaml
kind: Project
apiVersion: project.openshift.io/v1
metadata:
name: quay-registry
annotations:
openshift.io/node-selector: 'node-role.kubernetes.io/infra='
scheduler.alpha.kubernetes.io/defaultTolerations: >-
[{"operator": "Exists", "effect": "NoSchedule", "key":
"node-role.kubernetes.io/infra"}
]
使用 oc apply 命令来创建项目:
$ oc apply -f quay-registry.yaml
project.project.openshift.io/quay-registry created
现在,在 quay-registry 命名空间中创建的任何后续资源都应调度到专用基础架构节点。
8.1.3. 在命名空间中安装 Quay Operator 复制链接链接已复制到粘贴板!
安装 Quay Operator 时,明确指定适当的项目命名空间,本例中为 quay-registry。这将导致 Operator pod 本身位于三个基础架构节点中的一个中:
$ oc get pods -n quay-registry -o wide
NAME READY STATUS RESTARTS AGE IP NODE
quay-operator.v3.4.1-6f6597d8d8-bd4dp 1/1 Running 0 30s 10.131.0.16 user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal
8.1.4. 创建 registry 复制链接链接已复制到粘贴板!
如前所述创建 registry,然后等待部署就绪。当列出 Quay pod 时,您应该会看到它们只调度到您标记为基础架构目的的三个节点上:
$ oc get pods -n quay-registry -o wide
NAME READY STATUS RESTARTS AGE IP NODE
example-registry-clair-app-789d6d984d-gpbwd 1/1 Running 1 5m57s 10.130.2.80 user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal
example-registry-clair-postgres-7c8697f5-zkzht 1/1 Running 0 4m53s 10.129.2.19 user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal
example-registry-quay-app-56dd755b6d-glbf7 1/1 Running 1 5m57s 10.129.2.17 user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal
example-registry-quay-config-editor-7bf9bccc7b-dpc6d 1/1 Running 0 5m57s 10.131.0.23 user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal
example-registry-quay-database-8dc7cfd69-dr2cc 1/1 Running 0 5m43s 10.129.2.18 user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal
example-registry-quay-mirror-78df886bcc-v75p9 1/1 Running 0 5m16s 10.131.0.24 user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal
example-registry-quay-postgres-init-8s8g9 0/1 Completed 0 5m54s 10.130.2.79 user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal
example-registry-quay-redis-5688ddcdb6-ndp4t 1/1 Running 0 5m56s 10.130.2.78 user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal
quay-operator.v3.4.1-6f6597d8d8-bd4dp 1/1 Running 0 22m 10.131.0.16 user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal
8.2. 在单一命名空间中安装 Red Hat Quay Operator 时启用监控 复制链接链接已复制到粘贴板!
当在一个命名空间中安装 Red Hat Quay Operator 时,监控组件被设置为 unmanaged。要配置监控,您需要在 OpenShift Container Platform 中为用户定义的命名空间启用它。
如需更多信息,请参阅有关 配置监控堆栈 和 为用户定义的项目启用监控 的 OpenShift Container Platform 文档。
以下小节介绍了如何根据 OpenShift Container Platform 文档为 Red Hat Quay 启用监控。
8.2.1. 创建集群监控配置映射 复制链接链接已复制到粘贴板!
使用以下步骤检查 cluster-monitoring-config ConfigMap 对象是否存在。
流程
输入以下命令检查
cluster-monitoring-configConfigMap 对象是否存在:$ oc -n openshift-monitoring get configmap cluster-monitoring-config输出示例
Error from server (NotFound): configmaps "cluster-monitoring-config" not found可选:如果
ConfigMap对象不存在,请创建一个 YAML 清单。在以下示例中,该文件名为cluster-monitoring-config.yaml。cat <<EOF > cluster-monitoring-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | EOF可选:如果
ConfigMap对象不存在,请创建ConfigMap对象:$ oc apply -f cluster-monitoring-config.yaml configmap/cluster-monitoring-config created运行以下命令,确保
ConfigMap对象存在:$ oc -n openshift-monitoring get configmap cluster-monitoring-config输出示例
NAME DATA AGE cluster-monitoring-config 1 12s
8.2.2. 创建用户定义的工作负载监控 ConfigMap 对象 复制链接链接已复制到粘贴板!
使用以下步骤检查 user-workload-monitoring-config ConfigMap 对象是否存在。
流程
输入以下命令检查
user-workload-monitoring-configConfigMap对象是否存在:$ oc -n openshift-user-workload-monitoring get configmap user-workload-monitoring-config输出示例
Error from server (NotFound): configmaps "user-workload-monitoring-config" not found如果
ConfigMap对象不存在,请创建一个 YAML 清单。在以下示例中,该文件名为user-workload-monitoring-config.yaml。cat <<EOF > user-workload-monitoring-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | EOF可选:输入以下命令来创建
ConfigMap对象:$ oc apply -f user-workload-monitoring-config.yaml输出示例
configmap/user-workload-monitoring-config created
8.2.3. 为用户定义的项目启用监控 复制链接链接已复制到粘贴板!
使用以下步骤为用户定义的项目启用监控。
流程
输入以下命令检查监控用户定义的项目是否正在运行:
$ oc get pods -n openshift-user-workload-monitoring输出示例
No resources found in openshift-user-workload-monitoring namespace.输入以下命令编辑
cluster-monitoring-configConfigMap:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config在
config.yaml文件中设置enableUserWorkload: true,以便在集群中为用户定义的项目启用监控:apiVersion: v1 data: config.yaml: | enableUserWorkload: true kind: ConfigMap metadata: annotations:输入以下命令保存文件,应用更改并确保适当的 pod 正在运行:
$ oc get pods -n openshift-user-workload-monitoring输出示例
NAME READY STATUS RESTARTS AGE prometheus-operator-6f96b4b8f8-gq6rl 2/2 Running 0 15s prometheus-user-workload-0 5/5 Running 1 12s prometheus-user-workload-1 5/5 Running 1 12s thanos-ruler-user-workload-0 3/3 Running 0 8s thanos-ruler-user-workload-1 3/3 Running 0 8s
8.2.4. 创建 Service 对象以公开 Red Hat Quay 指标 复制链接链接已复制到粘贴板!
使用以下步骤创建 Service 对象来公开 Red Hat Quay 指标。
流程
为 Service 对象创建 YAML 文件:
$ cat <<EOF > quay-service.yaml apiVersion: v1 kind: Service metadata: annotations: labels: quay-component: monitoring quay-operator/quayregistry: example-registry name: example-registry-quay-metrics namespace: quay-enterprise spec: ports: - name: quay-metrics port: 9091 protocol: TCP targetPort: 9091 selector: quay-component: quay-app quay-operator/quayregistry: example-registry type: ClusterIP EOF运行以下命令来创建
Service对象:$ oc apply -f quay-service.yaml输出示例
service/example-registry-quay-metrics created
8.2.5. 创建 ServiceMonitor 对象 复制链接链接已复制到粘贴板!
使用以下步骤配置 OpenShift Monitoring,以通过创建 ServiceMonitor 资源来提取指标。
流程
为
ServiceMonitor资源创建 YAML 文件:$ cat <<EOF > quay-service-monitor.yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: quay-operator/quayregistry: example-registry name: example-registry-quay-metrics-monitor namespace: quay-enterprise spec: endpoints: - port: quay-metrics namespaceSelector: any: true selector: matchLabels: quay-component: monitoring EOF运行以下命令来创建
ServiceMonitor资源:$ oc apply -f quay-service-monitor.yaml输出示例
servicemonitor.monitoring.coreos.com/example-registry-quay-metrics-monitor created
8.2.6. 查看 OpenShift Container Platform 中的指标 复制链接链接已复制到粘贴板!
您可以在 Monitoring → Metrics 下的 OpenShift Container Platform 控制台中访问指标。在 Expression 字段中,输入 quay_ 以查看可用指标列表:
例如,如果您将用户添加到 registry 中,请选择 quay-users_rows 指标:
8.3. 调整受管存储的大小 复制链接链接已复制到粘贴板!
Red Hat Quay Operator 在创建 NooBaa 对象(50 Gib)时,使用 Red Hat OpenShift Data Foundation (ODF)提供的默认值创建默认对象存储。
扩展 NooBaa 对象存储的方法有两种:
- 您可以调整现有持久性卷声明(PVC)的大小。
- 您可以在新存储池中添加更多 PVC。
扩展 CSI 卷只是一个技术预览功能。如需更多信息,请参阅 https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.6/html/storage/expanding-persistent-volumes。
8.3.1. 重新定义 NooBaa PVC 的大小 复制链接链接已复制到粘贴板!
使用以下步骤重新定义 NooBaa PVC 的大小。
流程
- 登录到 OpenShift Container Platform 控制台并选择 Storage → Persistent Volume Claims。
-
选择名为
noobaa-default-backing-store-noobaa-pvcbang 的PersistentVolumeClaim。 - 在 Action 菜单中,选择 Expand PVC。
- 输入持久性卷声明的新大小,然后选择 Expand。
几分钟后(取决于 PVC 的大小),扩展的大小应反映在 PVC 的 Capacity 字段中。
8.4. 自定义默认 Operator 镜像 复制链接链接已复制到粘贴板!
在某些情况下,覆盖 Red Hat Quay Operator 使用的默认镜像可能会很有用。这可以通过在 Red Hat Quay Operator ClusterServiceVersion 中设置一个或多个环境变量来完成。
在生产环境 Red Hat Quay 环境中不支持使用此机制,我们强烈建议用于开发/测试目的。在 Red Hat Quay Operator 中使用非默认镜像时,您的部署无法正常工作。
8.4.1. 环境变量 复制链接链接已复制到粘贴板!
Red Hat Quay Operator 中使用以下环境变量来覆盖组件镜像:
| 环境变量 | 组件 |
|
|
|
|
|
|
|
|
|
|
|
|
覆盖的镜像 必须被 清单(@sha256:)引用,而不是通过 tag (:latest)引用。
8.4.2. 将覆盖应用到正在运行的 Operator 复制链接链接已复制到粘贴板!
当通过 Operator Lifecycle Manager (OLM) 在集群中安装 Red Hat Quay Operator 时,受管组件容器镜像可以通过修改 ClusterServiceVersion 对象轻松覆盖。
使用以下步骤将覆盖应用到正在运行的 Operator。
流程
ClusterServiceVersion对象是集群中正在运行的 Operator 的 OLM 表示。使用 Kubernetes UI 或kubectl/ocCLI 工具查找 Red Hat Quay Operator 的ClusterServiceVersion。例如:$ oc get clusterserviceversions -n <your-namespace>使用 UI、
oc edit或其他方法,修改 Red Hat QuayClusterServiceVersion,使其包含上面概述的环境变量以指向覆盖镜像:json Path :
spec.install.spec.deployments[0].spec.template.spec.containers[0].env- name: RELATED_IMAGE_COMPONENT_QUAY value: quay.io/projectquay/quay@sha256:c35f5af964431673f4ff5c9e90bdf45f19e38b8742b5903d41c10cc7f6339a6d - name: RELATED_IMAGE_COMPONENT_CLAIR value: quay.io/projectquay/clair@sha256:70c99feceb4c0973540d22e740659cd8d616775d3ad1c1698ddf71d0221f3ce6 - name: RELATED_IMAGE_COMPONENT_POSTGRES value: centos/postgresql-10-centos7@sha256:de1560cb35e5ec643e7b3a772ebaac8e3a7a2a8e8271d9e91ff023539b4dfb33 - name: RELATED_IMAGE_COMPONENT_REDIS value: centos/redis-32-centos7@sha256:06dbb609484330ec6be6090109f1fa16e936afcf975d1cbc5fff3e6c7cae7542
请注意,这在 Operator 级别完成,因此每个 QuayRegistry 都将使用这些相同的覆盖进行部署。
8.5. AWS S3 CloudFront 复制链接链接已复制到粘贴板!
如果您使用 AWS S3 Cloudfront 进行后端 registry 存储,请使用以下步骤。
流程
输入以下命令指定 registry 密钥:
$ oc create secret generic --from-file config.yaml=./config_awss3cloudfront.yaml --from-file default-cloudfront-signing-key.pem=./default-cloudfront-signing-key.pem test-config-bundle
8.6. 高级 Clair 配置 复制链接链接已复制到粘贴板!
使用以下部分中的步骤配置高级 Clair 设置。
8.6.1. 非受管 Clair 配置 复制链接链接已复制到粘贴板!
Red Hat Quay 用户可以使用 Red Hat Quay OpenShift Container Platform Operator 运行非受管 Clair 配置。此功能允许用户创建非受管 Clair 数据库,或者在没有非受管数据库的情况下运行其自定义 Clair 配置。
非受管 Clair 数据库允许 Red Hat Quay Operator 在地理复制环境中工作,其中多个 Operator 实例必须与同一数据库通信。当用户需要集群外的高可用性(HA) Clair 数据库时,也可以使用非受管 Clair 数据库。
8.6.1.1. 使用非受管 Clair 数据库运行自定义 Clair 配置 复制链接链接已复制到粘贴板!
使用以下步骤将 Clair 数据库设置为 unmanaged。
流程
在 Quay Operator 中,将
QuayRegistry自定义资源的clairpostgres组件设置为managed: false:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: quay370 spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: clairpostgres managed: false
8.6.1.2. 使用非受管 Clair 数据库配置自定义 Clair 数据库 复制链接链接已复制到粘贴板!
用于 OpenShift Container Platform 的 Red Hat Quay Operator 允许用户提供自己的 Clair 数据库。
使用以下步骤创建自定义 Clair 数据库。
以下流程使用 SSL/TLS 认证设置 Clair。要查看没有使用 SSL/TSL 认证设置 Clair 的类似流程,请参阅"使用受管 Clair 配置自定义 Clair 数据库"。
流程
输入以下命令创建一个包含
clair-config.yaml的 Quay 配置捆绑包 secret:$ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secretClair
config.yaml文件示例indexer: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca layer_scan_concurrency: 6 migrations: true scanlock_retry: 11 log_level: debug matcher: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca migrations: true metrics: name: prometheus notifier: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca migrations: true注意-
数据库证书挂载到
clair-config.yaml中的 Clair 应用程序 pod 上的/run/certs/rds-ca-2019-root.pem下。它必须在配置clair-config.yaml时指定。 -
Clair on OpenShift config 中包括了一个
clair-config.yaml示例。
-
数据库证书挂载到
将
clair-config.yaml文件添加到捆绑包 secret 中,例如:apiVersion: v1 kind: Secret metadata: name: config-bundle-secret namespace: quay-enterprise data: config.yaml: <base64 encoded Quay config> clair-config.yaml: <base64 encoded Clair config> extra_ca_cert_<name>: <base64 encoded ca cert> ssl.crt: <base64 encoded SSL certificate> ssl.key: <base64 encoded SSL private key>注意更新后,提供的
clair-config.yaml文件会挂载到 Clair pod 中。不提供的任何字段都会使用 Clair 配置模块自动填充默认值。您可以点击 Build History 页面中的提交或运行
oc get pods -n <namespace> 来检查 Clair pod 的状态。例如:$ oc get pods -n <namespace>输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
8.6.2. 使用受管 Clair 数据库运行自定义 Clair 配置 复制链接链接已复制到粘贴板!
在某些情况下,用户可能希望使用受管 Clair 数据库运行自定义 Clair 配置。这在以下情况中很有用:
- 当用户想要禁用特定的更新器资源时。
当用户在断开连接的环境中运行 Red Hat Quay 时。有关在断开连接的环境中运行 Clair 的更多信息,请参阅 在 air-gapped OpenShift 集群中配置对 Clair 数据库的访问。
注意-
如果您在断开连接的环境中运行 Red Hat Quay,则
clair-config.yaml的airgap参数必须设置为true。 - 如果您在断开连接的环境中运行 Red Hat Quay,您应该禁用所有更新器组件。
-
如果您在断开连接的环境中运行 Red Hat Quay,则
8.6.2.1. 将 Clair 数据库设置为 managed 复制链接链接已复制到粘贴板!
使用以下步骤将 Clair 数据库设置为 managed。
流程
在 Quay Operator 中,将
QuayRegistry自定义资源的clairpostgres组件设置为managed: true:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: quay370 spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: clairpostgres managed: true
8.6.2.2. 使用受管 Clair 配置配置自定义 Clair 数据库 复制链接链接已复制到粘贴板!
用于 OpenShift Container Platform 的 Red Hat Quay Operator 允许用户提供自己的 Clair 数据库。
使用以下步骤创建自定义 Clair 数据库。
流程
输入以下命令创建一个包含
clair-config.yaml的 Quay 配置捆绑包 secret:$ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml config-bundle-secretClair
config.yaml文件示例indexer: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable layer_scan_concurrency: 6 migrations: true scanlock_retry: 11 log_level: debug matcher: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable migrations: true metrics: name: prometheus notifier: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable migrations: true注意-
数据库证书挂载到
clair-config.yaml中的 Clair 应用程序 pod 上的/run/certs/rds-ca-2019-root.pem下。它必须在配置clair-config.yaml时指定。 -
Clair on OpenShift config 中包括了一个
clair-config.yaml示例。
-
数据库证书挂载到
将
clair-config.yaml文件添加到捆绑包 secret 中,例如:apiVersion: v1 kind: Secret metadata: name: config-bundle-secret namespace: quay-enterprise data: config.yaml: <base64 encoded Quay config> clair-config.yaml: <base64 encoded Clair config>注意-
更新后,提供的
clair-config.yaml文件会挂载到 Clair pod 中。不提供的任何字段都会使用 Clair 配置模块自动填充默认值。
-
更新后,提供的
您可以点击 Build History 页面中的提交或运行
oc get pods -n <namespace> 来检查 Clair pod 的状态。例如:$ oc get pods -n <namespace>输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
8.6.3. 在断开连接的环境中的 Clair 复制链接链接已复制到粘贴板!
Clair 使用一组名为 updaters 的组件来处理从各种漏洞数据库获取和解析数据。默认设置更新程序,以直接从互联网拉取漏洞数据,并可以立即使用。但是,一些用户可能需要 Red Hat Quay 在断开连接的环境中运行,或者在没有直接访问互联网的环境中运行。Clair 通过处理不同类型的更新工作流来支持断开连接的环境。这可以通过使用 clairctl 命令行界面工具来工作,该工具使用开放主机从互联网获取更新器数据,安全地将数据传送到隔离的主机上,然后将隔离主机上的更新器数据变为 Clair。
使用本指南在断开连接的环境中部署 Clair。
目前,Clair 增强数据是 CVSS 数据。目前在断开连接的环境中不支持增强数据。
有关 Clair updaters 的更多信息,请参阅"Clair updaters"。
8.6.3.1. 在断开连接的 OpenShift Container Platform 集群中设置 Clair 复制链接链接已复制到粘贴板!
使用以下步骤在断开连接的 OpenShift Container Platform 集群中设置 OpenShift Container Platform 置备的 Clair pod。
使用以下步骤为 OpenShift Container Platform 部署安装 clairctl CLI 工具。
流程
输入以下命令在 OpenShift Container Platform 集群中为 Clair 部署安装
clairctl程序:$ oc -n quay-enterprise exec example-registry-clair-app-64dd48f866-6ptgw -- cat /usr/bin/clairctl > clairctl注意未正式,可以下载
clairctl工具设置
clairctl文件的权限,以便用户可以由用户执行并运行,例如:$ chmod u+x ./clairctl
使用以下步骤检索和解码 OpenShift Container Platform 上置备的 Clair 实例的配置 secret。
先决条件
-
已安装
clairctl命令行工具工具。
流程
输入以下命令来检索和解码配置 secret,然后将其保存到 Clair 配置 YAML 中:
$ oc get secret -n quay-enterprise example-registry-clair-config-secret -o "jsonpath={$.data['config\.yaml']}" | base64 -d > clair-config.yaml更新
clair-config.yaml文件,以便disable_updaters和airgap参数设置为true,例如:--- indexer: airgap: true --- matcher: disable_updaters: true ---
8.6.3.1.3. 从连接的 Clair 实例导出更新程序捆绑包 复制链接链接已复制到粘贴板!
使用以下步骤从可访问互联网的 Clair 实例导出 updaters 捆绑包。
先决条件
-
已安装
clairctl命令行工具工具。 -
您已检索并解码了 Clair 配置 secret,并将其保存到 Clair
config.yaml文件中。 -
在 Clair
config.yaml文件中,disable_updaters和airgap参数被设置为true。
流程
从可访问互联网的 Clair 实例中,使用
clairctlCLI 工具和配置文件导出更新器捆绑包。例如:$ ./clairctl --config ./config.yaml export-updaters updates.gz
使用以下步骤在断开连接的 OpenShift Container Platform 集群中配置对 Clair 数据库的访问。
先决条件
-
已安装
clairctl命令行工具工具。 -
您已检索并解码了 Clair 配置 secret,并将其保存到 Clair
config.yaml文件中。 -
在 Clair
config.yaml文件中,disable_updaters和airgap参数被设置为true。 - 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。
流程
使用
ocCLI 工具确定 Clair 数据库服务,例如:$ oc get svc -n quay-enterprise输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...转发 Clair 数据库端口,使其可从本地机器访问。例如:
$ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432更新 Clair
config.yaml文件,例如:indexer: connstring: host=localhost port=5432 dbname=postgres user=postgres password=postgres sslmode=disable1 scanlock_retry: 10 layer_scan_concurrency: 5 migrations: true scanner: repo: rhel-repository-scanner:2 repo2cpe_mapping_file: /data/cpe-map.json package: rhel_containerscanner:3 name2repos_mapping_file: /data/repo-map.json
使用以下步骤将更新器捆绑包导入到断开连接的 OpenShift Container Platform 集群中。
先决条件
-
已安装
clairctl命令行工具工具。 -
您已检索并解码了 Clair 配置 secret,并将其保存到 Clair
config.yaml文件中。 -
在 Clair
config.yaml文件中,disable_updaters和airgap参数被设置为true。 - 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。
- 您已将更新器捆绑包传送到断开连接的环境中。
流程
使用
clairctlCLI 工具将 updaters 捆绑包导入到 OpenShift Container Platform 部署的 Clair 数据库中。例如:$ ./clairctl --config ./clair-config.yaml import-updaters updates.gz
使用以下步骤为断开连接的 OpenShift Container Platform 集群设置 Clair 的自我管理部署。
使用以下步骤在 OpenShift Container Platform 上安装 clairctl CLI 工具进行自我管理的 Clair 部署。
流程
使用
podman cp命令为自我管理的 Clair 部署安装clairctl程序,例如:$ sudo podman cp clairv4:/usr/bin/clairctl ./clairctl设置
clairctl文件的权限,以便用户可以由用户执行并运行,例如:$ chmod u+x ./clairctl
使用以下步骤为断开连接的 OpenShift Container Platform 集群部署自我管理的 Clair 容器。
先决条件
-
已安装
clairctl命令行工具工具。
流程
为您的 Clair 配置文件创建一个文件夹,例如:
$ mkdir /etc/clairv4/config/创建一个 Clair 配置文件,将
disable_updaters参数设置为true,例如:--- indexer: airgap: true --- matcher: disable_updaters: true ---使用容器镜像启动 Clair,从您创建的文件中挂载在配置中:
$ sudo podman run -it --rm --name clairv4 \ -p 8081:8081 -p 8088:8088 \ -e CLAIR_CONF=/clair/config.yaml \ -e CLAIR_MODE=combo \ -v /etc/clairv4/config:/clair:Z \ registry.redhat.io/quay/clair-rhel8:v3.8.15
8.6.3.2.3. 从连接的 Clair 实例导出更新程序捆绑包 复制链接链接已复制到粘贴板!
使用以下步骤从可访问互联网的 Clair 实例导出 updaters 捆绑包。
先决条件
-
已安装
clairctl命令行工具工具。 - 您已部署了 Clair。
-
在 Clair
config.yaml文件中,disable_updaters和airgap参数被设置为true。
流程
从可访问互联网的 Clair 实例中,使用
clairctlCLI 工具和配置文件导出更新器捆绑包。例如:$ ./clairctl --config ./config.yaml export-updaters updates.gz
使用以下步骤在断开连接的 OpenShift Container Platform 集群中配置对 Clair 数据库的访问。
先决条件
-
已安装
clairctl命令行工具工具。 - 您已部署了 Clair。
-
在 Clair
config.yaml文件中,disable_updaters和airgap参数被设置为true。 - 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。
流程
使用
ocCLI 工具确定 Clair 数据库服务,例如:$ oc get svc -n quay-enterprise输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...转发 Clair 数据库端口,使其可从本地机器访问。例如:
$ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432更新 Clair
config.yaml文件,例如:indexer: connstring: host=localhost port=5432 dbname=postgres user=postgres password=postgres sslmode=disable1 scanlock_retry: 10 layer_scan_concurrency: 5 migrations: true scanner: repo: rhel-repository-scanner:2 repo2cpe_mapping_file: /data/cpe-map.json package: rhel_containerscanner:3 name2repos_mapping_file: /data/repo-map.json
使用以下步骤将更新器捆绑包导入到断开连接的 OpenShift Container Platform 集群中。
先决条件
-
已安装
clairctl命令行工具工具。 - 您已部署了 Clair。
-
在 Clair
config.yaml文件中,disable_updaters和airgap参数被设置为true。 - 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。
- 您已将更新器捆绑包传送到断开连接的环境中。
流程
使用
clairctlCLI 工具将 updaters 捆绑包导入到 OpenShift Container Platform 部署的 Clair 数据库中:$ ./clairctl --config ./clair-config.yaml import-updaters updates.gz
8.6.4. 启用 Clair CRDA 复制链接链接已复制到粘贴板!
Java 扫描取决于一个公共的、红帽提供的 API 服务,称为 Code Ready Dependency Analytics (CRDA)。CRDA 仅适用于互联网访问,默认情况下不启用。
使用以下步骤将 CRDA 服务与自定义 API 密钥集成,并为 Java 和 Python 扫描启用 CRDA。
先决条件
- Red Hat Quay 3.7 或更高版本
流程
- 提交 API 密钥请求表单,以获取特定于 Quay 的 CRDA 远程匹配器。
在
clair-config.yaml文件中设置 CRDA 配置:matchers: config: crda: url: https://gw.api.openshift.io/api/v2/ key: <CRDA_API_KEY>1 source: <QUAY_SERVER_HOSTNAME>2 - 1
- 在此处从 API 密钥请求表单插入特定于 Quay 的 CRDA 远程匹配程序。
- 2
- Quay 服务器的主机名。
8.6.5. 将存储库映射到通用产品枚举信息 复制链接链接已复制到粘贴板!
Clair 的 Red Hat Enterprise Linux (RHEL)扫描程序依赖于通用产品枚举(CPE)文件,将 RPM 软件包映射到对应的安全数据,以生成匹配的结果。这些文件归产品安全所有,每天更新。
必须允许 cpe 文件或访问该文件,以便扫描程序能够正确处理 RPM 软件包。如果文件不存在,则不会扫描容器镜像中安装的 RPM 软件包。
| CPE | 到 JSON 映射文件的链接 |
|---|---|
|
| |
|
|
除了将 CVE 信息上传到用于断开连接的 Clair 安装的数据库外,还必须在本地提供映射文件:
- 对于独立的 Red Hat Quay 和 Clair 部署,映射文件必须加载到 Clair pod 中。
-
对于 OpenShift Container Platform 和 Clair 部署的 Red Hat Quay Operator 部署,您必须将 Clair 组件设置为
unamanged。然后,必须手动部署 Clair,设置配置来加载映射文件的本地副本。
8.6.5.1. 将存储库映射到通用产品枚举示例配置 复制链接链接已复制到粘贴板!
在 Clair 配置中使用 repo2cpe_mapping_file 和 name2repos_mapping_file 字段,使其包含 cp JSON 映射文件。例如:
indexer:
scanner:
repo:
rhel-repository-scanner:
repo2cpe_mapping_file: /data/cpe-map.json
package:
rhel_containerscanner:
name2repos_mapping_file: /data/repo-map.json
如需更多信息,请参阅如何准确将 OVAL 安全数据与已安装的 RPM 匹配。
第 9 章 Red Hat Quay 构建增强 复制链接链接已复制到粘贴板!
在 Red Hat Quay 3.7 之前,Quay 在 Pod 启动的虚拟机中运行 podman 命令。在虚拟平台上运行构建需要启用嵌套虚拟化,这在 Red Hat Enterprise Linux 或 OpenShift Container Platform 中并不好。因此,构建必须在裸机集群上运行,这效率较低。
在 Red Hat Quay 3.7 中,通过添加不包含虚拟机层的额外构建选项来删除运行构建所需的裸机约束。因此,构建可以在虚拟平台上运行。也可以使用向后兼容来运行以前的构建配置。
9.1. Red Hat Quay 增强的构建架构 复制链接链接已复制到粘贴板!
前面的镜像显示了增强的构建功能的预期设计流和架构:
在这个版本中,构建管理器首先会创建作业对象。然后,作业对象 使用 quay-builder-image 创建容器集。quay-builder-image 将包含 quay-builder 二进制文件 和 Podman 服务。创建的 pod 作为非特权 运行。然后,quay-builder 二进制文件 在通信状态和从构建管理器检索构建信息的同时构建镜像。
9.2. Red Hat Quay 构建限制 复制链接链接已复制到粘贴板!
在非特权上下文中在 Red Hat Quay 中运行构建可能会导致一些在以前的构建策略下工作的命令失败。尝试更改构建策略可能会导致构建出现性能问题和可靠性。
在容器中运行构建不会与使用虚拟机的隔离相同。更改构建环境也可能会导致之前工作的构建失败。
本节中的步骤解释了如何使用 OpenShift Container Platform 创建 Red Hat Quay 虚拟构建器环境。
9.3.1. OpenShift Container Platform TLS 组件 复制链接链接已复制到粘贴板!
tls 组件允许您控制 TLS 配置。
当 TLS 组件由 Operator 管理时,Red Hat Quay 3.8 不支持构建器。
如果将 tls 设置为 unmanaged,则提供自己的 ssl.cert 和 ssl.key 文件。在本实例中,如果希望集群支持构建器,您必须将 Quay 路由和构建器路由名称添加到证书中的 SAN 列表中,或使用通配符。
要添加构建器路由,请使用以下格式:
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
构建器需要 SSL/TLS 证书。有关 SSL/TLS 证书的更多信息,请参阅 向 Red Hat Quay 容器添加 TLS 证书。
如果使用 Amazon Web Service (AWS) S3 存储,您必须在运行构建器前修改 AWS 控制台中的存储桶。如需所需参数,请参阅以下部分的"修改 AWS S3 存储桶"。
9.3.2.1. 为虚拟构建器准备 OpenShift Container Platform 复制链接链接已复制到粘贴板!
使用以下步骤为 Red Hat Quay 虚拟构建器准备 OpenShift Container Platform。
- 此流程假设您已置备集群并运行 Quay Operator。
- 此流程是在 OpenShift Container Platform 上设置虚拟命名空间。
流程
- 使用集群管理员帐户登录到您的 Red Hat Quay 集群。
运行以下命令,创建一个新项目,其中将运行您的虚拟构建器(如
virtual-builders):$ oc new-project virtual-builders输入以下命令,在将用于运行构建的项目中创建一个
ServiceAccount:$ oc create sa -n virtual-builders quay-builder为创建的服务帐户提供编辑权限,以便它可以运行构建:
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder输入以下命令授予 Quay builder
anyuid scc权限:$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder注意此操作需要集群管理员特权。这是必要的,因为构建器必须以 Podman 用户身份运行,才能使非特权或无根构建正常工作。
获取 Quay builder 服务帐户的令牌。
如果使用 OpenShift Container Platform 4.10 或更早的版本,请输入以下命令:
oc sa get-token -n virtual-builders quay-builder如果使用 OpenShift Container Platform 4.11 或更高版本,请输入以下命令:
$ oc create token quay-builder -n virtual-builders输出示例
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
输入以下命令确定构建器路由:
$ oc get route -n quay-enterprise输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...输入以下命令使用 .crt 扩展生成自签名 SSL/TlS 证书:
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver输出示例
ca.crt输入以下命令将
ca.crt文件重命名为extra_ca_cert_build_cluster.crt:$ mv ca.crt extra_ca_cert_build_cluster.crt在控制台中找到配置捆绑包的 secret,然后选择 Actions → Edit Secret 并添加适当的构建程序配置:
FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - <superusername> FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: True BUILDMAN_HOSTNAME: <sample_build_route>1 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 36002 ORCHESTRATOR: REDIS_HOST: <sample_redis_hostname>3 REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: <sample_builder_namespace>4 SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 BUILDER_CONTAINER_IMAGE: <sample_builder_container_image>5 # Kubernetes resource options K8S_API_SERVER: <sample_k8s_api_server>6 K8S_API_TLS_CA: <sample_crt_file>7 VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 300m8 CONTAINER_CPU_LIMITS: 1G9 CONTAINER_MEMORY_REQUEST: 300m10 CONTAINER_CPU_REQUEST: 1G11 NODE_SELECTOR_LABEL_KEY: "" NODE_SELECTOR_LABEL_VALUE: "" SERVICE_ACCOUNT_NAME: <sample_service_account_name> SERVICE_ACCOUNT_TOKEN: <sample_account_token>12 - 1
- 构建路由是通过使用 OpenShift Operator 命名空间的名称运行
oc get route -n获取的。在路由末尾必须提供一个端口,它应使用以下格式:[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443。 - 2
- 如果 设置了 job
_REGISTRATION_TIMEOUT参数过低,您可能会收到以下错误:failed to register job to build manager: rpc error: code = Unauthenticated desc = Invalid build token: Signature has expired。建议将此参数设置为至少 240。 - 3
- 如果您的 Redis 主机有密码或 SSL/TLS 证书,您必须相应地更新。
- 4
- 设置为与虚拟构建器命名空间的名称匹配,如
virtual-builders。 - 5
- 对于早期访问,
BUILDER_CONTAINER_IMAGE目前为quay.io/projectquay/quay-builder:3.7.0-rc.2。请注意,这可能会在早期访问窗口内有所变化。如果发生这种情况,则会提醒客户。 - 6
K8S_API_SERVER通过运行oc cluster-info获取。- 7
- 您必须手动创建并添加自定义 CA 证书,如
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt。 - 8
- 如果未指定,则默认为
5120Mi。 - 9
- 对于虚拟构建,您必须确保集群中有足够的资源。如果未指定,则默认为
1000m。 - 10
- 如果未指定,则默认为
3968Mi。 - 11
- 如果未指定,则默认为
500m。 - 12
- 运行
oc create sa时获取。
配置示例
FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: True BUILDMAN_HOSTNAME: example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org:443 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 3600 ORCHESTRATOR: REDIS_HOST: example-registry-quay-redis REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: virtual-builders SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:3.7.0-rc.2 # Kubernetes resource options K8S_API_SERVER: api.docs.quayteam.org:6443 K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 1G CONTAINER_CPU_LIMITS: 1080m CONTAINER_MEMORY_REQUEST: 1G CONTAINER_CPU_REQUEST: 580m NODE_SELECTOR_LABEL_KEY: "" NODE_SELECTOR_LABEL_VALUE: "" SERVICE_ACCOUNT_NAME: quay-builder SERVICE_ACCOUNT_TOKEN: "eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ"
9.3.2.2. 手动添加 SSL/TLS 证书 复制链接链接已复制到粘贴板!
由于配置工具的已知问题,您必须手动添加自定义 SSL/TLS 证书来正确运行构建器。使用以下步骤手动添加自定义 SSL/TLS 证书。
有关创建 SSL/TLS 证书的更多信息,请参阅在 Red Hat Quay 容器中添加 TLS 证书。
9.3.2.2.1. 创建和签名的证书 复制链接链接已复制到粘贴板!
使用以下步骤创建和签署 SSL/TLS 证书。
流程
创建证书颁发机构并签署证书。如需更多信息,请参阅创建证书颁发机构和签署证书。
openssl.cnf
[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = example-registry-quay-quay-enterprise.apps.docs.quayteam.org1 DNS.2 = example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org2 示例命令
$ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem $ openssl genrsa -out ssl.key 2048 $ openssl req -new -key ssl.key -out ssl.csr $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
9.3.2.2.2. 将 TLS 设置为非受管 复制链接链接已复制到粘贴板!
使用以下步骤将 king:tls 设置为 unmanaged。
流程
在 Red Hat Quay Registry YAML 中,将
kind: tls设置为managed: false:- kind: tls managed: false在 Events 页面中,更改会被阻断,直到您设置适当的
config.yaml文件。例如:- lastTransitionTime: '2022-03-28T12:56:49Z' lastUpdateTime: '2022-03-28T12:56:49Z' message: >- required component `tls` marked as unmanaged, but `configBundleSecret` is missing necessary fields reason: ConfigInvalid status: 'True'
9.3.2.2.3. 创建临时 secret 复制链接链接已复制到粘贴板!
使用以下步骤为 CA 证书创建临时 secret。
流程
在默认命名空间中为 CA 证书创建一个 secret:
$ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crt在 default 命名空间中为
ssl.key和ssl.cert文件创建一个 secret:$ oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
9.3.2.2.4. 将 secret 数据复制到配置 YAML 中 复制链接链接已复制到粘贴板!
使用以下步骤将 secret 数据复制到 config.yaml 文件中。
流程
- 在控制台 UI 中找到位于 Workloads → Secrets 的新 secret。
对于每个 secret,找到 YAML 视图:
kind: Secret apiVersion: v1 metadata: name: temp-crt namespace: quay-enterprise uid: a4818adb-8e21-443a-a8db-f334ace9f6d0 resourceVersion: '9087855' creationTimestamp: '2022-03-28T13:05:30Z' ... data: extra_ca_cert_build_cluster.crt: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJBZ0l.... type: Opaquekind: Secret apiVersion: v1 metadata: name: quay-config-ssl namespace: quay-enterprise uid: 4f5ae352-17d8-4e2d-89a2-143a3280783c resourceVersion: '9090567' creationTimestamp: '2022-03-28T13:10:34Z' ... data: ssl.cert: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVaakNDQTA2Z0F3SUJBZ0lVT... ssl.key: >- LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc... type: Opaque在 UI 中找到 Red Hat Quay registry 配置捆绑包的 secret,或运行以下命令从命令行:
$ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterprise在 OpenShift Container Platform 控制台中,选择配置捆绑包 secret 的 YAML 选项卡,并从您创建的两个 secret 中添加数据:
kind: Secret apiVersion: v1 metadata: name: init-config-bundle-secret namespace: quay-enterprise uid: 4724aca5-bff0-406a-9162-ccb1972a27c1 resourceVersion: '4383160' creationTimestamp: '2022-03-22T12:35:59Z' ... data: config.yaml: >- RkVBVFVSRV9VU0VSX0lOSVRJQUxJWkU6IHRydWUKQlJ... extra_ca_cert_build_cluster.crt: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJBZ0ldw.... ssl.cert: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVaakNDQTA2Z0F3SUJBZ0lVT... ssl.key: >- LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc... type: Opaque- 点击 Save。
输入以下命令查看 pod 是否重启:
$ oc get pods -n quay-enterprise输出示例
NAME READY STATUS RESTARTS AGE ... example-registry-quay-app-6786987b99-vgg2v 0/1 ContainerCreating 0 2s example-registry-quay-app-7975d4889f-q7tvl 1/1 Running 0 5d21h example-registry-quay-app-7975d4889f-zn8bb 1/1 Running 0 5d21h example-registry-quay-app-upgrade-lswsn 0/1 Completed 0 6d1h example-registry-quay-config-editor-77847fc4f5-nsbbv 0/1 ContainerCreating 0 2s example-registry-quay-config-editor-c6c4d9ccd-2mwg2 1/1 Running 0 5d21h example-registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h example-registry-quay-mirror-764d7b68d9-jmlkk 1/1 Terminating 0 5d21h example-registry-quay-mirror-764d7b68d9-jqzwg 1/1 Terminating 0 5d21h example-registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21h重新配置 Red Hat Quay registry 后,输入以下命令检查 Red Hat Quay app pod 是否在运行:
$ oc get pods -n quay-enterprise输出示例
example-registry-quay-app-6786987b99-sz6kb 1/1 Running 0 7m45s example-registry-quay-app-6786987b99-vgg2v 1/1 Running 0 9m1s example-registry-quay-app-upgrade-lswsn 0/1 Completed 0 6d1h example-registry-quay-config-editor-77847fc4f5-nsbbv 1/1 Running 0 9m1s example-registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h example-registry-quay-mirror-758fc68ff7-5wxlp 1/1 Running 0 8m29s example-registry-quay-mirror-758fc68ff7-lbl82 1/1 Running 0 8m29s example-registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21h在浏览器中,访问 registry 端点并验证证书是否已正确更新。例如:
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
9.3.2.3. 使用 UI 创建构建触发器 复制链接链接已复制到粘贴板!
使用以下步骤使用 UI 创建构建触发器。
流程
- 登录您的 Red Hat Quay 存储库。
-
单击 Create New Repository 并创建新 registry,如
testrepo。 在 Repositories 页面中,点导航窗格中的 Builds 选项卡。或者,直接使用对应的 URL:
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds重要在某些情况下,构建器可能会遇到解析主机名的问题。此问题可能与作业对象上的
dnsPolicy设置为default相关。目前,这个问题还没有临时解决方案。它将在以后的 Red Hat Quay 版本中解决。- 点 Create Build Trigger → Custom Git Repository Push。
输入用于克隆 Git 存储库的 HTTPS 或 SSH 风格 URL,然后单击 Continue。例如:
https://github.com/gabriel-rh/actions_test.git- 使用分支或标签名称检查 Tag 清单,然后单击 Continue。
-
在调用触发器时输入要构建的 Dockerfile 位置,例如
/Dockerfile并点 Continue。 -
输入 Docker 构建的上下文位置,如
/,然后单击 Continue。 - 如果保证,请创建一个受限帐户。否则,点 Continue。
- 点 Continue 验证参数。
- 在 Builds 页面中,点 Trigger Name 的 Options 图标,然后点 Run Trigger Now。
- 从 Git 存储库输入提交 SHA,然后单击 Start Build。
您可以通过单击 Build History 页面中的提交或运行
oc get pods -n virtual-builders来检查构建的状态。例如:$ oc get pods -n virtual-builders输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s$ oc get pods -n virtual-builders输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9s$ oc get pods -n virtual-builders输出示例
No resources found in virtual-builders namespace.构建完成后,您可以在导航窗格中的 Tags 下检查标签的状态。
注意使用早期访问权限时,构建的完整构建日志和时间戳当前不可用。
9.3.2.4. 修改 AWS S3 存储桶 复制链接链接已复制到粘贴板!
如果使用 AWS S3 存储,则必须在运行构建器前在 AWS 控制台中更改存储桶。
流程
- 登录到位于 s3.console.aws.com 的 AWS 控制台。
-
在搜索栏中,搜索
S3,然后单击 S3。 -
点存储桶的名称,如
myawsbucket。 - 单击权限选项卡。
在跨原始资源共享(CORS) 下,包括以下参数:
[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 }, { "AllowedHeaders": [ "Content-Type", "x-amz-acl", "origin" ], "AllowedMethods": [ "PUT" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]
9.3.2.5. 修改 Google Cloud Platform 对象存储桶 复制链接链接已复制到粘贴板!
使用以下步骤为虚拟构建器配置跨原始资源共享(CORS)。
如果没有 CORS 配置,上传构建 Dockerfile 会失败。
流程
使用以下引用来创建 JSON 文件,以满足您的特定 CORS 需求。例如:
$ cat gcp_cors.json输出示例
[ { "origin": ["*"], "method": ["GET"], "responseHeader": ["Authorization"], "maxAgeSeconds": 3600 }, { "origin": ["*"], "method": ["PUT"], "responseHeader": [ "Content-Type", "x-goog-acl", "origin"], "maxAgeSeconds": 3600 } ]输入以下命令更新 GCP 存储桶:
$ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json输出示例
Updating Completed 1您可以运行以下命令来显示 GCP 存储桶的更新 CORS 配置:
$ gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"输出示例
cors: - maxAgeSeconds: 3600 method: - GET origin: - '*' responseHeader: - Authorization - maxAgeSeconds: 3600 method: - PUT origin: - '*' responseHeader: - Content-Type - x-goog-acl - origin
第 10 章 geo-replication 复制链接链接已复制到粘贴板!
从客户端或用户的角度来看,geo-replication 允许多个地理分布式 Red Hat Quay 部署作为单个 registry 工作。它在全局分布式 Red Hat Quay 设置中显著提高推送和拉取性能。镜像数据在后台异步复制,且对客户端进行透明故障转移和重定向。
使用 Red Hat Quay 3.7 时,独立和 Operator 部署中支持部署带有区域复制的 Red Hat Quay。
10.1. 地理复制功能 复制链接链接已复制到粘贴板!
- 配置 geo-replication 时,容器镜像推送将写入该 Red Hat Quay 实例的首选存储引擎。这通常是区域内最接近的存储后端。
- 初始推送后,镜像数据将在后台复制到其他存储引擎。
- 复制位置列表是可配置的,它们可以不同存储后端。
- 镜像拉取将始终使用最接近的可用存储引擎,以最大化拉取性能。
- 如果复制还没有完成,则拉取将使用源存储后端。
10.2. 地区复制要求和限制 复制链接链接已复制到粘贴板!
- 在地理复制设置中,Red Hat Quay 要求所有区域都可以读取和写入所有其他区域对象存储。对象存储必须可以被所有其他区域访问。
- 如果一个地理复制站点的对象存储系统失败,该站点的 Red Hat Quay 部署必须被关闭,以便客户端由全局负载均衡器重定向到具有完整存储系统的剩余站点。否则,客户端将遇到拉取和推送失败。
- Red Hat Quay 没有内部感知连接的对象存储系统的健康状态或可用性。如果一个站点的对象存储系统不可用,则其余站点或站点没有自动重定向到剩余的存储系统或系统。
- 地理复制(geo-replication)是异步的。如果一个站点永久丢失,则已存储在该站点的对象存储系统中,但在失败时还没有复制到剩余的站点的数据会丢失。
因此,所有元数据和 Red Hat Quay 配置都会在所有区域间共享。
地理复制不会复制数据库。如果出现停机,启用了地理复制功能的 Red Hat Quay 不会切换到另一个数据库。
- 单个 Redis 缓存在整个 Red Hat Quay 设置间共享,需要被所有 Red Hat Quay pod 访问。
-
所有区域应当使用相同的配置,但存储后端除外,这些后端可以使用
QUAY_DISTRIBUTED_STORAGE_PREFERENCE环境变量明确进行配置。 - geo-replication 需要每个地区中的对象存储。它不适用于本地存储。
- 每个区域必须能够访问每个区域中的每个存储引擎,这需要一个网络路径。
- 或者,可以使用存储代理选项。
- 整个存储后端(如所有 blob)都会被复制。通过相反,存储库镜像可以限制为存储库或镜像。
- 所有 Red Hat Quay 实例都必须通过负载均衡器共享相同的入口点。
- 所有 Red Hat Quay 实例都必须具有相同的超级用户集合,因为它们在通用配置文件中定义。
-
geo-replication 需要将 Clair 配置设置为
unmanaged。非受管 Clair 数据库允许 Red Hat Quay Operator 在地理复制环境中工作,其中 Red Hat Quay Operator 的多个实例必须与同一数据库通信。如需更多信息,请参阅高级 Clair 配置。 - geo-Replication 需要 SSL/TSL 证书和密钥。如需更多信息,请参阅使用 SSL/TSL 保护到 Red Hat Quay 的连接。
如果无法满足上述要求,您应该使用两个或多个不同的 Red Hat Quay 部署,并利用存储库镜像功能。
10.3. 使用 Red Hat Quay Operator 进行 geo-replication 复制链接链接已复制到粘贴板!
在上例中,Red Hat Quay Operator 部署在两个独立区域,带有通用数据库和通用 Redis 实例。本地化镜像存储在每个区域中提供,镜像拉取是从最接近的可用存储引擎提供的。容器镜像推送被写入 Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。
因为 Operator 现在单独管理 Clair 安全扫描程序及其数据库,所以可以利用 geo-replication 设置,以便不管理 Clair 数据库。相反,会使用外部共享数据库。Red Hat Quay 和 Clair 支持 PostgreSQL 的多个供应商和供应商,可在 Red Hat Quay 3.x 测试列表中找到。另外,Operator 还支持可注入部署的自定义 Clair 配置,允许用户使用外部数据库的连接凭证配置 Clair。
10.3.1. 在 Openshift 中设置 geo-replication 复制链接链接已复制到粘贴板!
流程
部署 Quay postgres 实例:
- 登录到数据库
为 Quay 创建数据库
CREATE DATABASE quay;在数据库中启用 pg_trm 扩展
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
部署 Redis 实例:
注意- 如果云供应商有自己的服务,则可能无法部署 Redis 实例。
- 如果您使用 Builders,则需要部署 Redis 实例。
- 为 Redis 部署虚拟机
- 确保可以从运行 Quay 的集群访问它
- 必须打开端口 6379/TCP
在实例内运行 Redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
创建两个对象存储后端,每个集群一个
理想情况下,一个对象存储存储桶接近于第 1 个集群(主设备),其它接近第 2 个集群(次要)。
- 使用相同的配置捆绑包部署集群,使用环境变量覆盖来为单个集群选择适当的存储后端
- 配置负载均衡器,为集群提供单一入口点
10.3.1.1. 配置 复制链接链接已复制到粘贴板!
config.yaml 文件在集群间共享,其中包含通用 PostgreSQL、Redis 和存储后端的详情:
config.yaml
SERVER_HOSTNAME: <georep.quayteam.org or any other name>
DB_CONNECTION_ARGS:
autorollback: true
threadlocals: true
DB_URI: postgresql://postgres:password@10.19.0.1:5432/quay
BUILDLOGS_REDIS:
host: 10.19.0.2
port: 6379
USER_EVENTS_REDIS:
host: 10.19.0.2
port: 6379
DISTRIBUTED_STORAGE_CONFIG:
usstorage:
- GoogleCloudStorage
- access_key: GOOGQGPGVMASAAMQABCDEFG
bucket_name: georep-test-bucket-0
secret_key: AYWfEaxX/u84XRA2vUX5C987654321
storage_path: /quaygcp
eustorage:
- GoogleCloudStorage
- access_key: GOOGQGPGVMASAAMQWERTYUIOP
bucket_name: georep-test-bucket-1
secret_key: AYWfEaxX/u84XRA2vUX5Cuj12345678
storage_path: /quaygcp
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS:
- usstorage
- eustorage
DISTRIBUTED_STORAGE_PREFERENCE:
- usstorage
- eustorage
FEATURE_STORAGE_REPLICATION: true
创建 configBundleSecret :
$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
在每个集群中,设置 configBundleSecret 并使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量覆盖来为该集群配置适当的存储:
两个部署之间的 config.yaml 文件都必须匹配。如果更改一个集群,还必须在另一个集群中更改它。
美国集群
apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
name: example-registry
namespace: quay-enterprise
spec:
configBundleSecret: georep-config-bundle
components:
- kind: objectstorage
managed: false
- kind: route
managed: true
- kind: tls
managed: false
- kind: postgres
managed: false
- kind: clairpostgres
managed: false
- kind: redis
managed: false
- kind: quay
managed: true
overrides:
env:
- name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
value: usstorage
- kind: mirror
managed: true
overrides:
env:
- name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
value: usstorage
+
由于 TLS 是非受管的,并且路由被管理,所以您必须使用 config 工具或直接在配置捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由。
俄罗斯集群
apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
name: example-registry
namespace: quay-enterprise
spec:
configBundleSecret: georep-config-bundle
components:
- kind: objectstorage
managed: false
- kind: route
managed: true
- kind: tls
managed: false
- kind: postgres
managed: false
- kind: clairpostgres
managed: false
- kind: redis
managed: false
- kind: quay
managed: true
overrides:
env:
- name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
value: eustorage
- kind: mirror
managed: true
overrides:
env:
- name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE
value: eustorage
+
由于 TLS 是非受管的,并且路由被管理,所以您必须使用 config 工具或直接在配置捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由。
10.3.2. 用于区域复制的混合存储 复制链接链接已复制到粘贴板!
Red Hat Quay geo-replication 支持使用不同的和多个复制目标,例如在公共云上使用 AWS S3 存储并在内部使用 Ceph 存储。这导致从所有 Red Hat Quay pod 和集群节点授予对所有存储后端的访问权限的关键要求。因此,建议您使用以下方法:
- 用于防止内部存储的可见性的 VPN,或者
- 令牌对,仅允许访问 Red Hat Quay 使用的指定存储桶
这会导致 Red Hat Quay 的公共云实例可以访问内部存储,但网络将被加密、受保护的,并使用 ACL,从而满足安全要求。
如果您无法实现这些安全措施,最好部署两个不同的 Red Hat Quay registry,并使用存储库镜像作为 geo-replication 的替代选择。
10.4. 升级 Red Hat Quay Operator 的 geo-replication 部署 复制链接链接已复制到粘贴板!
使用以下步骤升级地理复制的 Red Hat Quay Operator。
- 当将 geo-replicated Red Hat Quay Operator 部署升级到下一个 y-stream 版本(例如,Red Hat Quay 3.7 → Red Hat Quay 3.8),您必须在升级前停止操作。
- 故障时间从一个 y-stream 版本升级到下一个版本会间歇性。
- 在升级前,强烈建议您备份 Red Hat Quay Operator 部署。
此流程假设您在三个(或更多)系统上运行 Red Hat Quay Operator。对于此过程,我们将假设三个名为 System A、 System B 和 System C 的系统。系统 A 将充当部署 Red Hat Quay Operator 的主要系统。
在 System B 和 System C 上,缩减您的 Red Hat Quay Operator 部署。这可以通过禁用自动扩展并覆盖 Red Hat Quay、镜像 worker 和 Clair 的副本计数(如果被管理)来实现。使用以下
quayregistry.yaml文件作为参考:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: registry namespace: ns spec: components: … - kind: horizontalpodautoscaler managed: false1 - kind: quay managed: true overrides:2 replicas: 0 - kind: clair managed: true overrides: replicas: 0 - kind: mirror managed: true overrides: replicas: 0 …注意您必须保留在 System A 上运行的 Red Hat Quay Operator。不要更新 System A 上的
quayregistry.yaml文件。等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod 消失。输入以下命令检查其状态:oc get pods -n <quay-namespace>输出示例
quay-operator.v3.7.1-6f9d859bd-p5ftc 1/1 Running 0 12m quayregistry-clair-postgres-7487f5bd86-xnxpr 1/1 Running 1 (12m ago) 12m quayregistry-quay-app-upgrade-xq2v6 0/1 Completed 0 12m quayregistry-quay-config-editor-6dfdcfc44f-hlvwm 1/1 Running 0 73s quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12m- 在 System A 上,启动 Red Hat Quay Operator 升级到最新的 y-stream 版本。这是手动过程。有关升级安装的 Operator 的更多信息,请参阅 升级已安装的 Operator。如需有关 Red Hat Quay 升级路径的更多信息,请参阅升级 Red Hat Quay Operator。
-
安装新的 Red Hat Quay Operator 后,集群上所需的升级会自动完成。之后,新的 Red Hat Quay pod 会使用最新的 y-stream 版本启动。另外,还会调度并启动新的
Quaypod。 通过进入到 Red Hat Quay UI 确认更新是否正常工作:
在 OpenShift 控制台中,导航到 Operators → Installed Operators,然后点击 Registry Endpoint 链接。
重要在 Red Hat Quay UI 可用前,不要执行以下步骤。在系统 A 上提供 UI 前,不要升级 System B 和 System C 上的 Red Hat Quay Operator。
确认更新在 System A 上正常工作后,在 System B 和 System C 上启动 Red Hat Quay Operator。Operator 升级会导致升级的 Red Hat Quay 安装,并重启 pod。
注意因为数据库架构对于新的 y-stream 安装正确,System B 和 System C 上的新 pod 应该快速启动。
第 11 章 备份和恢复由 Red Hat Quay Operator 管理的 Red Hat Quay 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 上由 Red Hat Quay Operator 管理时,请使用本节中的内容备份和恢复 Red Hat Quay。
11.1. 备份 Red Hat Quay 复制链接链接已复制到粘贴板!
此流程描述了如何使用 Red Hat Quay Operator 创建在 OpenShift Container Platform 上部署的 Red Hat Quay 备份
先决条件
-
使用 Red Hat Quay Operator 在 OpenShift Container Platform 上部署健康的 Red Hat Quay 部署(状态条件
Available被设置为true)。 -
组件
quay、postgres和objectstorage设置为managed: true -
如果组件
明确设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay Operator v3.7 或更高版本开始)
如果您的部署包含部分非受管数据库或存储组件,且您使用 Postgres 或 S3 兼容对象存储的外部服务来运行 Red Hat Quay 部署,则必须引用服务提供商或厂商文档来创建数据的备份。您可以参阅本指南中描述的工具作为如何备份外部 Postgres 数据库或对象存储的起点。
11.1.1. Red Hat Quay 配置备份 复制链接链接已复制到粘贴板!
通过导出
QuayRegistry自定义资源来备份它:$ oc get quayregistry <quay-registry-name> -n <quay-namespace> -o yaml > quay-registry.yaml编辑生成的
quayregistry.yaml并删除 status 部分和以下 metadata 字段:metadata.creationTimestamp metadata.finalizers metadata.generation metadata.resourceVersion metadata.uid备份受管密钥 secret:
注意如果您正在运行早于 Red Hat Quay 3.7.0 的版本,可以跳过这一步。首次部署 Quay 时会自动生成一些 secret。它们存储在
QuayRegistry资源命名空间中名为 <quay-registry-name>-quay-registry-managed-secret-keys的 secret 中。$ oc get secret -n <quay-namespace> <quay-registry-name>-quay-registry-managed-secret-keys -o yaml > managed-secret-keys.yaml编辑生成的
managed-secret-keys.yaml文件,并删除条目metadata.ownerReferences。您的managed-secret-keys.yaml文件应类似如下:apiVersion: v1 kind: Secret type: Opaque metadata: name: <quayname>-quay-registry-managed-secret-keys namespace: <quay-namespace> data: CONFIG_EDITOR_PW: <redacted> DATABASE_SECRET_KEY: <redacted> DB_ROOT_PW: <redacted> DB_URI: <redacted> SECRET_KEY: <redacted> SECURITY_SCANNER_V4_PSK: <redacted>data属性下的所有信息都应保持不变。备份当前的 Quay 配置:
$ oc get secret -n <quay-namespace> $(oc get quayregistry <quay-registry-name> -n <quay-namespace> -o jsonpath='{.spec.configBundleSecret}') -o yaml > config-bundle.yaml备份挂载到 Quay pod 中的
/conf/stack/config.yaml文件:$ oc exec -it quay-pod-name -- cat /conf/stack/config.yaml > quay-config.yaml
11.1.2. 缩减 Red Hat Quay 部署 复制链接链接已复制到粘贴板!
此步骤需要创建 Red Hat Quay 部署状态的一致性备份。不要省略这一步,包括 Postgres 数据库和/或 S3 兼容对象存储由外部服务提供的(由 Operator 管理)的设置中。
对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Red Hat Quay、mirror worker 和 Clair 的副本数来缩减 Red Hat Quay 部署。您的
QuayRegistry资源应类似如下:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: registry namespace: ns spec: components: … - kind: horizontalpodautoscaler managed: false1 - kind: quay managed: true overrides:2 replicas: 0 - kind: clair managed: true overrides: replicas: 0 - kind: mirror managed: true overrides: replicas: 0 …对于 Operator 版本 3.6 及更早版本 :首先缩减 Red Hat Quay Operator,然后扩展受管 Red Hat Quay 资源,从而缩减 Red Hat Quay 部署:
$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace> $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace> $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace> $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod (取决于您设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:$ oc get pods -n <quay-namespace>输出示例:
$ oc get pod quay-operator.v3.7.1-6f9d859bd-p5ftc 1/1 Running 0 12m quayregistry-clair-postgres-7487f5bd86-xnxpr 1/1 Running 1 (12m ago) 12m quayregistry-quay-app-upgrade-xq2v6 0/1 Completed 0 12m quayregistry-quay-config-editor-6dfdcfc44f-hlvwm 1/1 Running 0 73s quayregistry-quay-database-859d5445ff-cqthr 1/1 Running 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12m
11.1.3. Red Hat Quay 管理的数据库备份 复制链接链接已复制到粘贴板!
如果您的 Red Hat Quay 部署配置了外部(未协调) Postgres 数据库,请参阅您的厂商文档来了解如何创建这些数据库的一致性备份。
识别 Quay PostgreSQL pod 名称:
$ oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'输出示例:
quayregistry-quay-database-59f54bb7-58xs7获取 Quay 数据库名称:
$ oc -n <quay-namespace> rsh $(oc get pod -l app=quay -o NAME -n <quay-namespace> |head -n 1) cat /conf/stack/config.yaml|awk -F"/" '/^DB_URI/ {print $4}' quayregistry-quay-database下载备份数据库:
$ oc exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database > backup.sql
11.1.3.1. Red Hat Quay 管理的对象存储备份 复制链接链接已复制到粘贴板!
本节中的说明适用于以下配置:
- 独立多云对象网关配置
- OpenShift Data Foundation 存储要求 Red Hat Quay Operator 通过 ObjectStorageBucketClaim API 从中置备 S3 对象存储存储桶
如果您的 Red Hat Quay 部署配置了外部(未授权)对象存储,请参阅您的厂商文档来了解如何创建 Quay 存储桶内容副本。
解码并导出
AWS_ACCESS_KEY_ID:$ export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)解码并导出
AWS_SECRET_ACCESS_KEY_ID:$ export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)创建新目录并将所有 Blob 复制到其中:
$ mkdir blobs $ aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage -o jsonpath='{.spec.host}') s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}') ./blobs
11.1.4. 扩展 Red Hat Quay 部署备份 复制链接链接已复制到粘贴板!
对于 Operator 版本 3.7 及更新版本: 根据需要重新启用自动扩展(如果需要),并删除 Quay、镜像 worker 和 Clair 的副本覆盖来扩展 Red Hat Quay 部署。您的
QuayRegistry资源应类似如下:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: registry namespace: ns spec: components: … - kind: horizontalpodautoscaler managed: true1 - kind: quay2 managed: true - kind: clair managed: true - kind: mirror managed: true …对于 Operator 版本 3.6 及更早版本: 再次扩展 Red Hat Quay Operator,扩展 Red Hat Quay 部署:
$ oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> | awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>检查 Red Hat Quay 部署的状态:
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>输出示例:
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: ... name: registry namespace: <quay-namespace> ... spec: ... status: - lastTransitionTime: '2022-06-20T05:31:17Z' lastUpdateTime: '2022-06-20T17:31:13Z' message: All components reporting as healthy reason: HealthChecksPassing status: 'True' type: Available
11.2. 恢复 Red Hat Quay 复制链接链接已复制到粘贴板!
当 Red Hat Quay Operator 管理数据库时,这个过程用于恢复 Red Hat Quay。它应在执行 Red Hat Quay registry 备份后执行。如需更多信息,请参阅 备份 Red Hat Quay。
先决条件
- Red Hat Quay 使用 Red Hat Quay Operator 在 OpenShift Container Platform 上部署。
- 按照 Backing up Red Hat Quay 部分的说明创建了由 Red Hat Quay Operator 管理的 Red Hat Quay 配置的备份
- 您的 Red Hat Quay 数据库已被备份。
- Red Hat Quay 使用的对象存储桶已被备份。
-
组件
quay、postgres和objectstorage设置为managed: true -
如果将组件
冲突设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay Operator v3.7 或更高版本开始) - 在 OpenShift Container Platform 集群上的目标命名空间中没有由 Red Hat Quay Operator 管理的 Red Hat Quay 部署
如果您的部署包含部分非受管数据库或存储组件,且您使用 Postgres 或 S3 兼容对象存储的外部服务来运行 Red Hat Quay 部署,您必须在恢复 Red Hat Quay 之前从备份中恢复其数据。
11.2.1. 从备份中恢复 Red Hat Quay 及其配置 复制链接链接已复制到粘贴板!
这些说明假设您遵循 备份 Red Hat Quay 指南中的过程,并使用相同的名称创建备份文件。
从备份中恢复备份的 Red Hat Quay 配置和生成的密钥:
$ oc create -f ./config-bundle.yaml $ oc create -f ./managed-secret-keys.yaml重要如果您接收到错误
Error from server (AlreadyExists): error when creating "./config-bundle.yaml": secrets "config-bundle-secret" already exists,您需要使用$ oc delete Secret config-bundle-secret -n <quay-namespace>删除现有的资源,并使用$ oc create -f ./config-bundle.yaml重新创建它。恢复
QuayRegistry自定义资源:$ oc create -f ./quay-registry.yaml检查 Red Hat Quay 部署的状态并等待它可用:
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>
11.2.2. 缩减 Red Hat Quay 部署 复制链接链接已复制到粘贴板!
对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Quay、镜像 worker 和 Clair (如果受管)的副本数来缩减 Red Hat Quay 部署。您的
QuayRegistry资源应类似如下:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: registry namespace: ns spec: components: … - kind: horizontalpodautoscaler managed: false1 - kind: quay managed: true overrides:2 replicas: 0 - kind: clair managed: true overrides: replicas: 0 - kind: mirror managed: true overrides: replicas: 0 …对于 Operator 版本 3.6 及更早版本: 首先缩减 Red Hat Quay Operator,然后扩展受管 Red Hat Quay 资源来缩减 Red Hat Quay 部署:
$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace> $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace> $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace> $ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod (取决于您设置为由 Operator 管理的组件)消失。您可以运行以下命令来检查其状态:$ oc get pods -n <quay-namespace>输出示例:
registry-quay-config-editor-77847fc4f5-nsbbv 1/1 Running 0 9m1s registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21h
11.2.3. 恢复 Red Hat Quay 数据库 复制链接链接已复制到粘贴板!
识别您的 Quay 数据库 pod:
$ oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'输出示例:
quayregistry-quay-database-59f54bb7-58xs7通过从本地环境复制到 pod 来上传备份:
$ oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sql为数据库打开远程终端:
$ oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssm输入 psql :
bash-4.4$ psql您可以运行以下命令来列出数据库:
postgres=# \l输出示例:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ----------------------------+----------------------------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | quayregistry-quay-database | quayregistry-quay-database | UTF8 | en_US.utf8 | en_US.utf8 |丢弃数据库:
postgres=# DROP DATABASE "quayregistry-quay-database";输出示例:
DROP DATABASE退出 postgres CLI 以重新输入 bash-4.4:
\q将 PostgreSQL 数据库重定向到备份数据库:
sh-4.4$ psql < /tmp/backup.sql退出 bash:
sh-4.4$ exit
11.2.4. 恢复 Red Hat Quay 对象存储数据 复制链接链接已复制到粘贴板!
导出
AWS_ACCESS_KEY_ID:$ export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)导出
AWS_SECRET_ACCESS_KEY:$ export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)运行以下命令,将所有 Blob 上传到存储桶:
$ aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage -o jsonpath='{.spec.host}') ./blobs s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}')
11.2.5. 扩展 Red Hat Quay 部署 复制链接链接已复制到粘贴板!
对于 Operator 版本 3.7 及更新版本: 根据需要重新启用自动扩展(如果需要),并删除 Quay、镜像 worker 和 Clair 的副本覆盖来扩展 Red Hat Quay 部署。您的
QuayRegistry资源应类似如下:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: registry namespace: ns spec: components: … - kind: horizontalpodautoscaler managed: true1 - kind: quay2 managed: true - kind: clair managed: true - kind: mirror managed: true …对于 Operator 版本 3.6 及更早版本: 再次扩展 Red Hat Quay Operator,扩展 Red Hat Quay 部署:
$ oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> | awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>检查 Red Hat Quay 部署的状态:
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>输出示例:
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: ... name: registry namespace: <quay-namespace> ... spec: ... status: - lastTransitionTime: '2022-06-20T05:31:17Z' lastUpdateTime: '2022-06-20T17:31:13Z' message: All components reporting as healthy reason: HealthChecksPassing status: 'True' type: Available
第 12 章 在 Red Hat Quay Operator 上部署 IPv6 复制链接链接已复制到粘贴板!
您的 Red Hat Quay Operator 部署现在可以在只支持 IPv6 的位置提供,如 Telco 和 Edge 环境。
有关已知限制列表,请参阅 IPv6 限制
12.1. 启用 IPv6 协议系列 复制链接链接已复制到粘贴板!
使用以下步骤在独立 Red Hat Quay 部署中启用 IPv6 支持。
先决条件
- 您已将 Red Hat Quay 更新至 3.8。
- 您的主机和容器软件平台(Docker、Podman)必须配置为支持 IPv6。
流程
在部署的
config.yaml文件中,添加FEATURE_LISTEN_IP_VERSION参数并将其设置为IPv6,例如:--- FEATURE_GOOGLE_LOGIN: false FEATURE_INVITE_ONLY_USER_CREATION: false FEATURE_LISTEN_IP_VERSION: IPv6 FEATURE_MAILING: false FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP: false ---- 启动或重启您的 Red Hat Quay 部署。
输入以下命令检查您的部署是否侦听 IPv6:
$ curl <quay_endpoint>/health/instance {"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}
在部署的 config.yaml 中启用 IPv6 后,所有 Red Hat Quay 功能都可以正常使用,只要您的环境被配置为使用 IPv6,且不受 IPv6 和双栈限制的影响。
如果您的环境配置为 IPv4,但 FEATURE_LISTEN_IP_VERSION 配置字段被设置为 IPv6,Red Hat Quay 将无法部署。
12.2. IPv6 限制 复制链接链接已复制到粘贴板!
目前,尝试使用通用 Azure Blob 存储配置配置 Red Hat Quay 部署无法在 IPv6 单堆栈环境中工作。因为 Azure Blob 存储的端点不支持 IPv6,所以这个问题还没有临时解决方案。
如需更多信息,请参阅 PROJQUAY-4433。
目前,尝试使用 Amazon S3 CloudFront 配置 Red Hat Quay 部署不适用于 IPv6 单堆栈环境。由于 Amazon S3 CloudFront 的端点不支持 IPv6,所以这个问题还没有临时解决方案。
如需更多信息,请参阅 PROJQUAY-4470。
- 目前,当在 IPv6 单堆栈环境中部署 Red Hat Quay 时,OpenShift Data Foundation (ODF)不被支持。因此,在 IPv6 环境中使用 ODF。计划在以后的 OpenShift Data Foundation 版本中修复这个限制。
- 目前,双栈(IPv4 和 IPv6)支持无法在 Red Hat Quay OpenShift Container Platform 部署中工作。当在启用了双栈支持的 OpenShift Container Platform 上部署 Red Hat Quay 3.8 时,Red Hat Quay Operator 生成的 Quay 路由只生成 IPv4 地址,而不是 IPv6 地址。因此,具有 IPv6 地址的客户端无法访问 OpenShift Container Platform 上的 Red Hat Quay 应用程序。这个限制计划在以后的 OpenShift Container Platform 版本中修复。
第 13 章 使用 Container Security Operator 扫描 pod 镜像 复制链接链接已复制到粘贴板!
Container Security Operator (CSO)是 OpenShift Container Platform 和其他 Kubernetes 平台上可用的 Clair 安全扫描程序的附加组件。使用 CSO 时,用户可以扫描与活跃 pod 关联的容器镜像以了解已知的漏洞。
没有 Red Hat Quay 和 Clair,CSO 无法正常工作。
Container Security Operator (CSO)执行以下功能:
- 监视与指定或所有命名空间上的 pod 关联的容器。
- 查询容器来自漏洞信息的容器注册表(提供了镜像的 registry 支持镜像扫描,如带有 Clair 扫描的 Red Hat Quay registry)。
-
通过 Kubernetes API 中的
ImageManifestVuln对象公开漏洞。
要查看在 Kubernetes 上安装 CSO 的说明,请从 Container Security OperatorHub.io 页面中选择 Install 按钮。
使用以下步骤下载 Container Security Operator (CSO)。
在以下步骤中,CSO 安装在 marketplace-operators 命名空间中。这允许在 OpenShift Container Platform 集群的所有命名空间中使用 CSO。
流程
- 在 OpenShift Container Platform 控制台页面中,选择 Operators → OperatorHub 并搜索 Container Security Operator。
- 选择 Container Security Operator,然后选择 Install 进入 Create Operator Subscription 页面。
- 检查设置(默认为所有命名空间和自动批准策略),然后选择 Subscribe。在 Installed Operators 屏幕中几分钟后会出现 容器安全性。
可选: 您可以将自定义证书添加到 CSO 中。在本例中,在当前目录中创建一个名为
quay.crt的证书。然后,运行以下命令将证书添加到 CSO 中:$ oc create secret generic container-security-operator-extra-certs --from-file=quay.crt -n openshift-operators注意您必须重启 Operator pod 才能使新证书生效。
导航到 Home → Dashboards。镜像 安全性 的链接显示在 status 部分,其中列出了目前发现的漏洞数量。选择链接以查看安全分类,如下图所示:
重要Container Security Operator 目前为 Red Hat Security 公告提供有问题的链接。例如,可能会提供以下链接:
https://access.redhat.com/errata/RHSA-2023:1842%20https://access.redhat.com/security/cve/CVE-2023-23916。URL 中的%20代表空格字符,但当前会将两个 URL 组合成一个不完整的 URL,例如https://access.redhat.com/errata/RHSA-2023:1842和https://access.redhat.com/security/cve/CVE-2023-23916。作为临时解决方案,您可以将每个 URL 复制到浏览器中,以导航到正确的页面。这是一个已知问题,并将在以后的 Red Hat Quay 版本中解决。对于任何检测到的安全漏洞,您可以在此时进行两个操作之一:
选择到这个漏洞的链接。您使用容器 registry、Red Hat Quay 或其他容器来自的 registry,您可以在其中查看漏洞的信息。下图显示了从 Quay.io registry 中检测到的漏洞示例:
选择 namespaces 链接以进入 ImageManifestVuln 界面,您可以在其中查看所选镜像的名称以及该镜像正在运行的所有命名空间。下图表示,特定存在安全漏洞的镜像在两个命名空间中运行:
执行此流程后,您可以了解哪些镜像存在安全漏洞,您必须执行什么操作来修复这些漏洞,以及镜像中运行的每个命名空间。知道这一点,您可以执行以下操作:
- 提醒运行镜像的用户,用户需要更正此漏洞。
通过删除启动镜像所在 pod 的部署或对象来停止镜像运行。
注意如果删除 pod,可能需要几分钟时间才能在仪表板上重置漏洞。
13.2. 通过 CLI 查询镜像漏洞 复制链接链接已复制到粘贴板!
您可以从命令行查询安全性信息。要查询检测到的漏洞,请输入:
$ oc get vuln --all-namespaces
NAMESPACE NAME AGE
default sha256.ca90... 6m56s
skynet sha256.ca90... 9m37s
要显示特定漏洞的详情,请识别其中一个漏洞,及其命名空间和 describe 选项。本例演示了一个活跃的容器,其镜像包含存在漏洞的 RPM 软件包:
$ oc describe vuln --namespace mynamespace sha256.ac50e3752...
Name: sha256.ac50e3752...
Namespace: quay-enterprise
...
Spec:
Features:
Name: nss-util
Namespace Name: centos:7
Version: 3.44.0-3.el7
Versionformat: rpm
Vulnerabilities:
Description: Network Security Services (NSS) is a set of libraries...
第 14 章 升级 Quay Operator 概述 复制链接链接已复制到粘贴板!
Quay Operator 遵循一个 同步版本方案,这意味着 Operator 的每个版本都与 Quay 版本及其管理的组件关联。QuayRegistry 自定义资源没有字段来设置要部署的 Quay 版本,Operator 仅知道如何部署所有组件的单个版本。选择此方案以确保所有组件都正常工作,并降低 Operator 的复杂性,了解如何管理 Kubernetes 上许多不同的 Quay 版本的生命周期。
14.1. Operator Lifecycle Manager 复制链接链接已复制到粘贴板!
Quay Operator 应使用 Operator Lifecycle Manager (OLM) 安装和升级。当使用默认 approvalStrategy: Automatic 创建订阅时,每当有新版本可用时,OLM 将自动升级 Quay Operator。
当 Quay Operator 通过 Operator Lifecycle Manager 安装时,可能会将其配置为支持自动或手动升级。这个选项在安装过程中显示在 Quay Operator 的 Operator Hub 页面中。它还可通过 approvalStrategy 字段在 Quay Operator Subscription 对象中找到。选择 Automatic 意味着,每次发布新 Operator 版本时,您的 Quay Operator 会自动升级。如果这不必要,则应选择 Manual 批准策略。
14.2. 升级 Quay Operator 复制链接链接已复制到粘贴板!
在 OpenShift 上升级已安装的 Operator 的标准方法,请参阅 升级已安装的 Operator。
通常,Red Hat Quay 仅支持从之前的(N-1)次版本进行升级。例如,不支持直接从 Red Hat Quay 3.0.5 升级到 3.5 的最新版本。用户必须按如下方式升级:
- 3.0.5 → 3.1.3
- 3.1.3 → 3.2.2
- 3.2.2 → 3.3.4
- 3.3.4 → 3.4.z
- 3.4.z → 3.5.z
这需要确保正确完成任何必要的数据库迁移,并在升级过程中按正确顺序完成。
在某些情况下,Red Hat Quay 支持从之前(N-2、N-3)次版本直接进行单步骤升级。这个例外是正常的、只使用次版本的次版本,升级简化了在旧版本上客户进行升级。支持以下升级路径:
- 3.3.z → 3.6.z
- 3.4.z → 3.6.z
- 3.4.z → 3.7.z
- 3.5.z → 3.7.z
- 3.7.z → 3.8.z
有关 Quay 独立部署要升级到 3.8 的用户,请参阅 独立 升级指南。
14.2.1. 升级 Quay 复制链接链接已复制到粘贴板!
要将 Quay 从一个次版本更新至下一个次版本,如 3.4 → 3.5,您需要更改 Quay Operator 的更新频道。
对于 z 流升级,如 3.4.2 → 3.4.3,更新会在安装过程中在最初选择的主频道中发布。执行 z 流升级的步骤取决于以上所述的 approvalStrategy。如果批准策略被设置为 Automatic,则 Quay Operator 将自动升级到最新的 z 流。这会导致自动的、滚动式的到较新的 z 流的 Quay 更新,几乎没有或只有非常短的停机时间。否则,在开始安装前,必须手动批准更新。
14.2.2. 有关直接从 3.3.z 或 3.4.z 升级到 3.6 的备注 复制链接链接已复制到粘贴板!
14.2.2.1. 启用边缘路由升级 复制链接链接已复制到粘贴板!
- 在以前的版本中,当运行启用了边缘路由的 Red Hat Quay 的 3.3.z 版本时,用户无法升级到 3.4.z 版本的 Red Hat Quay。这个问题已在 Red Hat Quay 3.6 发行版本中解决。
当从 3.3.z 升级到 3.6 时,如果在 Red Hat Quay 3.3.z 部署中将
tls.termination设置为none,它将改为使用 TLS 边缘终止的 HTTPS,并使用默认集群通配符证书。例如:apiVersion: redhatcop.redhat.io/v1alpha1 kind: QuayEcosystem metadata: name: quay33 spec: quay: imagePullSecretName: redhat-pull-secret enableRepoMirroring: true image: quay.io/quay/quay:v3.3.4-2 ... externalAccess: hostname: quayv33.apps.devcluster.openshift.com tls: termination: none database: ...
14.2.2.2. 使用自定义 TLS 证书/密钥对而无需 Subject Alternative Names 复制链接链接已复制到粘贴板!
从 Red Hat Quay 3.3.4 直接升级到 Red Hat Quay 3.6 时,使用其自身 TLS 证书/密钥对但没有 Subject Alternative Names (SANs) 的客户会存在一个问题。在升级到 Red Hat Quay 3.6 的过程中,部署会被阻断,来自 Quay Operator pod 日志的错误消息表示 Quay TLS 证书必须具有 SAN。
如果可能,您应该使用 SAN 中的正确主机名重新生成 TLS 证书。可能的临时解决方案包括在升级后在 quay-app、quay-upgrade 和 quay-config-editor pod 中定义环境变量,以启用 CommonName 匹配:
GODEBUG=x509ignoreCN=0
GODEBUG=x509ignoreCN=0 标志允许在没有 SAN 时将 X.509 证书上的 CommonName 字段视为主机名的传统行为。但不建议使用这个临时解决方案,因为它不会在重新部署中保留。
要在 OpenShift 的新 Red Hat Quay 部署上设置 Clair v4,强烈建议您使用 Quay Operator。默认情况下,Quay Operator 将安装和升级 Clair 部署,以及您的 Red Hat Quay 部署并自动配置 Clair。
有关在 OpenShift 中设置 Clair v4 的说明,请参阅在 Red Hat Quay OpenShift 部署上设置 Clair。
14.2.3. 从 3.3.z 升级到 3.6 时的 Swift 配置 复制链接链接已复制到粘贴板!
当从 Red Hat Quay 3.3.z 升级到 3.6.z 时,一些用户可能会收到以下错误: Switch auth v3 requires tenant_id (字符串)在 os_options 中。作为临时解决方案,您可以手动更新 DISTRIBUTED_STORAGE_CONFIG 以添加 os_options 和 tenant_id 参数:
DISTRIBUTED_STORAGE_CONFIG:
brscale:
- SwiftStorage
- auth_url: http://****/v3
auth_version: "3"
os_options:
tenant_id: ****
project_name: ocp-base
user_domain_name: Default
storage_path: /datastorage/registry
swift_container: ocp-svc-quay-ha
swift_password: *****
swift_user: *****
14.2.4. 更改 Operator 的更新频道 复制链接链接已复制到粘贴板!
已安装的 Operator 的订阅指定一个更新频道,用于跟踪和接收 Operator 的更新。要升级 Quay Operator 以开始跟踪并从更新频道接受更新,请在已安装的 Quay Operator 的 Subscription 选项卡中更改更新频道。对于带有 自动批准策略 的订阅,升级会自动开始,并可以在列出 Installed Operator 的页面中监控。
14.2.5. 手动批准待处理的 Operator 升级 复制链接链接已复制到粘贴板!
如果已安装的 Operator 的订阅设置为 Manual,则当其当前更新频道中发布新更新时,在开始安装前必须手动批准更新。如果 Quay Operator 有一个待处理的升级,这个状态将显示在 Installed Operator 列表中。在 Quay Operator 的 Subscription 选项卡中,您可以预览安装计划并查看列出可用于升级的资源。如果满意,点 Approve 并返回到列出 Installed Operators 的页面来监控升级的进度。
下图显示了 UI 中的 Subscription 选项卡,包括 更新频道、批准策略、升级状态 和 InstallPlan :
Installed Operators 列表提供当前 Quay 安装的高级概述:
14.3. 升级 QuayRegistry 复制链接链接已复制到粘贴板!
当 Quay Operator 启动时,它会立即查找任何 QuayRegistries,它可在它配置为监视的命名空间中找到。找到时,会使用以下逻辑:
-
如果未设置
status.currentVersion,请正常协调。 -
如果
status.currentVersion等于 Operator 版本,请正常协调。 -
如果
status.currentVersion不等于 Operator 版本,请检查是否可以升级它。如果它可以执行升级任务,并在完成后将status.currentVersion设置为 Operator 的版本。如果无法升级,请返回错误,并只保留QuayRegistry及其部署的 Kubernetes 对象。
14.4. 升级 QuayEcosystem 复制链接链接已复制到粘贴板!
从以前的 Operator 版本支持升级,该 Operator 将 QuayEcosystem API 用于有限的配置集合。为确保迁移不会意外发生,需要将特殊标签应用到 QuayEcosystem,以便迁移它。将创建一个新的 QuayRegistry 以供 Operator 管理,但旧的 QuayEcosystem 将保留下来,直到手动删除为止,以确保在出现错误时回滚并仍然可以访问 Quay。要将现有的 QuayEcosystem 迁移到新的 QuayRegistry,请按照以下步骤执行:
将
"quay-operator/migrate": "true"添加到QuayEcosystem的metadata.labels中。$ oc edit quayecosystem <quayecosystemname>metadata: labels: quay-operator/migrate: "true"-
等待与
QuayEcosystem相同的metadata.name创建QuayRegistry。QuayEcosystem将标记为标签"quay-operator/migration-complete": "true"。 -
设置了新
QuayRegistry的status.registryEndpoint后,访问 Quay 并确认所有数据和设置已被成功迁移。 -
当您确定所有内容可以正常工作时,您可以删除
QuayEcosystem和 Kubernetes 垃圾回收会清理所有旧资源。
14.4.1. 恢复 QuayEcosystem 升级 复制链接链接已复制到粘贴板!
如果在从 QuayEcosystem 升级到 QuayRegistry 时出现错误,请按照以下步骤恢复回使用 QuayEcosystem :
使用 UI 或
kubectl删除QuayRegistry:$ kubectl delete -n <namespace> quayregistry <quayecosystem-name>-
如果使用
Route提供外部访问,将Route更改为指回原始的Service(使用 UI 或kubectl)。
如果您的 QuayEcosystem 管理 Postgres 数据库,升级过程会将您的数据迁移到由升级的 Operator 管理的新 Postgres 数据库。旧数据库不会被更改或删除,但迁移后,Quay 将不再使用它。如果在数据迁移过程中出现问题,升级过程会退出,建议您继续将数据库作为非受管组件使用。
14.4.2. 支持的升级 QuayEcosystem 配置 复制链接链接已复制到粘贴板!
如果迁移 QuayEcosystem 组件失败或不受支持,则 Quay Operator 会在日志中报告错误和 status.conditions。所有非受管组件都应成功迁移,因为不需要采用 Kubernetes 资源,并且 Quay 的 config.yaml 中已提供了所有必要的值。
数据库
不支持临时数据库(必须设置volumeSize 字段)。
Redis
不需要特殊要求。
外部访问
自动迁移只支持 passthrough Route 访问。其他方法需要手动迁移。
-
没有自定义主机名的
LoadBalancer:当QuayEcosystem使用标签"quay-operator/migration-complete": "true"标记后,在删除QuayEcosystem前需要从现存的Service中删除metadata.ownerReferences字段,这可以防止 Kubernetes 对Service进行垃圾回收并并删除负载均衡器。一个新的Service将被创建,带有metadata.name格式<QuayEcosystem-name>-quay-app。编辑现有Service的spec.selector,使其与新Service的spec.selector匹配,以便进入旧负载均衡器端点的流量现在会被定向到新的 pod。旧的Service将会被您管理; Quay Operator 将不再管理它。 -
带有自定义主机名的
LoadBalancer/NodePort/Ingress:将创建一个类型为LoadBalancer的新的Service,带有metadata.name格式<QuayEcosystem-name>-quay-app。将您的 DNS 设置更改为指向由新Service提供的status.loadBalancer端点。
Clair
不需要特殊要求。
对象存储
QuayEcosystem 没有受管对象存储组件,因此对象存储始终被标记为非受管组件。不支持本地存储。
存储库镜像
不需要特殊要求。
其他资源
- 如需有关 Red Hat Quay Operator 的更多详细信息,请参阅上游 quay-operator 项目。