7.4. 在 OLM 1.0 中管理普通捆绑包(技术预览)
在 Operator Lifecycle Manager (OLM) 1.0 中,普通捆绑包是 YAML 格式的任意 Kubernetes 清单的静态集合。在 olm.bundle
schema 对象的实验性 olm.bundle.mediatype
属性中,普通捆绑包(plain+v0
)与常规(registry+v1
)捆绑包不同。
OLM 1.0 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
作为集群管理员,您可以通过完成以下步骤来构建和发布包含普通捆绑包镜像的基于文件的目录:
- 构建普通捆绑包镜像。
- 创建基于文件的目录。
- 将普通捆绑包镜像添加到您的基于文件的目录中。
- 将目录构建为镜像。
- 发布您的目录镜像。
其他资源
7.4.1. 先决条件
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群注意对于 OpenShift Container Platform 4.15,适用于 OLM 1.0 的流程都是基于 CLI 的。另外,管理员也可以使用普通方法(如 Import YAML 和 Search 页面)在 web 控制台中创建和查看相关对象。但是,现有的 OperatorHub 和 Installed 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 目前支持安装仅从普通捆绑包镜像创建的普通捆绑包。
流程
在项目的根目录中,创建一个可构建捆绑包镜像的 Dockerfile:
plainbundle.Dockerfile
示例FROM scratch 1 ADD manifests /manifests
- 1
- 使用
FROM scratch
指令可以使镜像的大小更小。捆绑包镜像不需要其他文件或目录。
使用您首选的构建工具构建开放容器项目(OCI)兼容镜像,如下例所示:
$ podman build -f plainbundle.Dockerfile -t \ quay.io/<organization_name>/<repository_name>:<image_tag> . 1
- 1
- 使用引用已推送访问权限的存储库的镜像标签。
运行以下命令将镜像推送到远程 registry:
$ podman push quay.io/<organization_name>/<repository_name>:<image_tag>
7.4.3. 创建基于文件的目录
如果您没有基于文件的目录,则必须执行以下步骤来初始化目录。
流程
运行以下命令,为目录创建一个目录:
$ mkdir <catalog_dir>
通过在与上一步中相同的目录级别运行
opm generate dockerfile
命令生成可构建目录镜像的 Dockerfile:$ opm generate dockerfile <catalog_dir> \ -i registry.redhat.io/openshift4/ose-operator-registry:v4.15 1
- 1
- 使用
-i
标志指定官方红帽基础镜像,否则 Dockerfile 使用默认的上游镜像。
注意生成的 Dockerfile 必须与您在上一步中创建的目录目录位于同一个父目录中:
目录结构示例
. ├── <catalog_dir> └── <catalog_dir>.Dockerfile
运行
opm init
命令,使用扩展的软件包定义填充目录:$ opm init <extension_name> \ --output json \ > <catalog_dir>/index.json
此命令在指定的目录配置文件中生成
olm.package
声明性配置 blob。
7.4.4. 在基于文件的目录中添加普通捆绑包
opm render
命令不支持将普通捆绑包添加到目录中。您必须手动将纯文本捆绑包添加到基于文件的目录中,如以下步骤所示。
流程
验证目录的
index.json
或index.yaml
文件是否类似以下示例:<catalog_dir>/index.json
文件示例{ { "schema": "olm.package", "name": "<extension_name>", "defaultChannel": "" } }
要创建
olm.bundle
blob,请编辑index.json
或index.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" } ] }
要创建
olm.channel
blob,请编辑index.json
或index.yaml
文件,如下例所示:带有
olm.channel
blob 的<catalog_dir>/index.json
文件示例{ "schema": "olm.channel", "name": "<desired_channel_name>", "package": "<extension_name>", "entries": [ { "name": "<extension_name>.v<version>" } ] }
验证
打开
index.json
或index.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" } ] }
运行以下命令验证您的目录:
$ opm validate <catalog_dir>
7.4.5. 构建和发布基于文件的目录
流程
运行以下命令,将基于文件的目录构建为镜像:
$ podman build -f <catalog_dir>.Dockerfile -t \ quay.io/<organization_name>/<repository_name>:<image_tag> .
运行以下命令来推送目录镜像:
$ podman push quay.io/<organization_name>/<repository_name>:<image_tag>