搜索

7.4. 在 OLM 1.0 中管理普通捆绑包(技术预览)

download PDF

在 Operator Lifecycle Manager (OLM) 1.0 中,普通捆绑包是 YAML 格式的任意 Kubernetes 清单的静态集合。在 olm.bundle schema 对象的实验性 olm.bundle.mediatype 属性中,普通捆绑包(plain+v0)与常规(registry+v1)捆绑包不同。

重要

OLM 1.0 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

作为集群管理员,您可以通过完成以下步骤来构建和发布包含普通捆绑包镜像的基于文件的目录:

  1. 构建普通捆绑包镜像。
  2. 创建基于文件的目录。
  3. 将普通捆绑包镜像添加到您的基于文件的目录中。
  4. 将目录构建为镜像。
  5. 发布您的目录镜像。

7.4.1. 先决条件

  • 使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群

    注意

    对于 OpenShift Container Platform 4.14,适用于 OLM 1.0 的流程仅基于 CLI。另外,管理员也可以使用普通方法(如 Import YAMLSearch 页面)在 web 控制台中创建和查看相关对象。但是,现有的 OperatorHubInstalled Operators 页面还不会显示 OLM 1.0 组件。

  • 在集群中启用 TechPreviewNoUpgrade 功能集

    警告

    启用 TechPreviewNoUpgrade 功能集将无法撤消,并防止次版本更新。不建议在生产环境集群中使用这些功能集。

  • 在您的工作站上安装的 OpenShift CLI (oc)
  • 工作站上安装的 opm CLI
  • 工作站上安装的 Docker 或 Podman
  • 推送到容器 registry,如 Quay
  • 在项目根目录的一个扁平目录中您的捆绑包的 Kubernetes 清单,类似于以下结构:

    目录结构示例

    manifests
    ├── namespace.yaml
    ├── service_account.yaml
    ├── cluster_role.yaml
    ├── cluster_role_binding.yaml
    └── deployment.yaml

7.4.2. 从镜像源构建普通捆绑包镜像

Operator Controller 目前支持安装仅从普通捆绑包镜像创建的普通捆绑包。

流程

  1. 在项目的根目录中,创建一个可构建捆绑包镜像的 Dockerfile:

    plainbundle.Dockerfile 示例

    FROM scratch 1
    ADD manifests /manifests

    1
    使用 FROM scratch 指令可以使镜像的大小更小。捆绑包镜像不需要其他文件或目录。
  2. 使用您首选的构建工具构建开放容器项目(OCI)兼容镜像,如下例所示:

    $ podman build -f plainbundle.Dockerfile -t \
        quay.io/<organization_name>/<repository_name>:<image_tag> . 1
    1
    使用引用已推送访问权限的存储库的镜像标签。
  3. 运行以下命令将镜像推送到远程 registry:

    $ podman push quay.io/<organization_name>/<repository_name>:<image_tag>

7.4.3. 创建基于文件的目录

如果您没有基于文件的目录,则必须执行以下步骤来初始化目录。

流程

  1. 运行以下命令,为目录创建一个目录:

    $ mkdir <catalog_dir>
  2. 通过在与上一步中相同的目录级别运行 opm generate dockerfile 命令生成可构建目录镜像的 Dockerfile:

    $ opm generate dockerfile <catalog_dir> \
        -i registry.redhat.io/openshift4/ose-operator-registry:v4.14 1
    1
    使用 -i 标志指定官方红帽基础镜像,否则 Dockerfile 使用默认的上游镜像。
    注意

    生成的 Dockerfile 必须与您在上一步中创建的目录目录位于同一个父目录中:

    目录结构示例

    .
    ├── <catalog_dir>
    └── <catalog_dir>.Dockerfile

  3. 运行 opm init 命令,使用扩展的软件包定义填充目录:

    $ opm init <extension_name> \
        --output json \
        > <catalog_dir>/index.json

    此命令在指定的目录配置文件中生成 olm.package 声明性配置 blob。

7.4.4. 在基于文件的目录中添加普通捆绑包

opm render 命令不支持将普通捆绑包添加到目录中。您必须手动将纯文本捆绑包添加到基于文件的目录中,如以下步骤所示。

流程

  1. 验证目录的 index.jsonindex.yaml 文件是否类似以下示例:

    <catalog_dir>/index.json 文件示例

    {
        {
         "schema": "olm.package",
         "name": "<extension_name>",
         "defaultChannel": ""
        }
    }

  2. 要创建 olm.bundle blob,请编辑 index.jsonindex.yaml 文件,如下例所示:

    带有 olm.bundle blob 的 <catalog_dir>/index.json 文件示例

    {
       "schema": "olm.bundle",
        "name": "<extension_name>.v<version>",
        "package": "<extension_name>",
        "image": "quay.io/<organization_name>/<repository_name>:<image_tag>",
        "properties": [
            {
                "type": "olm.package",
                "value": {
                "packageName": "<extension_name>",
                "version": "<bundle_version>"
                }
            },
            {
                "type": "olm.bundle.mediatype",
                "value": "plain+v0"
            }
      ]
    }

  3. 要创建 olm.channel blob,请编辑 index.jsonindex.yaml 文件,如下例所示:

    带有 olm.channel blob 的 <catalog_dir>/index.json 文件示例

    {
        "schema": "olm.channel",
        "name": "<desired_channel_name>",
        "package": "<extension_name>",
        "entries": [
            {
                "name": "<extension_name>.v<version>"
            }
        ]
    }

验证

  1. 打开 index.jsonindex.yaml 文件,并确保它类似以下示例:

    <catalog_dir>/index.json 文件示例

    {
        "schema": "olm.package",
        "name": "example-extension",
        "defaultChannel": "preview"
    }
    {
        "schema": "olm.bundle",
        "name": "example-extension.v0.0.1",
        "package": "example-extension",
        "image": "quay.io/example-org/example-extension-bundle:v0.0.1",
        "properties": [
            {
                "type": "olm.package",
                "value": {
                "packageName": "example-extension",
                "version": "0.0.1"
                }
            },
            {
                "type": "olm.bundle.mediatype",
                "value": "plain+v0"
            }
        ]
    }
    {
        "schema": "olm.channel",
        "name": "preview",
        "package": "example-extension",
        "entries": [
            {
                "name": "example-extension.v0.0.1"
            }
        ]
    }

  2. 运行以下命令验证您的目录:

    $ opm validate <catalog_dir>

7.4.5. 构建和发布基于文件的目录

流程

  1. 运行以下命令,将基于文件的目录构建为镜像:

    $ podman build -f <catalog_dir>.Dockerfile -t \
        quay.io/<organization_name>/<repository_name>:<image_tag> .
  2. 运行以下命令来推送目录镜像:

    $ podman push quay.io/<organization_name>/<repository_name>:<image_tag>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.