Menu Close

5.8.5. 控制与 OpenShift Container Platform 版本的 Operator 兼容性

重要

Kubernetes 定期弃用后续版本中删除的某些 API。如果您的 Operator 使用已弃用的 API,则在 OpenShift Container Platform 集群升级到已删除 API 的 Kubernetes 版本后,它可能无法正常工作。

作为 Operator 作者,强烈建议您查阅 Kubernetes 文档中的已弃用 API 迁移指南,并保持您的 Operator 项目最新状态以避免使用已弃用和删除的 API。理想情况下,您应该在更新的 OpenShift Container Platform 版本发行之前更新 Operator,从而避免 Operator 不兼容的问题。

当从 OpenShift Container Platform 版本中删除 API 时,在该集群版本上运行的仍使用删除的 API 的 Operator 将不再正常工作。作为 Operator 作者,您应该计划更新 Operator 项目,以适应 API 弃用和删除情况,以避免 Operator 用户中断。

提示

您可以检查在 OpenShift Container Platform 4.8 及之后的版本上运行的 Operator 的事件警报,以查找当前是否对 API 有任何警告。以下警报在检测到正在使用的 API 会在下一发行版本中会被删除时发出一个警告:

APIRemovedInNextReleaseInUse
将在下一个 OpenShift Container Platform 发行版本中删除的 API。
APIRemovedInNextEUSReleaseInUse
将在下一个 OpenShift Container Platform 延长更新支持(EUS)发行版本中删除的 API。

如果集群管理员安装了 Operator,在升级到下一个 OpenShift Container Platform 版本前,必须确保安装与下一集群版本兼容的 Operator 版本。虽然建议您将 Operator 项目更新为不再使用已弃用或删除的 API,但如果您仍需要发布带有已删除 API 的 Operator 捆绑包,以便在早期版本的 OpenShift Container Platform 上继续使用,请确保正确配置了捆绑包。

以下流程可帮助管理员在不兼容的 OpenShift Container Platform 版本上安装 Operator 版本。这些步骤还可防止管理员升级到与当前在集群中安装的 Operator 版本不兼容的 OpenShift Container Platform 的更新版本。

当您知道当前版本的 Operator 因任何原因无法在特定的 OpenShift Container Platform 版本上正常工作时,此过程也很有用。通过定义应分发 Operator 的集群版本,可确保 Operator 不出现在允许范围内的集群版本目录中。

重要

当集群管理员升级到不再支持 API 的未来 OpenShift Container Platform 版本时,使用已弃用 API 的 Operator 可能会对关键工作负载造成负面影响。如果您的 Operator 使用已弃用的 API,则应该尽快在 Operator 项目中配置以下设置。

先决条件

  • 现有 Operator 项目

流程

  1. 如果您知道特定 Operator 捆绑包不受支持,且早于特定集群版本无法在 OpenShift Container Platform 上正常工作,请配置 Operator 兼容的最大 OpenShift Container Platform 版本。在 Operator 项目的集群服务版本 (CSV) 中,设置 olm.maxOpenShiftVersion 注解以防止管理员在将已安装的 Operator 升级到兼容版本前升级其集群:

    带有 olm.maxOpenShiftVersion 注解的 CSV 示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: ClusterServiceVersion
    metadata:
      annotations:
        "olm.properties": '[{"type": "olm.maxOpenShiftVersion", "value": "<cluster_version>"}]' 1

    1
    指定 Operator 兼容的最大 OpenShift Container Platform 集群版本。例如,当在集群中安装这个捆绑包时,将 value 设为 4.8 可防止集群升级到 OpenShift Container Platform 4.8 之后的版本。
  2. 如果您的捆绑包旨在在红帽提供的 Operator 目录中发布,请通过设置以下属性为 Operator 配置兼容版本的 OpenShift Container Platform。此配置可确保您的 Operator 只包含在以兼容 OpenShift Container Platform 版本为目标的目录中:

    注意

    仅当在红帽提供的目录中发布 Operator 时,才需要这个步骤。如果您的捆绑包只用于在自定义目录中分发,您可以跳过这一步。如需了解更多详细信息,请参阅"红帽提供的 Operator 目录"。

    1. 在项目的 bundle/metadata/annotations.yaml 文件中设置 com.redhat.openshift.versions 注解:

      兼容版本的 bundle/metadata/annotations.yaml 文件示例

      com.redhat.openshift.versions: "v4.6-v4.8" 1

      1
      设置一个范围或一个版本。
    2. 为防止您的捆绑包被传输到不兼容的 OpenShift Container Platform 版本,请确保索引镜像使用 Operator 捆绑包镜像中的正确 com.redhat.openshift.versions 标签生成。例如,如果您的项目是使用 Operator SDK 生成的,请更新 bundle.Dockerfile 文件:

      与兼容版本的 bundle.Dockerfile 示例

      LABEL com.redhat.openshift.versions="<versions>" 1

      1
      设置为范围或单个版本,如 v4.6-v4.8。通过这个设置,您可以定义应分发 Operator 的集群版本,Operator 不会出现在范围之外的集群版本目录中。

现在,您可以捆绑 Operator 的新版本,并将更新的版本发布到目录以进行分发。

其他资源