×

集群示例运算符(在 `openshift` 命名空间中运行)安装和更新基于 Red Hat Enterprise Linux (RHEL) 的 OpenShift Container Platform 镜像流和 OpenShift Container Platform 模板。

集群示例运算符已被弃用
  • 从 OpenShift Container Platform 4.16 开始,集群示例运算符已被弃用。不会向集群示例运算符添加新的模板、示例或非源到镜像 (Non-S2I) 镜像流。但是,现有的 S2I 构建器镜像流和模板将继续接收更新,直到集群示例运算符在将来的版本中被删除。S2I 镜像流和模板包括

    • Ruby

    • Python

    • Node.js

    • Perl

    • PHP

    • HTTPD

    • Nginx

    • EAP

    • Java

    • Web 服务器

    • .NET

    • Go

  • 集群示例运算符将停止管理和提供对非 S2I 示例(镜像流和模板)的支持。您可以联系镜像流或模板所有者以了解任何需求和未来计划。此外,请参考 托管镜像流或模板的存储库列表

理解集群示例操作符

安装期间,操作符会创建其自身的默认配置对象,然后创建示例镜像流和模板,包括快速入门模板。

为了方便从需要凭据的其他注册表导入镜像流,集群管理员可以在 `openshift` 命名空间中创建任何包含 Docker `config.json` 文件内容的额外密钥,这些密钥是镜像导入所需的。

集群示例操作符配置是集群范围内的资源,其部署包含在 `openshift-cluster-samples-operator` 命名空间中。

集群示例操作符的镜像包含与相关 OpenShift Container Platform 版本关联的镜像流和模板定义。创建或更新每个示例时,集群示例操作符都会包含一个注释,该注释表示 OpenShift Container Platform 的版本。操作符使用此注释来确保每个示例都与发行版版本匹配。其清单之外的示例将被忽略,跳过的示例也将被忽略。对操作符管理的任何示例进行的修改(其中版本注释被修改或删除)将自动恢复。

Jenkins 镜像是安装程序镜像有效负载的一部分,并直接标记到镜像流中。

集群示例操作符配置资源包含一个最终器,在删除时会清理以下内容:

  • 操作符管理的镜像流。

  • 操作符管理的模板。

  • 操作符生成的配置资源。

  • 集群状态资源。

删除示例资源后,集群示例操作符将使用默认配置重新创建该资源。

集群示例操作符对管理状态的使用

集群示例操作符默认情况下或如果配置了全局代理,则以 `Managed` 状态引导。在 `Managed` 状态下,集群示例操作符会主动管理其资源并保持组件处于活动状态,以便从注册表中提取示例镜像流和镜像,并确保安装必要的示例模板。

某些情况下会导致集群示例操作符将其自身引导为 `Removed`,包括:

对于 OpenShift Container Platform,默认镜像注册表为 `registry.redhat.io`。

但是,如果集群示例操作符检测到它位于 IPv6 网络上并且配置了 OpenShift Container Platform 全局代理,则 IPv6 检查将优先于所有检查。因此,集群示例操作符会将其自身引导为 `Removed`。

目前 registry.redhat.io 不支持 IPv6 安装。集群示例操作符从 registry.redhat.io 拉取大部分示例镜像流和镜像。

受限网络安装

当无法访问 `registry.redhat.io` 时引导为 `Removed` 方便了在网络限制已就位时的受限网络安装。当网络访问受限时引导为 `Removed` 允许集群管理员有更多时间来决定是否需要示例,因为当管理状态设置为 `Removed` 时,集群示例操作符不会提交有关示例镜像流导入失败的警报。当集群示例操作符以 `Managed` 状态启动并尝试安装示例镜像流时,如果导入失败,它会在初始安装两小时后开始发出警报。

具有初始网络访问权限的受限网络安装

