升级 Red Hat Quay

Red Hat Quay 3

升级 Red Hat Quay

Red Hat OpenShift Documentation Team

摘要

升级 Red Hat Quay

第 1 章 升级概述

Red Hat Quay 的升级步骤取决于您使用的安装类型。

Red Hat Quay Operator 提供了部署和管理 Red Hat Quay 集群的简单方法。这是在 OpenShift 中部署 Red Hat Quay 的首选步骤。

Red Hat Quay Operator 应该使用 Operator Lifecycle Manager (OLM) 升级,如"使用 Quay Operator 升级 Quay"一节中所述。

升级概念验证或高可用安装 Red Hat Quay 和 Clair 的步骤包括在 "Standalone upgrade" 部分。

第 2 章 升级 Red Hat Quay Operator 概述

注意

目前,IBM Power 和 IBM Z 不支持升级 Red Hat Quay Operator。

Red Hat Quay Operator 遵循一个 同步的版本 方案,这意味着每个 Operator 版本都绑定到 Red Hat Quay 的版本及其管理的组件。QuayRegistry 自定义资源中没有字段,它设置要部署的 Red Hat Quay 版本 ; Operator 只能部署所有组件的单一版本。选择这个方案来确保所有组件都可以正常工作,并降低 Operator 的复杂性,了解如何管理 Kubernetes 上不同版本的 Red Hat Quay 的生命周期。

2.1. Operator Lifecycle Manager

Red Hat Quay Operator 应使用 Operator Lifecycle Manager (OLM) 来安装和升级。当使用默认 approvalStrategy: Automatic 创建订阅时,每当有新版本可用时,OLM 将自动升级 Red Hat Quay Operator。

警告

当 Operator Lifecycle Manager 安装 Red Hat Quay Operator 时,可能会将其配置为支持自动或手动升级。这个选项在安装过程中在 Red Hat Quay Operator 的 OperatorHub 页面中显示。它还可以通过 approvalStrategy 字段在 Red Hat Quay Operator Subscription 对象中找到。选择 Automatic 意味着,当发布新的 Operator 版本时,您的 Red Hat Quay Operator 将自动升级。如果这不是理想的选择,则应选择 手动批准策略

2.2. 升级 Red Hat Quay Operator

在 OpenShift Container Platform 上升级已安装的 Operator 的标准方法包括在 升级安装的 Operator 中。

通常,Red Hat Quay 支持从以前的(N-1)次版本进行升级。例如,不支持直接从 Red Hat Quay 3.0.5 升级到最新版本的 3.5。相反,用户需要如下升级:

  1. 3.0.5 → 3.1.3
  2. 3.1.3 → 3.2.2
  3. 3.2.2 → 3.3.4
  4. 3.3.4 → 3.4.z
  5. 3.4.z → 3.5.z

这需要确保在升级过程中正确且按正确顺序执行任何必要的数据库迁移。

在某些情况下,Red Hat Quay 支持从以前的(N-2、N-3)次版本直接进行单步升级。这简化了旧版本客户的升级过程。Red Hat Quay 3 支持以下升级路径:

  • 3.7.z → 3.10.z
  • 3.8.z → 3.10.z
  • 3.9.z → 3.10.z

有关 Red Hat Quay 的 独立部署的用户,请参阅 独立升级指南

2.2.1. 升级 Red Hat Quay

要将 Red Hat Quay 从一个次版本升级到下一个次版本,如 3.9 → 3.10,您必须更改 Red Hat Quay Operator 的更新频道。

对于 z 流升级,如 3.9.1 → 3.9.2,更新会在用户最初在安装过程中选择的 major-minor 频道中发布。执行 z 流升级的步骤取决于以 上所述的批准Strategy。如果批准策略被设置为 Automatic,Red Hat Quay Operator 会自动升级到最新的 z 流。这会导致自动的、滚动 Red Hat Quay 更新到较新的 z 流,而无需停机。否则,必须手动批准更新,然后才能开始安装。

2.3. 删除 Red Hat Quay Operator 上的配置编辑器对象

config 编辑器已从 OpenShift Container Platform 部署的 Red Hat Quay Operator 中删除。因此,quay-config-editor pod 不再部署,用户无法检查配置编辑器路由的状态。另外,Config Editor Endpoint 不再在 Red Hat Quay Operator Details 页面中生成。

现有从 3.7、3.8 或 3.9 升级到 3 的 Red Hat Quay Operator 用户必须手动删除 Red Hat Quay 配置编辑器,方法是删除 pod部署路由、 服务 以及 secret 对象。

要删除 部署route、 servicesecret 对象,请使用以下步骤。

先决条件

  • 您已部署了 Red Hat Quay 版本 3.7、3.8 或 3.9。
  • 您有一个有效的 QuayRegistry 对象。

