第 5 章 集群扩展
5.1. 管理集群扩展 复制链接链接已复制到粘贴板!
将一个目录被添加到集群后,您可以访问发布到目录的扩展和 Operator 版本、补丁和无线更新。
您可以使用自定义资源(CR)从 CLI 声明性管理扩展。
对于 OpenShift Container Platform 4.19,适用于 OLM v1 的流程都是基于 CLI 的。另外,管理员也可以使用普通方法(如 Import YAML 和 Search 页面)在 web 控制台中创建和查看相关对象。但是,现有的 OperatorHub 和 Installed Operators 页还不会显示 OLM v1 组件。
5.1.1. 支持的扩展 复制链接链接已复制到粘贴板!
目前,Operator Lifecycle Manager (OLM) v1 支持安装满足以下所有条件的集群扩展:
-
扩展必须使用 OLM (Classic) 中引入的
registry+v1
捆绑包格式。 扩展必须通过
AllNamespaces
安装模式支持安装。-
OpenShift Container Platform 4.19 中包含了对
SingleNamespace
和OwnNamespace
安装模式的支持,作为技术预览功能。
-
OpenShift Container Platform 4.19 中包含了对
- 扩展不能使用 Webhook。
扩展不能使用以下基于文件的目录属性声明依赖项:
-
olm.gvk.required
-
olm.package.required
-
olm.constraint
-
OLM v1 检查您要安装的扩展是否满足这些限制。如果要安装的扩展不符合这些限制,会在集群扩展条件中输出错误消息。
Operator Lifecycle Manager (OLM) v1 不支持 OLM 中引入的 OperatorConditions
API (Classic)。
如果扩展依赖于 OperatorConditions
API 管理更新,扩展可能无法正确安装。大多数依赖此 API 的扩展都会在启动时失败,但在协调过程中可能会失败。
作为临时解决方案,您可以将扩展固定到特定的版本。当您想更新扩展时,请查阅扩展文档来查找何时安全将扩展固定到新版本。
5.1.2. 从目录查找 Operator 复制链接链接已复制到粘贴板!
在集群中添加目录后,您可以查询目录以查找要安装的 Operator 和扩展。
目前,在 Operator Lifecycle Manager (OLM) v1 中,您无法查询由 catalogd 管理的集群目录。在 OLM v1 中,您必须使用 opm
和 jq
CLI 工具查询目录 registry。
先决条件
- 您已在集群中添加目录。
-
已安装
jq
CLI 工具。 -
已安装
opm
CLI 工具。
流程
要返回支持
AllNamespaces
安装模式的扩展列表,且不使用 Webhook,请输入以下命令:opm render <catalog_registry_url>:<tag> \ | jq -cs '[.[] | select(.schema == "olm.bundle" \ | jq -cs '[.[] | select(.schema == "olm.bundle" \ and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \ and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \ | select(.type == "AllNamespaces" and .supported == true)) \ | select(.type == "AllNamespaces" and .supported == true)) \ and .spec.webhookdefinitions == null) | .package] | unique[]' and .spec.webhookdefinitions == null) | .package] | unique[]'
$ opm render <catalog_registry_url>:<tag> \ | jq -cs '[.[] | select(.schema == "olm.bundle" \ and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \ | select(.type == "AllNamespaces" and .supported == true)) \ and .spec.webhookdefinitions == null) | .package] | unique[]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
catalog_registry_url
-
指定目录 registry 的 URL,如
registry.redhat.io/redhat/redhat-operator-index
。 tag
指定目录的标签或版本,如
v4.19
或latest
。例 5.1. 示例命令
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.2. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,检查扩展的元数据内容:
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package") \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "<package_name>")' | select( .name == "<package_name>")'
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "<package_name>")'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.3. 示例命令
opm render \ registry.redhat.io/redhat/redhat-operator-index:v4.19 \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "openshift-pipelines-operator-rh")'
$ opm render \ registry.redhat.io/redhat/redhat-operator-index:v4.19 \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "openshift-pipelines-operator-rh")'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.4. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2.1. 常见目录查询 复制链接链接已复制到粘贴板!
您可以使用 opm
和 jq
CLI 工具查询目录。下表显示了您可以在安装、更新和管理扩展生命周期时使用的通用目录查询。
命令语法
opm render <catalog_registry_url>:<tag> | <jq_request>
$ opm render <catalog_registry_url>:<tag> | <jq_request>
其中:
catalog_registry_url
-
指定目录 registry 的 URL,如
registry.redhat.io/redhat/redhat-operator-index
。 tag
-
指定目录的标签或版本,如
v4.19
或latest
。 jq_request
- 指定您要在目录上运行的查询。
例 5.5. 示例命令
查询 | Request(请求) |
---|---|
目录中的可用软件包 |
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package")' | jq -s '.[] | select( .schema == "olm.package")'
|
支持 |
|
软件包元数据 |
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package") \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "<package_name>")' | select( .name == "<package_name>")'
|
软件包中的目录 Blob |
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>")' | jq -s '.[] | select( .package == "<package_name>")'
|
查询 | Request(请求) |
---|---|
软件包中的频道 |
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "<package_name>") | .name' | select( .package == "<package_name>") | .name'
|
频道中的版本 |
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>" ) \ | jq -s '.[] | select( .package == "<package_name>" ) \ | select( .schema == "olm.channel" ) \ | select( .schema == "olm.channel" ) \ | select( .name == "<channel_name>" ) .entries \ | select( .name == "<channel_name>" ) .entries \ | .[] | .name' | .[] | .name'
|
|
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select ( .name == "<channel_name>") \ | select ( .name == "<channel_name>") \ | select( .package == "<package_name>")' | select( .package == "<package_name>")'
|
查询 | Request(请求) |
---|---|
软件包中的捆绑包 |
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.bundle" ) \ | jq -s '.[] | select( .schema == "olm.bundle" ) \ | select( .package == "<package_name>") | .name' | select( .package == "<package_name>") | .name'
|
|
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.bundle" ) \ | jq -s '.[] | select( .schema == "olm.bundle" ) \ | select ( .name == "<bundle_name>") \ | select ( .name == "<bundle_name>") \ | select( .package == "<package_name>")' | select( .package == "<package_name>")'
|
5.1.3. 集群扩展权限 复制链接链接已复制到粘贴板!
在 Operator Lifecycle Manager (OLM) Classic 中,具有集群管理员特权的单一服务帐户管理所有集群扩展。
OLM v1 被设计为默认比 OLM (Classic) 更安全。OLM v1 使用在扩展的自定义资源(CR)中指定的服务帐户管理集群扩展。集群管理员可以为每个集群扩展创建一个服务帐户。因此,管理员可以遵循最小特权的原则,只分配基于角色的访问控制(RBAC)来安装和管理该扩展。
您必须向集群角色或角色添加每个权限。然后,您必须使用集群角色绑定或角色绑定将集群角色或角色绑定到服务帐户。
您可以将 RBAC 限定为集群或命名空间。使用集群角色和集群角色绑定将权限范围到集群。使用角色和角色绑定将权限范围到命名空间。无论您将权限范围到集群还是命名空间取决于您要安装和管理的扩展设计。
为简化以下步骤并改进可读性,以下示例清单使用范围到集群的权限。您可以进一步限制某些权限,方法是将它们限定到扩展名的命名空间,而不是集群。
如果已安装的扩展的新版本需要额外的权限,OLM v1 会停止更新过程,直到集群管理员授予这些权限。
5.1.3.1. 创建命名空间 复制链接链接已复制到粘贴板!
在创建用于安装和管理集群扩展的服务帐户前,您必须创建一个命名空间。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。
流程
运行以下命令,为您要安装的扩展的服务帐户创建新命名空间:
oc adm new-project <new_namespace>
$ oc adm new-project <new_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3.2. 为扩展创建服务帐户 复制链接链接已复制到粘贴板!
您必须创建一个服务帐户来安装、管理和更新集群扩展。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。
流程
创建服务帐户,类似以下示例:
apiVersion: v1 kind: ServiceAccount metadata: name: <extension>-installer namespace: <namespace>
apiVersion: v1 kind: ServiceAccount metadata: name: <extension>-installer namespace: <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.6.
extension-service-account.yaml
文件示例apiVersion: v1 kind: ServiceAccount metadata: name: pipelines-installer namespace: pipelines
apiVersion: v1 kind: ServiceAccount metadata: name: pipelines-installer namespace: pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用服务帐户:
oc apply -f extension-service-account.yaml
$ oc apply -f extension-service-account.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3.3. 下载扩展的捆绑包清单 复制链接链接已复制到粘贴板!
使用 opm
CLI 工具下载您要安装的扩展的捆绑包清单。使用您选择的 CLI 工具或文本编辑器查看清单,并找到安装和管理扩展所需的权限。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 您已决定要安装的扩展。
-
已安装
opm
CLI 工具。
流程
运行以下命令,检查您要安装的扩展的可用版本和镜像:
opm render <registry_url>:<tag_or_version> | \ jq -cs '.[] | select( .schema == "olm.bundle" ) | \ select( .package == "<extension_name>") | \ {"name":.name, "image":.image}'
$ opm render <registry_url>:<tag_or_version> | \ jq -cs '.[] | select( .schema == "olm.bundle" ) | \ select( .package == "<extension_name>") | \ {"name":.name, "image":.image}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.7. 示例命令
opm render registry.redhat.io/redhat/redhat-operator-index:v4.19 | \ jq -cs '.[] | select( .schema == "olm.bundle" ) | \ select( .package == "openshift-pipelines-operator-rh") | \ {"name":.name, "image":.image}'
$ opm render registry.redhat.io/redhat/redhat-operator-index:v4.19 | \ jq -cs '.[] | select( .schema == "olm.bundle" ) | \ select( .package == "openshift-pipelines-operator-rh") | \ {"name":.name, "image":.image}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.8. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建一个目录来提取您要安装的捆绑包镜像:
mkdir <new_dir>
$ mkdir <new_dir>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来更改目录:
cd <new_dir>
$ cd <new_dir>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查找您要安装并运行以下命令的镜像引用:
oc image extract <full_path_to_registry_image>@sha256:<sha>
$ oc image extract <full_path_to_registry_image>@sha256:<sha>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc image extract registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838
$ oc image extract registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来更改
manifests
目录:cd manifests
$ cd manifests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来查看 manifests 目录的内容。输出中列出了安装、管理和操作扩展所需的资源清单。
tree
$ tree
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.9. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
-
使用您首选的 CLI 工具或文本编辑器,查看
manifests
目录中集群服务版本(CSV)文件的install.spec.clusterpermissions
小节的内容。以下示例引用了 Red Hat OpenShift Pipelines Operator 的openshift-pipelines-operator-rh.clusterserviceversion.yaml
文件。 - 在以下流程中,保留此文件作为参考,同时为集群角色文件分配权限。
5.1.3.4. 安装和管理集群扩展所需的权限 复制链接链接已复制到粘贴板!
您必须检查集群扩展的捆绑包镜像中包含的清单,以分配所需的权限。服务帐户需要足够的基于角色的访问控制(RBAC)来创建和管理以下资源。
遵循最小特权和范围权限到特定资源名称的原则,且具有运行所需的最小 RBAC。
- 准入插件
-
因为 OpenShift Container Platform 集群使用
OwnerReferencesPermissionEnforcement
准入插件,集群扩展必须具有更新blockOwnerDeletion
和ownerReferences
finalizers 的权限。 - 扩展的控制器的集群角色和集群角色绑定
- 您必须定义 RBAC,以便安装服务帐户可以为扩展控制器创建和管理集群角色和集群角色绑定。
- 集群服务版本(CSV)
- 您必须为集群扩展的 CSV 中定义的资源定义 RBAC。
- 集群范围的捆绑包资源
-
您必须定义 RBAC,以创建和管理捆绑包中包含的任何集群范围的资源。如果集群范围的资源与另一个资源类型匹配,如
ClusterRole
,您可以在resources
或resourceNames
字段中将资源添加到预先存在的规则中。 - 自定义资源定义(CRD)
- 您必须定义 RBAC,以便安装服务帐户可以为扩展创建和管理 CRD。另外,您必须为 RBAC 的控制器授予服务帐户来管理其 CRD。
- 部署
- 您必须为安装服务帐户定义 RBAC,以创建和管理扩展控制器所需的部署,如服务和配置映射。
- 扩展权限
- 您必须包含 CSV 中定义的权限和集群权限的 RBAC。安装服务帐户需要能够向扩展控制器授予这些权限,因为扩展控制器需要这些权限才能正常运行。
- 命名空间范围的捆绑包资源
- 您必须为任何命名空间范围的捆绑包资源定义 RBAC。安装服务帐户需要相应的权限来创建和管理资源,如配置映射或服务。
- 角色和角色绑定
- 您必须为 CSV 中定义的任何角色或角色绑定定义 RBAC。安装服务帐户需要相应的权限来创建和管理这些角色和角色绑定。
- 服务帐户
- 您必须定义 RBAC,以便安装服务帐户可以为扩展控制器创建和管理服务帐户。
5.1.3.5. 为扩展创建集群角色 复制链接链接已复制到粘贴板!
您必须查看集群服务版本(CSV)的 install.spec.clusterpermissions
小节,并仔细查看扩展的清单,以定义您要安装的扩展所需的基于角色的访问控制(RBAC)。您必须通过将所需的 RBAC 从 CSV 复制到新清单来创建集群角色。
如果要测试在 OLM v1 中安装和更新扩展的过程,您可以使用以下集群角色授予集群管理员权限。此清单仅用于测试目的。它不应该在生产环境中使用。
以下流程使用 Red Hat OpenShift Pipelines Operator 的 openshift-pipelines-operator-rh.clusterserviceversion.yaml
文件作为示例。示例包括安装和管理 OpenShift Pipelines Operator 所需的 RBAC 摘录。有关完整的清单,请参阅"Red Hat OpenShift Pipelines Operator 的集群角色示例"。
为简化以下步骤并改进可读性,以下示例清单使用范围到集群的权限。您可以进一步限制某些权限,方法是将它们限定到扩展名的命名空间,而不是集群。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 您已在要安装的扩展的镜像引用中下载了清单。
流程
创建新集群角色清单,如下例所示:
示例
<extension>-cluster-role.yaml
文件apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <extension>-installer-clusterrole
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <extension>-installer-clusterrole
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑集群角色清单使其包含在扩展上更新终结器的权限,如下例所示:
示例 <extension>-cluster-role.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定来自扩展的自定义资源(CR)的
metadata.name
字段的值。
在扩展的 CSV 文件中的
rules.resources
字段中搜索clusterrole
和clusterrolebindings
值。在扩展的 CSV 文件中的
rules.resources
字段中搜索customresourcedefinitions
值。将 API 组、资源、操作动词和资源名称复制到您的清单中,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在
rules.resources
spec 中搜索带有permissions
和clusterPermissions
值的小节。将 API 组、资源、操作动词和资源名称复制到您的清单中,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在
install.spec.deployments
小节中搜索资源的 CSV 文件。将 API 组、资源、操作动词和资源名称复制到您的清单中,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在扩展的 CSV 文件中的
rules.resources
字段中搜索services
和configmaps
值。将 API 组、资源、操作动词和资源名称复制到您的清单中,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,将集群角色清单添加到集群中:
oc apply -f <extension>-installer-clusterrole.yaml
$ oc apply -f <extension>-installer-clusterrole.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc apply -f pipelines-installer-clusterrole.yaml
$ oc apply -f pipelines-installer-clusterrole.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3.6. Red Hat OpenShift Pipelines Operator 的集群角色示例 复制链接链接已复制到粘贴板!
如需 OpenShift Pipelines Operator 的完整集群角色清单,请参阅以下示例。
5.1.3.7. 为扩展创建集群角色绑定 复制链接链接已复制到粘贴板!
创建服务帐户和集群角色后,您必须将集群角色绑定到带有集群角色绑定清单的服务帐户。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 您已为要安装的扩展创建并应用以下资源:
- Namespace
- 服务帐户
- 集群角色
流程
创建集群角色绑定将集群角色绑定绑定到服务帐户,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.10.
pipelines-cluster-role-binding.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用集群角色绑定:
oc apply -f pipelines-cluster-role-binding.yaml
$ oc apply -f pipelines-cluster-role-binding.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.4. 在所有命名空间中安装集群扩展 复制链接链接已复制到粘贴板!
您可以通过创建自定义资源 (CR) 并将其应用到集群来从目录安装扩展。Operator Lifecycle Manager (OLM) v1 支持安装集群扩展,包括 registry+v1
捆绑包格式的 OLM (Classic) Operator,它们仅限于集群。如需更多信息,请参阅支持的扩展。
对于 OpenShift Container Platform 4.19,适用于 OLM v1 的流程都是基于 CLI 的。另外,管理员也可以使用普通方法(如 Import YAML 和 Search 页面)在 web 控制台中创建和查看相关对象。但是,现有的 OperatorHub 和 Installed Operators 页还不会显示 OLM v1 组件。
先决条件
- 您已创建了服务帐户,并分配了足够的基于角色的访问控制 (RBAC) 来安装、更新和管理您要安装的扩展。如需更多信息,请参阅"集群扩展权限"。
流程
创建一个类似以下示例的 CR:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定您要安装捆绑包的命名空间,如
pipelines
或my-extension
。扩展仍然是集群范围的,可能包含在不同命名空间中安装的资源。 - 2
- 指定您为安装、更新和管理扩展创建的服务帐户的名称。
- 3
- 可选:将频道名称指定为数组,如
pipelines-1.14
或latest
。 - 4
- 可选:指定您要安装的软件包的版本或版本范围,如
1.14.0
、1.14.x
或>=1.16
。如需更多信息,请参阅"示例自定义资源(CR)指定目标版本"和"支持版本范围"。 - 5
- 可选:指定升级约束策略。如果未指定,则默认设置为
CatalogProvided
。只有在新版本满足软件包作者设置的升级限制时,CatalogProvided
设置才会更新。要强制更新或回滚,请将字段设置为SelfCertified
。如需更多信息,请参阅"设置更新或回滚"。
pipelines-operator.yaml
CR 示例
运行以下命令,将 CR 应用到集群:
oc apply -f pipeline-operator.yaml
$ oc apply -f pipeline-operator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
clusterextension.olm.operatorframework.io/pipelines-operator created
clusterextension.olm.operatorframework.io/pipelines-operator created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,以 YAML 格式查看 Operator 或扩展 CR:
oc get clusterextension pipelines-operator -o yaml
$ oc get clusterextension pipelines-operator -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.11. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
spec.channel
- 显示扩展 CR 中定义的频道。
spec.version
- 显示扩展 CR 中定义的版本或版本范围。
status.conditions
- 显示扩展状态和健康的信息。
type: Deprecated
显示以下一个或多个是否已弃用:
type: PackageDeprecated
- 显示解析的软件包是否已弃用。
type: ChannelDeprecated
- 显示解析的频道是否已弃用。
type: BundleDeprecated
- 显示解析捆绑包是否已弃用。
status
字段中的False
值表示reason: Deprecated
条件已弃用。status
字段中的True
值表示reason: Deprecated
条件已被弃用。installedBundle.name
- 显示安装的捆绑包的名称。
installedBundle.version
- 显示安装的捆绑包的版本。
5.1.5. 在特定命名空间中部署集群扩展(技术预览) 复制链接链接已复制到粘贴板!
安装模式是 Operator Lifecycle Manager (OLM) Classic 的多租户功能。OLM v1 不支持多租户,并使用 AllNamespaces
安装模式将集群扩展部署到集群。
但是,一些现有集群扩展不支持 AllNamespaces
安装模式。您可以使用 OwnNamespace
或 SingleNamespace
安装模式作为 registry+v1
Operator 捆绑包的技术预览功能在特定命名空间中部署扩展。
不支持 MultiNamespace
安装模式。因此,您无法在集群中多次安装同一 Operator。
支持在特定命名空间中部署集群扩展只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
如需更多信息,请参阅"支持扩展"。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群 -
在集群中启用
TechPreviewNoUpgrade
功能集 -
支持
OwnNamespace
或SingleNamespace
安装模式的 Operator
流程
创建自定义资源(CR),类似以下示例:
示例
<cluster-extension-cr>.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
namespace
指定您要部署集群扩展的命名空间。
-
如果
namespace
参数为空,或者注解不存在,则使用AllNamespaces
安装模式部署扩展。 -
如果
namespace
参数的值与spec.namespace
字段中的installed_namespace
参数相同,则使用OwnNamespace
安装模式部署扩展。 -
如果
namespace
参数指定与installed_namespace
参数不同的命名空间,则使用SingleNamespace
安装模式部署扩展。
-
如果
运行以下命令,将 CR 应用到集群:
oc apply -f <cluster_extension_cr>.yaml
$ oc apply -f <cluster_extension_cr>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.6. 集群扩展的 preflight 权限检查(技术预览) 复制链接链接已复制到粘贴板!
当您尝试安装扩展时,Operator Controller 会执行安装过程的空运行。此空运行验证指定的服务帐户是否可以执行安装扩展所需的所有操作。这包括在捆绑包中创建所有 Kubernetes 对象,以及捆绑包定义的角色和绑定的基于角色的访问控制(RBAC)规则。
对集群扩展的 preflight 权限检查只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
如果服务帐户缺少任何所需的 RBAC 规则,preflight 检查会在实际安装进行前失败。如果 preflight 检查失败,Operator Controller 会在扩展的状态条件和 Operator Controller 日志中报告错误。
要继续安装,请更新角色和绑定,为服务帐户授予缺少的权限并应用更改。如果没有错误,Operator Controller 会协调更新的权限并完成安装。
5.1.6.1. preflight 权限检查的报告示例 复制链接链接已复制到粘贴板!
以下报告表示服务帐户需要以下缺少的权限:
-
用于对整个集群核心 API 组中的
services
资源执行list
和watch
操作的 RBAC 规则 -
用于对
pipelines
命名空间的apps
API 组中的deployments
资源执行create
操作的 RBAC 规则。
您可以在集群扩展的状态条件中,从 preflight 权限检查报告。oc describe clusterextension
命令打印有关集群扩展的信息,包括状态条件。
示例命令
oc describe clusterextension <extension_name>
$ oc describe clusterextension <extension_name>
报告示例
Namespace
-
在命名空间级别指定所需的 RBAC 规则范围,如
pipelines
命名空间。空命名空间值""
表示您必须将权限范围到集群。 APIGroups
指定所需权限应用到的 API 组的名称。API 组中的空值(
[]
)表示权限应用到核心 API 组。例如,服务、secret 和配置映射都是核心资源。如果资源属于命名 API 组,报告列出了方括号之间的名称。例如,
APIGroups:[apps]
值表示扩展需要 RBAC 规则对apps
API 组中的资源执行操作。Resources
- 指定需要权限的资源类型。例如,服务、secret 和自定义资源定义是常见的资源类型。
Verbs
- 指定服务帐户执行操作(或 verbs)所需的权限。如果报告列出了几个操作动词,则所有列出的操作动词都需要 RBAC 规则。
5.1.6.2. 常见权限错误 复制链接链接已复制到粘贴板!
- 缺少操作动词
- 服务帐户没有执行所需操作的权限。要解决这个问题,请更新或创建角色和绑定来授予所需的权限。角色和角色绑定定义命名空间的资源权限。集群角色和集群角色绑定定义集群的资源权限。
- 权限升级
- 服务帐户没有足够的权限来创建扩展所需的角色或集群角色。当发生这种情况时,preflight 检查会报告缺少动词,以防止特权升级。要解决这个问题,请为服务帐户授予足够的权限,使其可以创建角色。
- 缺少角色引用
-
扩展引用 Operator Controller 无法找到的角色或集群角色。当发生这种情况时,preflight 检查会列出缺少的角色,并报告
授权评估错误
。要解决这个问题,请创建或更新角色和集群角色,以确保所有角色引用都存在。
5.1.7. 更新集群扩展 复制链接链接已复制到粘贴板!
您可以通过手动编辑自定义资源 (CR) 并应用更改来更新集群扩展或 Operator。
先决条件
- 已安装 Operator 或扩展。
-
已安装
jq
CLI 工具。 -
已安装
opm
CLI 工具。
流程
通过完成以下步骤,检查目录文件本地副本中的频道和版本信息:
运行以下命令,从所选软件包中获取频道列表:
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "openshift-pipelines-operator-rh") | .name' | select( .package == "openshift-pipelines-operator-rh") | .name'
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "openshift-pipelines-operator-rh") | .name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.12. 示例命令
opm render registry.redhat.io/redhat/redhat-operator-index:v4.19 \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "openshift-pipelines-operator-rh") | .name'
$ opm render registry.redhat.io/redhat/redhat-operator-index:v4.19 \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "openshift-pipelines-operator-rh") | .name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.13. 输出示例
"latest" "pipelines-1.14" "pipelines-1.15" "pipelines-1.16" "pipelines-1.17"
"latest" "pipelines-1.14" "pipelines-1.15" "pipelines-1.16" "pipelines-1.17"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取频道中发布的版本列表:
opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>" ) \ | jq -s '.[] | select( .package == "<package_name>" ) \ | select( .schema == "olm.channel" ) \ | select( .schema == "olm.channel" ) \ | select( .name == "<channel_name>" ) | .entries \ | select( .name == "<channel_name>" ) | .entries \ | .[] | .name' | .[] | .name'
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>" ) \ | select( .schema == "olm.channel" ) \ | select( .name == "<channel_name>" ) | .entries \ | .[] | .name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.14. 示例命令
opm render registry.redhat.io/redhat/redhat-operator-index:v4.19 \ | jq -s '.[] | select( .package == "openshift-pipelines-operator-rh" ) \ | select( .schema == "olm.channel" ) | select( .name == "latest" ) \ | .entries | .[] | .name'
$ opm render registry.redhat.io/redhat/redhat-operator-index:v4.19 \ | jq -s '.[] | select( .package == "openshift-pipelines-operator-rh" ) \ | select( .schema == "olm.channel" ) | select( .name == "latest" ) \ | .entries | .[] | .name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.15. 输出示例
"openshift-pipelines-operator-rh.v1.15.0" "openshift-pipelines-operator-rh.v1.16.0" "openshift-pipelines-operator-rh.v1.17.0" "openshift-pipelines-operator-rh.v1.17.1"
"openshift-pipelines-operator-rh.v1.15.0" "openshift-pipelines-operator-rh.v1.16.0" "openshift-pipelines-operator-rh.v1.17.0" "openshift-pipelines-operator-rh.v1.17.1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,查找在 Operator 或扩展 CR 中指定哪个版本或频道:
oc get clusterextension <operator_name> -o yaml
$ oc get clusterextension <operator_name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc get clusterextension pipelines-operator -o yaml
$ oc get clusterextension pipelines-operator -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.16. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法之一编辑 CR:
如果要将 Operator 或扩展固定到特定版本,如
1.15.0
,请编辑类似以下示例的 CR:pipelines-operator.yaml
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将版本从
1.14.x
更新至1.15.0
如果要定义可接受的更新版本范围,请编辑类似以下示例的 CR:
指定了版本范围的 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定所需的版本范围,大于
1.15
版本,但小于1.17
。如需更多信息,请参阅"支持版本范围"和"Version 比较字符串"。
如果要更新到可以从频道解析的最新版本,请编辑类似以下示例的 CR:
带有指定频道的 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 安装可从指定频道解析的最新版本。对频道的更新会自动安装。输入值作为数组。
如果要指定频道和版本范围,请编辑类似以下示例的 CR:
带有指定频道和版本范围的 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需更多信息,请参阅"指定目标版本的示例自定义资源(CR) "。
运行以下命令,将更新应用到集群:
oc apply -f pipelines-operator.yaml
$ oc apply -f pipelines-operator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
clusterextension.olm.operatorframework.io/pipelines-operator configured
clusterextension.olm.operatorframework.io/pipelines-operator configured
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证频道和版本更新是否已应用:
oc get clusterextension pipelines-operator -o yaml
$ oc get clusterextension pipelines-operator -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.17. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
如果您指定已弃用或不存在的目标版本或频道,您可以运行以下命令来检查扩展的状态:
oc get clusterextension <operator_name> -o yaml
$ oc get clusterextension <operator_name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.18. 不存在版本的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.8. 删除 Operator 复制链接链接已复制到粘贴板!
您可以通过删除 ClusterExtension
自定义资源 (CR) 来删除 Operator 及其自定义资源定义 (CRD)。
先决条件
- 已安装目录。
- 已安装 Operator。
流程
运行以下命令来删除 Operator 及其 CRD:
oc delete clusterextension <operator_name>
$ oc delete clusterextension <operator_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
clusterextension.olm.operatorframework.io "<operator_name>" deleted
clusterextension.olm.operatorframework.io "<operator_name>" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证您的 Operator 及其资源已被删除:
运行以下命令验证 Operator 已被删除:
oc get clusterextensions
$ oc get clusterextensions
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No resources found
No resources found
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 Operator 的系统命名空间是否已删除:
oc get ns <operator_name>-system
$ oc get ns <operator_name>-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Error from server (NotFound): namespaces "<operator_name>-system" not found
Error from server (NotFound): namespaces "<operator_name>-system" not found
Copy to Clipboard Copied! Toggle word wrap Toggle overflow