相反,如果打算作为受限网络或断开连接的集群的集群在存在网络访问权限时首次安装,则集群示例操作符会从 `registry.redhat.io` 安装内容,因为它可以访问该内容。如果您希望集群示例操作符仍然引导为 `Removed` 以便推迟示例安装,直到您决定需要哪些示例、设置镜像镜像等等,那么请按照使用带有备用注册表的示例操作符以及自定义节点(这两个链接都在附加资源部分中)的说明操作,以覆盖集群示例操作符默认配置并最初以 `Removed` 状态启动。

您必须将以下附加 YAML 文件放入 `openshift-install create manifest` 创建的 `openshift` 目录中。

带有 `managementState: Removed` 的示例集群示例操作符 YAML 文件
apiVersion: samples.operator.openshift.io/v1
kind: Config
metadata:
  name: cluster
spec:
  architectures:
  - x86_64
  managementState: Removed

集群示例操作符对镜像流导入的跟踪和错误恢复

创建或更新示例镜像流后,集群示例操作符会监控每个镜像流标记的镜像导入进度。

如果导入失败,集群示例操作符将通过镜像流镜像导入 API(与 `oc import-image` 命令使用的 API 相同)大约每 15 分钟重试一次导入,直到它看到导入成功,或者如果更改了集群示例操作符的配置,使得镜像流被添加到 `skippedImagestreams` 列表中,或者管理状态更改为 `Removed`。

其他资源

  • 如果在安装期间删除了集群示例操作符,您可以 使用带有备用注册表的集群示例操作符 以便可以导入内容,然后将集群示例操作符设置为 `Managed` 以获取示例。

  • 为了确保集群示例操作符在具有初始网络访问权限的受限网络安装中引导为 `Removed`,以便推迟示例安装,直到您决定需要哪些示例,请按照 自定义节点 的说明操作,以覆盖集群示例操作符默认配置并最初以 `Removed` 状态启动。

集群示例操作符对镜像的辅助

在安装过程中,OpenShift Container Platform会在`openshift-cluster-samples-operator`命名空间中创建一个名为`imagestreamtag-to-image`的配置映射。`imagestreamtag-to-image`配置映射包含一个条目,即每个镜像流标签的填充镜像。

配置映射数据字段中每个条目的键的格式为`<image_stream_name>_<image_stream_tag_name>`。

在OpenShift Container Platform的离线安装过程中,集群样本操作器的状态设置为`Removed`。如果您选择将其更改为`Managed`,它将安装示例。

在网络受限或断开连接的环境中使用示例可能需要访问网络外部的服务。一些示例服务包括:Github、Maven Central、npm、RubyGems、PyPi等。可能需要采取其他步骤才能使集群样本操作器的对象访问它们所需的服务。

您可以使用此配置映射作为参考,以确定需要为镜像流导入而镜像哪些镜像。

  • 当集群样本操作器设置为`Removed`时,您可以创建镜像注册表,或确定要使用的现有镜像注册表。

  • 使用新的配置映射作为指南,将您想要的样本镜像到镜像注册表。

  • 将您未镜像的任何镜像流添加到集群样本操作器配置对象的`skippedImagestreams`列表中。

  • 将集群样本操作器配置对象的`samplesRegistry`设置为镜像注册表。

  • 然后将集群样本操作器设置为`Managed`以安装您已镜像的镜像流。

集群样本操作器配置参数

样本资源提供以下配置字段

参数 描述

managementState

Managed:集群样本操作器根据配置更新样本。

Unmanaged:集群样本操作器忽略对其配置资源对象以及`openshift`命名空间中的任何镜像流或模板的更新。

Removed:集群样本操作器将`openshift`命名空间中设置的`Managed`镜像流和模板删除。它会忽略集群管理员创建的任何新样本或跳过列表中的任何样本。删除完成后,集群样本操作器的工作方式类似于`Unmanaged`状态,并忽略样本资源、镜像流或模板上的任何监视事件。

samplesRegistry