流程

  1. 输入以下命令来获取 quayregistry-quay-config-editor 路由对象:

    $ oc get route

    输出示例

    ---
    quayregistry-quay-config-editor-c866f64c4-68gtb   1/1     Running     0          49m
    ---

  2. 输入以下命令删除 quayregistry-quay-config-editor 路由对象:

    $ oc delete route quayregistry-quay-config-editor
  3. 输入以下命令来获取 quayregistry-quay-config-editor 部署对象:

    $ oc get deployment

    输出示例

    ---
    quayregistry-quay-config-editor
    ---

  4. 输入以下命令删除 quayregistry-quay-config-editor 部署对象:

    $ oc delete deployment quayregistry-quay-config-editor
  5. 输入以下命令来获取 quayregistry-quay-config-editor 服务对象:

    $ oc get svc | grep config-editor

    输出示例

    quayregistry-quay-config-editor   ClusterIP   172.30.219.194   <none>        80/TCP                              6h15m

  6. 输入以下命令删除 quayregistry-quay-config-editor 服务对象:

    $ oc delete service quayregistry-quay-config-editor
  7. 输入以下命令来获取 quayregistry-quay-config-editor-credentials secret:

    $ oc get secret | grep config-editor

    输出示例

    quayregistry-quay-config-editor-credentials-mb8kchfg92   Opaque                2       52m

  8. 输入以下命令删除 quayregistry-quay-config-editor-credentials secret:

    $ oc delete secret quayregistry-quay-config-editor-credentials-mb8kchfg92
  9. 输入以下命令来获取 quayregistry-quay-config-editor pod:

    $ $ oc get pod

    输出示例

    ---
    quayregistry-quay-config-editor-c866f64c4-68gtb   1/1     Running     0          49m
    ---

  10. 输入以下命令删除 quayregistry-quay-config-editor pod:

    $ oc delete pod quayregistry-quay-app-6bc4fbd456-8bc9c

2.3.1. 使用自定义 SSL/TLS 证书/密钥对升级,而无需 Subject Alternative Names

从 Red Hat Quay 3.3.4 直接升级到 Red Hat Quay 3.6 时,客户使用自己的 SSL/TLS 证书/密钥对没有 Subject Alternative Names (SAN)。在升级到 Red Hat Quay 3.6 时,部署会被阻止,并显示 Red Hat Quay Operator pod 日志中的错误消息,表示 Red Hat Quay SSL/TLS 证书必须具有 SANs。

如果可能,您应该使用 SAN 中的正确主机名重新生成 SSL/TLS 证书。一个可能的解决方法涉及在 quay-appquay-upgradequay-config-editor pod 中定义环境变量来启用 CommonName 匹配:

 GODEBUG=x509ignoreCN=0

GODEBUG=x509ignoreCN=0 标志允许在没有 SANs 时将 X.509 证书上的 CommonName 字段视为主机名。但是,我们不推荐使用这个临时解决方案,因为它不会在重新部署之间保留。

2.3.2. 更改 Red Hat Quay Operator 的更新频道

已安装的 Operator 的订阅指定一个更新频道,用于跟踪和接收 Operator 的更新。要升级 Red Hat Quay Operator 以开始跟踪并从更新频道接收更新,请更改安装的 Red Hat Quay Operator 的 Subscription 选项卡中的更新频道。对于带有 自动批准策略 的订阅,升级会自动开始,并可在列出 Installed Operators 的页面上进行监控。

2.3.3. 手动批准待处理的 Operator 升级

如果已安装的 Operator 的订阅被设置为 Manual,则当其当前更新频道中发布新更新时,在开始安装前必须手动批准更新。如果 Red Hat Quay Operator 有一个待处理的升级,这个状态将显示在 Installed Operators 列表中。在 Red Hat Quay Operator 的 Subscription 选项卡中,您可以预览安装计划并查看列出可用于升级的资源。如果满意,点 Approve 并返回到列出 Installed Operators 的页面,以监控升级的进度。

下图显示了 UI 中的 Subscription 选项卡,包括 更新频道批准策略Upgrade 状态和 InstallPlan

Subscription tab including upgrade Channel and Approval strategy

Installed Operators 列表提供当前 Quay 安装的高级别概述:

Installed Operators

2.4. 升级 QuayRegistry 资源

当 Red Hat Quay Operator 启动时,它会立即查找它被配置为监视的命名空间中找到的任何 QuayRegistries。当找到时,会使用以下逻辑:

  • 如果 status.currentVersion 没有设置,则正常协调。
  • 如果 status.currentVersion 等于 Operator 版本,请正常协调。
  • 如果 status.currentVersion 没有等于 Operator 版本,请检查是否升级它。如果可以,执行升级任务,并在完成后将 status.currentVersion 设置为 Operator 的版本。如果无法升级,返回错误并只保留 QuayRegistry 及其部署的 Kubernetes 对象。

2.5. 升级 QuayEco 系统

以前的 Operator 版本支持升级,这些 Operator 将 QuayEcosystem API 用于一组有限的配置。为确保迁移不会意外发生,需要将一个特殊的标签应用到 QuayEco 系统 供迁移。为 Operator 创建一个新的 QuayRegistry,但旧的 QuayEcosystem 将保留到手动删除,以确保您可以回滚并仍能访问 Quay,以出现问题。要将现有的 QuayEcosystem 迁移到新的 QuayRegistry,请使用以下步骤。

流程

  1. "quay-operator/migrate": "true" 添加到 QuayEcosystemmetadata.labels

    $ oc edit quayecosystem <quayecosystemname>
    metadata:
      labels:
        quay-operator/migrate: "true"
  2. 等待 QuayEcosystem 使用相同的 metadata.name 创建 QuayRegistryQuayEcosystem 将标记为标签 "quay-operator/migration-complete": "true "。
  3. 设置了新的 QuayRegistrystatus.registryEndpoint 后,访问 Red Hat Quay 并确认所有数据和设置都已成功迁移。
  4. 如果一切都正常工作,您可以删除 QuayEcosystem 和 Kubernetes 垃圾回收会清理所有旧资源。

2.5.1. 恢复 QuayEco 系统升级

如果在从 QuayEcosystem 自动升级到 QuayRegistry 时出现问题,请按照以下步骤恢复至使用 QuayEcosystem

流程

  1. 使用 UI 或 kubectl 来删除 QuayRegistry

    $ kubectl delete -n <namespace> quayregistry <quayecosystem-name>
  2. 如果使用 Route 提供外部访问,将 Route 更改为指回原始的 Service(使用 UI 或 kubectl)。
注意

如果您的 QuayEcosystem 管理 PostgreSQL 数据库,升级过程会将您的数据迁移到升级的 Operator 管理的新 PostgreSQL 数据库。旧数据库不会被更改或删除,但 Red Hat Quay 在迁移完成后将不再使用它。如果数据迁移过程中出现问题,升级过程将退出,建议您将数据库作为非受管组件继续进行。

2.5.2. 升级支持的 QuayEcosystem 配置

如果迁移 QuayEcosystem 组件失败或不受支持,Red Hat Quay Operator 会在其日志中报告错误,并处于 status.conditions 中。所有非受管组件都应成功迁移,因为不需要采用 Kubernetes 资源,并且 Red Hat 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。编辑现有 Servicespec.selector,使其与新 Servicespec.selector 匹配,以便进入旧负载均衡器端点的流量现在会被定向到新的 pod。旧的 Service 将会被您管理; Quay Operator 将不再管理它。
  • 带有自定义主机名的 LoadBalancer/NodePort/Ingress :将创建一个类型为 LoadBalancer 的新的 Service,带有 metadata.name 格式 <QuayEcosystem-name>-quay-app。将您的 DNS 设置更改为指向由新 Service 提供的 status.loadBalancer 端点。

Clair

不需要任何特殊操作。

Object Storage

QuayEcosystem 没有受管对象存储组件,因此对象存储始终标记为非受管状态。不支持本地存储。

仓库镜像

不需要任何特殊操作。

第 3 章 独立升级

通常,Red Hat Quay 支持从以前的(N-1)次版本进行升级。例如,不支持直接从 Red Hat Quay 3.0.5 升级到最新版本的 3.5。相反,用户需要如下升级:

  1. 3.0.5 → 3.1.3
  2. 3.1.3 → 3.2.2
  3. 3.2.2 → 3.3.4
  4. 3.3.4 → 3.4.z
  5. 3.4.z → 3.5.z

这需要确保在升级过程中正确且按正确顺序执行任何必要的数据库迁移。

在某些情况下,Red Hat Quay 支持从以前的(N-2、N-3)次版本直接进行单步升级。这个例外是只在次版本前的次版本中,对旧版本的用户进行升级流程。Red Hat Quay 3 支持以下升级路径:

  • 3.7.z → 3.10.z
  • 3.8.z → 3.10.z
  • 3.9.z → 3.10.z

有关希望升级 Red Hat Quay Operator 的用户,请参阅升级 Red Hat Quay Operator 概述

本文档描述了执行每个升级所需的步骤。确定您的当前版本,然后按照顺序执行步骤,从您的当前版本开始,并处理所需目标版本。

有关各个版本的功能信息,请参阅 Red Hat Quay 发行注记

手动升级的一般步骤包括以下步骤:

  1. 停止 Quay 和 Clair 容器。
  2. 备份数据库和镜像存储(可选但推荐使用)。
  3. 使用镜像的新版本启动 Clair。
  4. 等待 Clair 准备好接受连接,然后启动新版本的 Quay。

3.1. 访问镜像

Quay 3.4.0 及更新版本的镜像可从 registry.redhat.ioregistry.access.redhat.com 获取,并设置了身份验证设置,如 Red Hat Container Registry Authentication 所述。

Quay 3.3.4 及更早的版本的镜像可从 quay.io 获取,并设置了身份验证设置,如在没有 CoreOS 登录的情况下访问 Red Hat Quay 所述。

3.2. 从 3.9.z 升级到 3.10.z

3.2.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.10.3
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.3. 从 3.8.z 升级到 3.10.z

3.3.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.10.3
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.4. 从 3.7.z 升级到 3.10.z

3.4.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.10.3
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.5. 从 3.8.z 升级到 3.9.z

如果您要从 3.8.z → 3.9 升级独立 Red Hat Quay 部署,则强烈建议您从版本 10 → 13 升级 PostgreSQL。要从 10 → 13 升级 PostgreSQL,您必须关闭 PostgreSQL 10 数据库并运行迁移脚本来启动此过程。

使用以下步骤在独立 Red Hat Quay 部署中将 PostgreSQL 从 10 → 13 升级。