允许您指定镜像流访问其镜像内容的注册表。对于OpenShift Container Platform,`samplesRegistry`默认为`registry.redhat.io`。

如果在未显式设置`样本注册表`(留空字符串)或将其设置为registry.redhat.io时未准备好拉取访问的密钥,则不会开始创建或更新RHEL内容。在这两种情况下,镜像导入都依赖于registry.redhat.io,这需要凭据。

如果将`样本注册表`覆盖为非空字符串或registry.redhat.io以外的值,则创建或更新RHEL内容不受拉取密钥是否存在的影响。

architectures

用于选择架构类型的占位符。

skippedImagestreams

集群样本操作器库存中存在的,但集群管理员希望操作器忽略或不管理的镜像流。您可以将镜像流名称列表添加到此参数中。例如,`["httpd","perl"]`。

skippedTemplates

集群样本操作器库存中存在的,但集群管理员希望操作器忽略或不管理的模板。

在创建初始样本资源对象之前,可能会出现密钥、镜像流和模板监视事件,集群样本操作器会检测到并重新排队该事件。

配置限制

当集群样本操作器开始支持多种架构时,在`Managed`状态下不允许更改架构列表。

要更改架构值,集群管理员必须:

  • 将`管理状态`标记为`Removed`,保存更改。

  • 在后续更改中,编辑架构并将`管理状态`更改回`Managed`。

集群样本操作器在`Removed`状态下仍然处理密钥。您可以在切换到`Removed`之前、在`Removed`状态下切换到`Managed`之前或在切换到`Managed`状态之后创建密钥。如果您在切换到`Managed`之后创建密钥,则在处理密钥事件之前,创建样本会有一些延迟。这有助于促进注册表的更改,您可以选择在切换之前删除所有样本以确保干净的状态。切换之前删除所有样本不是必需的。

状态

样本资源在其状态中维护以下状态:

状态 描述

SamplesExists

指示样本已在`openshift`命名空间中创建。

ImageChangesInProgress

当创建或更新镜像流时为`True`,但并非所有标签规范生成和标签状态生成都匹配。

当所有生成都匹配或导入过程中发生不可恢复的错误时为`False`,最新的错误在消息字段中。挂起的镜像流列表位于原因字段中。

此状态在OpenShift Container Platform中已弃用。

ConfigurationValid

根据是否提交了前面提到的任何受限更改而为`True`或`False`。

RemovePending

指示存在待处理的`管理状态:Removed`设置,但集群样本操作器正在等待删除完成。

ImportImageErrorsExist

指示哪些镜像流在其某个标签的镜像导入阶段发生错误。

发生错误时为`True`。带有错误的镜像流列表位于原因字段中。报告的每个错误的详细信息都在消息字段中。

MigrationInProgress

当集群样本操作器检测到版本与安装当前样本集的集群样本操作器版本不同时为`True`。

此状态在OpenShift Container Platform中已弃用。

访问集群样本操作器配置

您可以通过使用提供的参数编辑文件来配置集群样本操作器。

先决条件
  • 安装OpenShift CLI (oc)。

步骤
  • 访问集群样本操作器配置

    $ oc edit configs.samples.operator.openshift.io/cluster

    集群样本操作器配置类似于以下示例

    apiVersion: samples.operator.openshift.io/v1
    kind: Config
    # ...

从集群样本操作器中删除已弃用的镜像流标签

集群样本操作器将已弃用的镜像流标签保留在镜像流中,因为用户可能拥有使用已弃用镜像流标签的部署。

您可以使用`oc tag`命令编辑镜像流来删除已弃用的镜像流标签。

样本提供商已从其镜像流中删除的已弃用镜像流标签未包含在初始安装中。

先决条件
  • 您已安装`oc` CLI。

步骤
  • 使用`oc tag`命令编辑镜像流来删除已弃用的镜像流标签。

    $ oc tag -d <image_stream_name:tag>
    示例输出
    Deleted tag default/<image_stream_name:tag>.

其他资源