流程

  1. 输入以下命令缩减 Red Hat Quay 容器:

    $ sudo podman stop <quay_container_name>
  2. 可选。如果使用 Clair,输入以下命令来停止 Clair 容器:

    $ sudo podman stop <clair_container_id>
  3. 从 SCLOrg 的数据迁移流程运行 Podman 进程,允许从远程 PostgreSQL 服务器迁移数据: https://github.com/sclorg/postgresql-container/tree/master/13#data-migration

    $ sudo podman run -d --name <migration_postgresql_database> 1
      -e POSTGRESQL_MIGRATION_REMOTE_HOST=172.17.0.2 \ 2
      -e POSTGRESQL_MIGRATION_ADMIN_PASSWORD=remoteAdminP@ssword \
      -v </host/data/directory:/var/lib/pgsql/data:Z> 3
      [ OPTIONAL_CONFIGURATION_VARIABLES ]
      rhel8/postgresql-13
    1
    PostgreSQL 13 迁移数据库的名称。
    2
    您当前的 Red Hat Quay PostgreSQL 13 数据库容器 IP 地址。可以通过运行以下命令来获取: sudo podman inspect -f "{{.NetworkSettings.IPAddress}}" postgresql-quay.
    3
    您必须指定与初始 PostgreSQL 10 部署不同的卷挂载点,并修改所述目录的访问控制列表。例如:
    $ mkdir -p /host/data/directory
    $ setfacl -m u:26:-wx /host/data/directory

    这可防止数据被新容器覆盖。

  4. 可选。如果使用 Clair,请为 Clair PostgreSQL 数据库容器重复上一步。
  5. 停止 PostgreSQL 10 容器:

    $ sudo podman stop <postgresql_container_name>
  6. 完成 PostgreSQL 迁移后,使用步骤 3 中的新数据卷挂载运行 PostgreSQL 13 容器,例如: </ host/data/directory:/var/lib/postgresql/data > :

    $ sudo podman run -d --rm --name postgresql-quay \
      -e POSTGRESQL_USER=<username> \
      -e POSTGRESQL_PASSWORD=<password> \
     	-e POSTGRESQL_DATABASE=<quay_database_name> \
      -e POSTGRESQL_ADMIN_PASSWORD=<admin_password> \
      -p 5432:5432 \
      -v </host/data/directory:/var/lib/pgsql/data:Z> \
        registry.redhat.io/rhel8/postgresql-13:1-109
  7. 可选。如果使用 Clair,请为 Clair PostgreSQL 数据库容器重复上一步。
  8. 启动 Red Hat Quay 容器:

    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 --name=quay \
    -v /home/<quay_user>/quay-poc/config:/conf/stack:Z \
    -v /home/<quay_user>/quay-poc/storage:/datastorage:Z \
    {productrepo}/{quayimage}:{productminv}
  9. 可选。重启 Clair 容器,例如:

    $ sudo podman run -d --name clairv4 \
    -p 8081:8081 -p 8088:8088 \
    -e CLAIR_CONF=/clair/config.yaml \
    -e CLAIR_MODE=combo \
    registry.redhat.io/quay/clair-rhel8:v3.9.0

如需更多信息,请参阅 数据迁移

3.5.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.9.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.9.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.6. 从 3.7.z 升级到 3.9.z

如果您要从 3.7.z → 3.9 升级独立 Red Hat Quay 部署,则强烈建议您从版本 10 → 13 升级 PostgreSQL。要从 10 → 13 升级 PostgreSQL,您必须关闭 PostgreSQL 10 数据库并运行迁移脚本来启动此过程:

注意
  • 当从 Red Hat Quay 3.7 升级到 3.9 时,您可能会收到以下错误: pg_dumpall: error: query failed: ERROR: xlog flush request 1/B446CCD8 不满足 --- flushed to 1/B0013858。这个问题的一个临时解决方案是,您可以在 OpenShift Container Platform 部署中删除 quayregistry-clair-postgres-upgrade 作业,这应该解决这个问题。

3.6.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.9.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.9.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.7. 从 3.7.z 升级到 3.8.z

3.7.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.8.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.8.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.8. 从 3.6.z 升级到 3.7.z

3.8.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.7.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.7.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.9. 从 3.5.z 升级到 3.7.z

3.9.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.7.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.7.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.10. 从 3.4.z 升级到 3.7.z

3.10.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.7.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.7.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.11. 从 3.3.z 升级到 3.7.z

不支持从 3.3 升级到 Red Hat Quay 3.7。用户必须首先从 3.3 升级到 3.6,然后升级到 3.7。如需更多信息,请参阅从 3.3.z 升级到 3.6.z

3.12. 从 3.5.z 升级到 3.6.z

3.12.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.6.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.6.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.13. 从 3.4.z 升级到 3.6.z

注意

Red Hat Quay 3.6 支持从 3.4.z 直接进行单步升级。这个例外是只在次版本前的次版本中,对旧版本的用户进行升级流程。

从 3.4.z 升级到 Red Hat Quay 3.6 需要有一个数据库迁移,它不支持降级到以前的 Red Hat Quay 版本。在执行此迁移前,请备份您的数据库。

在从 3.4.z 升级时,用户还需要配置全新的 Clair v4 实例,以替换旧的 Clair v2。有关配置 Clair v4 的说明,请参阅 在非 OpenShift Red Hat Quay 部署 上设置 Clair

3.13.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.6.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.6.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.14. 从 3.3.z 升级到 3.6.z

注意

Red Hat Quay 3.6 支持从 3.3.z 进行直接的、单步升级。这个例外是只在次版本前的次版本中,对旧版本的用户进行升级流程。

从 3.3.z 升级到 Red Hat Quay 3.6.z 需要有一个数据库迁移,它不支持降级到以前的 Red Hat Quay 版本。在执行此迁移前,请备份您的数据库。

从 3.3.z 升级时,用户还需要配置全新的 Clair v4 实例来取代旧的 Clair v2。有关配置 Clair v4 的说明,请参阅 在非 OpenShift Red Hat Quay 部署 上设置 Clair

3.14.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.6.0
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.6.0
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110

3.14.2. 从 3.3.z 升级到 3.6 时 Swift 配置

当从 Red Hat Quay 3.3.z 升级到 3.6.z 时,一些用户可能会收到以下错误: Switch auth v3 需要 os_options 中的 tenant_id(字符串)。作为临时解决方案,您可以手动更新 DISTRIBUTED_STORAGE_CONFIG 以添加 os_optionstenant_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: *****

3.15. 从 3.4.z 升级到 3.5.7

3.15.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.5.7
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110)

3.16. 从 3.3.z 升级到 3.4.6

升级到 Quay 3.4 需要数据库迁移,它不支持降级到之前的 Quay 版本。在执行此迁移前,请备份您的数据库。

3.16.1. 目标镜像

  • quay : registry.redhat.io/quay/quay-rhel8:v3.4.6
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql : registry.redhat.io/rhel8/postgresql-13:1-109
  • redis : registry.redhat.io/rhel8/redis-6:1-110)

3.17. 从 3.2.z 升级到 3.3.4

3.17.1. 目标镜像

  • quay : quay.io/redhat/quay:v3.3.4
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql: rhscl/postgresql-96-rhel7
  • Redis: registry.access.redhat.com/rhscl/redis-32-rhel7

3.18. 从 3.1.z 升级到 3.2.2

在集群运行任何 Red Hat Quay 3.1.z 版本后,要把集群升级到 3.2.2,您必须关闭整个集群,并在使用 3.2.2 版本重新启用前对配置进行小的更改。

警告

在此流程中设置 DATABASE_SECRET_KEY 的值后,请勿更改它。如果您这样做,则现有机器人帐户、API 令牌等无法再使用。您必须创建新的机器人帐户和 API 令牌,才能与 Quay 搭配使用。

  1. 从服务中使用 Red Hat Quay 集群中的所有主机。
  2. 生成一些随机数据,以用作数据库 secret 密钥。例如:

    $ openssl rand -hex 48
    2d023adb9c477305348490aa0fd9c
  3. config.yaml 文件添加新的 DATABASE_SECRET_KEY 字段。例如:

    DATABASE_SECRET_KEY: "2d023adb9c477305348490aa0fd9c"
    注意

    对于 OpenShift 安装,config.yaml 文件存储为 secret。

  4. 启动一个 Quay 容器以完成从 3.2.2 的迁移。
  5. 迁移完成后,确保所有节点上都具有相同的 config.yaml,并在这些节点上启动新的 quay 3.2.2 服务。
  6. 启动 quay-builder 和 Clair 的 3.0.z 版本,以替换您要返回到集群的那些容器的任何实例。

3.18.1. 目标镜像

  • quay : quay.io/redhat/quay:v3.2.2
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql: rhscl/postgresql-96-rhel7
  • Redis: registry.access.redhat.com/rhscl/redis-32-rhel7

3.19. 从 3.0.z 升级到 3.1.3

3.19.1. 目标镜像

  • quay : quay.io/redhat/quay:v3.1.3
  • Clair: registry.redhat.io/quay/clair-rhel8:v3.10.3
  • postgresql: rhscl/postgresql-96-rhel7
  • Redis: registry.access.redhat.com/rhscl/redis-32-rhel7

3.20. 从 2.9.5 升级到 3.0.5

对于 2.9.5 到 3.0.5 升级,您可以使用 Red Hat Quay down(同步升级)进行整个升级,或者只让 Red Hat Quay 运行进行大量升级(background 升级)。

根据需要处理多少个标签,后台升级可能需要更长的时间。但是,总停机时间较少。后台升级的缺点是,在升级完成后您将无法访问最新的功能。集群以 v2 兼容性模式运行 Quay v3 容器,直到升级完成为止。

3.20.1. 升级概述

如果您是从 Red Hat Quay 2.y.z 集群开始,请按照以下步骤操作。升级到最新的 Red Hat Quay 3.x 版本前,您必须首先将该集群迁移到 3.0.5,如这里所述。集群正在运行 3.0.5 后,您可以通过按顺序升级到每个次要版本来升级到最新的 3.x 版本。例如:

  1. 3.0.5 → 3.1.3
  2. 3.1.3 → 3.2.2
  3. 3.2.2 → 3.3.4
  4. 3.3.4 → 3.4.z

在开始 Red Hat Quay 2.y.z 升级到 3.0 之前,请注意以下几点:

  • 同步升级 :进行同步升级,小型安装的总停机时间少于一小时。考虑小安装包含几千容器镜像标签或更少。对于该大小的安装,您可能只需几小时的计划停机时间即可获得。整个 Red Hat Quay 服务在持续时间内停机,因此如果您要在带有数百万标签的 registry 上进行同步升级,您可能会在数天内停机。
  • 后台升级 :进行后台升级(也称为兼容性模式升级),在短暂关闭 Red Hat Quay 集群升级在后台之后。对于大型 Red Hat Quay registry,这可能要花费数周才能完成,但集群在升级期间在 v2 模式中继续操作。作为一个参考点,一个 Red Hat Quay v3 升级需要 4 天时间来处理跨六个机器的约 3,000 万个标签。
  • 完成完全的功能 :在可以访问与 Docker 版本 2 相关的功能前,模式 2 更改(如对不同架构的容器支持),整个迁移必须完成。在切换时,其他 v3 功能会立即可用。
  • 升级已完成 :升级完成后,您需要在 Red Hat Quay config.yaml 文件中设置 V3_UPGRADE_MODE: complete 以供新功能使用。所有新的 Red Hat Quay v3 安装都会自动设置。

3.20.2. 先决条件

为确保最佳结果,我们建议以下先决条件:

  • 在开始升级前备份您的 Red Hat Quay 数据库(进行常规备份是一个一般的最佳做法)。在关闭 Red Hat Quay 集群进行升级后,最好这样做。
  • 备份您的存储(通用最佳实践)。
  • 在开始 v3 升级前,将当前的 Red Hat Quay 2.y.z setup 升级到最新的 2.9.z 版本(当前为 2.9.5)。为此,请执行以下操作:

    • 当 Red Hat Quay 集群仍在运行时,需要一个一个节点,并将该系统上的 Quay 容器改为运行最新的 2.9.z 版本的 Quay 容器。
    • 等待所有数据库迁移运行,使数据库进入最新的 2.9.z 版本。这只需要几分钟时间才会变为半小时。
    • 完成后,将所有现有节点上的 Quay 容器替换为相同的最新 2.9.z 版本。通过新版本上的整个 Red Hat Quay 集群,您可以继续进行 v3 升级。

3.20.3. 选择升级类型

选择同步升级(在停机后完成升级)和背景升级(在 Red Hat Quay 仍在运行时完成升级)。这两个主要版本升级都需要在短时间内关闭 Red Hat Quay 集群。

无论您选择哪个升级类型,在 Red Hat Quay 集群停机期间,如果您使用 builder 和 Clair 镜像,您还需要升级到这些新镜像:

  • Builder: quay.io/redhat/quay-builder:v3.0.5
  • Clair: quay.io/redhat/clair-jwt:v3.0.5

这些镜像都在 registry.redhat.io/quay 存储库中获得。

3.20.4. 运行同步升级

要运行同步升级,在整个集群期间为整个升级关闭,请执行以下操作:

  1. 关闭整个 Red Hat Quay 集群,包括任何 quay-builder 和 Clair 容器。
  2. 将以下设置添加到所有节点上的 config.yaml 文件中:

    V3_UPGRADE_MODE: complete

  3. 在单个节点上拉取并启动 v3 容器,并等待升级需要很长时间(需要几分钟)。使用以下容器或更高版本:

    • Quay: quay.io/redhat/quay:v3.0.5

      请注意,Quay 容器位于 Red Hat Quay 3 的端口 8080 和 8443,而不是 80 和 443,因为它们用于 Red Hat Quay 2。因此,我们建议将 8080 和 8443 重新映射到 80 和 443,如下例所示:

    # docker run --restart=always -p 80:8080 -p 443:8443 \
       --sysctl net.core.somaxconn=4096 \
       --privileged=true \
       -v /mnt/quay/config:/conf/stack:Z \
       -v /mnt/quay/storage:/datastorage:Z \
       -d quay.io/redhat/quay:v3.0.5
  4. 升级完成后,在所有其他节点上启动 Red Hat Quay 3 容器。
  5. 启动 quay-builder 和 Clair 的 3.0.z 版本,以替换您要返回到集群的那些容器的任何实例。
  6. 验证 Red Hat Quay 正常工作,包括推送和拉取与 Docker 版本 2, schema 2 兼容的容器。这包括不同计算机架构的 Windows 容器镜像和镜像(arm、ppc 等)。

3.20.5. 运行后台升级

要进行后台升级,您需要在两个 occasions 短时间内关闭集群。当第一次停机后,quay v3 容器会在 v2 兼容性模式下运行时,它会回填数据库。此后台进程可能需要几小时甚至数天才能完成。对于大型安装,建议进行后台升级,因为停机会超过几个小时。

对于这种类型的升级,您可以将 Red Hat Quay 置于兼容性模式,其中运行 Quay 3 容器,但在升级完成时在旧数据模型上运行。以下是您做什么:

  1. 将 Red Hat Quay 3 容器拉取到所有节点。使用以下容器或更高版本:

    quay.io/redhat/quay:v3.0.5

  2. 关闭整个 Red Hat Quay 集群,包括任何 quay-builder 和 Clair 容器。
  3. 编辑每个节点上的 config.yaml 文件,并将升级模式设置为后台,如下所示:

    V3_UPGRADE_MODE: background

  4. 在单一节点上使 Red Hat Quay 3 容器启动,并等待迁移完成(最多几分钟)。下面是一个该命令的示例:

    请注意,Quay 容器位于 Red Hat Quay 3 的端口 8080 和 8443,而不是 80 和 443,因为它们用于 Red Hat Quay 2。因此,我们建议将 8080 和 8443 重新映射到 80 和 443,如下例所示:

    # docker run --restart=always -p 80:8080 -p 443:8443 \
       --sysctl net.core.somaxconn=4096 \
       --privileged=true \
       -v /mnt/quay/config:/conf/stack:Z \
       -v /mnt/quay/storage:/datastorage:Z \
       -d quay.io/redhat/quay:v3.0.5
  5. 在所有其他节点上启动 Red Hat Quay 3 容器。
  6. 监控 /upgradeprog res API 端点,直到报告足够完成以移动到下一步(状态会到达 99%)。例如,查看 https://myquay.example.com/upgradeprogress 或使用一些其他工具查询 API。
  7. 当后台进程足够时,您必须调度另一个维护窗口。
  8. 在计划的维护期间,关闭整个 Red Hat Quay 集群。
  9. 编辑每个节点上的 config.yaml 文件,并将升级模式设置为 完整,如下所示:

    V3_UPGRADE_MODE: complete
  10. 启动 Red Hat Quay 在一个节点上进行最终检查。
  11. 完成最后的检查后,将 Red Hat Quay v3 放回所有其他节点上。
  12. 启动 quay-builder 和 Clair 的 3.0.z 版本,以替换您要返回到集群的那些容器的任何实例。
  13. 验证 Quay 是否正常工作,包括推送和拉取与 Docker 版本 2 兼容的容器,即架构 2。这包括不同计算机架构的 Windows 容器镜像和镜像(arm、ppc 等)。

3.20.6. 目标镜像

  • quay: quay.io/redhat/quay:v3.0.5
  • Clair: quay.io/redhat/clair-jwt:v3.0.5
  • Redis: registry.access.redhat.com/rhscl/redis-32-rhel7
  • postgresql: rhscl/postgresql-96-rhel7
  • builder : quay.io/redhat/quay-builder:v3.0.5

3.21. 在 OpenShift Container Platform 上升级 Red Hat Quay 的 geo-replication 部署

使用以下步骤升级您的 geo-replication Red Hat Quay 部署。

重要
  • 当将 geo-replication Red Hat Quay 部署升级到下一个 y-stream 版本(例如,Red Hat Quay 3.7 → Red Hat Quay 3.8)或 geo-replication 部署时,您必须在升级前停止操作。
  • 故障时间从一个 y-stream 版本升级到下一个版本会间歇性。
  • 在升级前,强烈建议您备份 Red Hat Quay 部署。

先决条件

  • 已登录到 registry.redhat.io
流程

此流程假设您在三个(或更多)系统上运行 Red Hat Quay 服务。如需更多信息,请参阅准备 Red Hat Quay 高可用性

  1. 获取运行 Red Hat Quay 实例的每个系统上所有 Red Hat Quay 实例的列表。

    1. 在 System A 中输入以下命令来显示 Red Hat Quay 实例:

      $ sudo podman ps

      输出示例

      CONTAINER ID  IMAGE                                      COMMAND         CREATED        STATUS            PORTS                                        NAMES
      ec16ece208c0  registry.redhat.io/quay/quay-rhel8:v3.7.0  registry        6 minutes ago  Up 6 minutes ago  0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp  quay01

    2. 在 System B 中输入以下命令来显示 Red Hat Quay 实例:

      $ sudo podman ps

      输出示例

      CONTAINER ID  IMAGE                                      COMMAND         CREATED        STATUS            PORTS                                        NAMES
      7ae0c9a8b37d  registry.redhat.io/quay/quay-rhel8:v3.7.0  registry        5 minutes ago   Up 2 seconds ago   0.0.0.0:82->8080/tcp, 0.0.0.0:445->8443/tcp  quay02

    3. 在 System C 中输入以下命令来显示 Red Hat Quay 实例:

      $ sudo podman ps

      输出示例

      CONTAINER ID  IMAGE                                      COMMAND         CREATED        STATUS            PORTS                                        NAMES
      e75c4aebfee9  registry.redhat.io/quay/quay-rhel8:v3.7.0  registry        4 seconds ago   Up 4 seconds ago   0.0.0.0:84->8080/tcp, 0.0.0.0:447->8443/tcp  quay03

  2. 在每个系统中临时关闭所有 Red Hat Quay 实例。

    1. 在 System A 中输入以下命令来关闭 Red Hat Quay 实例:

      $ sudo podman stop ec16ece208c0
    2. 在 System B 中输入以下命令来关闭 Red Hat Quay 实例:

      $ sudo podman stop 7ae0c9a8b37d
    3. 在 System C 中输入以下命令来关闭 Red Hat Quay 实例:

      $ sudo podman stop e75c4aebfee9
  3. 在每个系统上获取最新的 Red Hat Quay 版本,如 Red Hat Quay 3。

    1. 在 System A 中输入以下命令来获取最新的 Red Hat Quay 版本:

      $ sudo podman pull registry.redhat.io/quay/quay-rhel8:v3.8.0
    2. 在 System B 中输入以下命令来获取最新的 Red Hat Quay 版本:

      $ sudo podman pull registry.redhat.io/quay/quay-rhel8:v3.8.0
    3. 在 System C 中输入以下命令来获取最新的 Red Hat Quay 版本:

      $ sudo podman pull registry.redhat.io/quay/quay-rhel8:v3.8.0
  4. 在高可用性 Red Hat Quay 部署的系统 A 中,运行新镜像版本,例如 Red Hat Quay 3:

    # sudo podman run --restart=always -p 443:8443 -p 80:8080 \
       --sysctl net.core.somaxconn=4096 \
       --name=quay01 \
       -v /mnt/quay/config:/conf/stack:Z \
       -v /mnt/quay/storage:/datastorage:Z \
       -d registry.redhat.io/quay/quay-rhel8:v3.8.0
  5. 等待新的 Red Hat Quay 容器在 System A 上完全正常工作。您可以输入以下命令检查容器的状态:

    $ sudo podman ps

    输出示例

    CONTAINER ID  IMAGE                                      COMMAND         CREATED        STATUS            PORTS                                        NAMES
    70b9f38c3fb4  registry.redhat.io/quay/quay-rhel8:v3.8.0  registry        2 seconds ago   Up 2 seconds ago   0.0.0.0:82->8080/tcp, 0.0.0.0:445->8443/tcp  quay01

  6. 可选:通过进入到 Red Hat Quay UI 来确保 Red Hat Quay 已完全操作。
  7. 确保 System A 上的 Red Hat Quay 完全正常工作后,在 System B 和 System C 上运行新镜像版本。

    1. 在高可用性 Red Hat Quay 部署的 System B 中,运行新镜像版本,例如 Red Hat Quay 3:

      # sudo podman run --restart=always -p 443:8443 -p 80:8080 \
         --sysctl net.core.somaxconn=4096 \
         --name=quay02 \
         -v /mnt/quay/config:/conf/stack:Z \
         -v /mnt/quay/storage:/datastorage:Z \
         -d registry.redhat.io/quay/quay-rhel8:v3.8.0
    2. 在高可用性 Red Hat Quay 部署的系统 C 中,运行新镜像版本,例如 Red Hat Quay 3:

      # sudo podman run --restart=always -p 443:8443 -p 80:8080 \
         --sysctl net.core.somaxconn=4096 \
         --name=quay03 \
         -v /mnt/quay/config:/conf/stack:Z \
         -v /mnt/quay/storage:/datastorage:Z \
         -d registry.redhat.io/quay/quay-rhel8:v3.8.0
  8. 您可以输入以下命令来检查 System B 和 System C 中的容器状态:

    $ sudo podman ps

第 4 章 升级 Quay Bridge Operator

要升级 Quay Bridge Operator(QBO),将 Subscription 选项卡中的 Channel Subscription 更新频道改为所需的频道。

当将 QBO 从 3.5 升级到 3.7 时,需要执行几个额外的步骤:

  1. 您需要创建一个新的 QuayIntegration 自定义资源。这可以在 Web 控制台中或命令行完成。

    upgrade-quay-integration.yaml

    - apiVersion: quay.redhat.com/v1
      kind: QuayIntegration
      metadata:
        name: example-quayintegration-new
      spec:
        clusterID: openshift 1
        credentialsSecret:
          name: quay-integration
          namespace: openshift-operators
        insecureRegistry: false
        quayHostname: https://registry-quay-quay35.router-default.apps.cluster.openshift.com

    1
    确保 clusterID 与现有 QuayIntegration 资源的值匹配。
  2. 创建新的 QuayIntegration 自定义资源:

    $ oc create -f upgrade-quay-integration.yaml
  3. 删除旧的 QuayIntegration 自定义资源。
  4. 删除旧的 变异webhook 配置

    $ oc delete mutatingwebhookconfigurations.admissionregistration.k8s.io quay-bridge-operator

4.1. 在 OpenShift Container Platform 上升级 Red Hat Quay 的 geo-replication 部署

使用以下步骤升级 OpenShift Container Platform 部署上的地理复制 Red Hat Quay。

重要
  • 当将 OpenShift Container Platform 上的 geo-replicated Red Hat Quay 部署升级到下一个 y-stream 版本(例如,Red Hat Quay 3.7 → Red Hat Quay 3.8),您必须在升级前停止操作。
  • 故障时间从一个 y-stream 版本升级到下一个版本会间歇性。
  • 在升级前,强烈建议您在 OpenShift Container Platform 上部署备份 Red Hat Quay。
流程

此流程假设您在三个或更多系统上运行 Red Hat Quay registry。对于此过程,我们将假设三个名为 System A、 System BSystem C 的系统。系统 A 将充当部署 Red Hat Quay Operator 的主要系统。

  1. 在 System B 和 System C 上,缩减您的 Red Hat Quay registry。这可以通过禁用自动扩展并覆盖 Red Hat Quay、镜像 worker 和 Clair 的副本计数(如果被管理)。使用以下 quayregistry.yaml 文件作为参考:

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: registry
      namespace: ns
    spec:
      components:
        …
        - kind: horizontalpodautoscaler
          managed: false 1
        - kind: quay
          managed: true
          overrides: 2
            replicas: 0
        - kind: clair
          managed: true
          overrides:
            replicas: 0
        - kind: mirror
          managed: true
          overrides:
            replicas: 0
        …
    1
    禁用 QuayClairmirror worker 的自动扩展
    2
    将访问数据库和对象的组件的副本数设置为 0
    注意

    您必须保留在 System A 上运行的 Red Hat Quay registry。不要更新 System A 上的 quayregistry.yaml 文件。

  2. 等待 registry-quay-appregistry-quay-mirrorregistry-clair-app pod 消失。输入以下命令检查其状态:

    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-redis-84f888776f-hhgms           1/1     Running     0             12m

  3. 在 System A 上,启动 Red Hat Quay 升级到最新的 y-stream 版本。这是手动过程。有关升级安装的 Operator 的更多信息,请参阅 升级已安装的 Operator。如需有关 Red Hat Quay 升级路径的更多信息,请参阅升级 Red Hat Quay Operator
  4. 安装新的 Red Hat Quay registry 后,集群中的必要升级会自动完成。之后,新的 Red Hat Quay pod 会使用最新的 y-stream 版本启动。另外,还会调度并启动新的 Quay pod。
  5. 通过进入到 Red Hat Quay UI 确认更新是否正常工作:

    1. OpenShift 控制台中,导航到 OperatorsInstalled Operators,然后点击 Registry Endpoint 链接。

      重要

      在 Red Hat Quay UI 可用前,不要执行以下步骤。在系统 A 上提供 UI 前,不要升级 System B 和 System C 上的 Red Hat Quay registry。

  6. 确认更新在 System A 上正常工作后,在 System B 和 System C 上启动 Red Hat Quay 升级。Operator 升级会导致升级的 Red Hat Quay 安装,并重启 pod。

    注意

    因为数据库架构对于新的 y-stream 安装正确,System B 和 System C 上的新 pod 应该快速启动。

第 5 章 降级 Red Hat Quay

Red Hat Quay 只支持回滚到以前的 z-stream 版本,如 3.7.2 → 3.7.1。不支持回滚到以前的 y-stream 版本(3.7.0 → 3.6.0)。这是因为 Red Hat Quay 更新可能包含升级到 Red Hat Quay 的新版本时应用的数据库架构升级。数据库架构升级不被视为向后兼容。

重要

基于 Operator 的部署或基于虚拟机的部署都不支持升级到以前的 z-streams。只有在极端情况下才应进行降级。回滚您的 Red Hat Quay 部署的决定必须与 Red Hat Quay 支持和开发团队一起进行。如需更多信息,请联系红帽 Quay 支持。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.