4.4. 目录内容解析
当您指定要在自定义资源(CR)中安装的集群扩展时,Operator Lifecycle Manager (OLM) v1 使用目录选择来解析安装的内容。
您可以执行以下操作来控制目录内容的选择:
- 指定标签以选择目录。
- 使用匹配表达式在目录之间执行复杂的过滤。
- 设置目录优先级。
如果没有指定任何目录选择条件,Operator Lifecycle Manager (OLM) v1 从提供所需软件包的集群上任何可用目录选择一个扩展。
在解析过程中,默认情况下没有弃用的捆绑包优先于已弃用的捆绑包。
4.4.1. 按名称选择目录 复制链接链接已复制到粘贴板!
当目录添加到集群中时,会使用目录自定义资源(CR)的 metadata.name
字段的值来创建标签。在扩展的 CR 中,您可以使用 spec.source.catalog.selector.matchLabels
字段指定目录名称。matchLabels
字段的值使用以下格式:
从 metadata.name
字段派生的标签示例
- 1
- 从
metadata.name
字段派生的标签,并在应用目录时自动添加。
以下示例从具有 openshift-redhat-operators
标签的目录解析 <example_extension>-operator
软件包:
扩展 CR 示例
4.4.2. 根据标签或表达式选择目录 复制链接链接已复制到粘贴板!
您可以使用集群目录的自定义资源(CR)中的标签将元数据添加到目录中。然后,您可以通过指定分配的标签或使用集群扩展 CR 中的表达式来过滤目录选择。
以下集群目录 CR 将值为 true
的 example.com/support
标签添加到 catalog-a
集群目录中:
带有标签的集群目录 CR 示例
以下集群扩展 CR 使用 matchLabels
选择器来选择带有 example.com/support
标签的目录,值为 true
:
使用 matchLabels
选择器的集群扩展 CR 示例
您可以使用 matchExpressions
字段为标签执行更复杂的过滤。以下集群扩展 CR 选择带有 example.com/support
标签的目录,以及 production
或 supported
的值:
带有 matchExpression
选择器的集群扩展 CR 示例
如果同时使用 matchLabels
和 matchExpressions
字段,则所选目录必须满足所有指定标准。
4.4.3. 按标签或表达式进行目录排除 复制链接链接已复制到粘贴板!
您可以在带有 NotIn
或 DoesNotExist
操作的元数据上使用 match 表达式来排除目录。
以下 CR 将 example.com/testing
标签添加到 unwanted-catalog-1
和 unwanted-catalog-2
集群目录中:
集群池 CR 示例
集群池 CR 示例
以下集群扩展 CR 从 unwanted-catalog-1
目录中排除选择:
排除一个特定目录的集群扩展 CR 示例
以下集群扩展 CR 从没有 example.com/testing
标签的目录中进行选择。因此,unwanted-catalog-1
和 unwanted-catalog-2
都将重目录选择中排除。
使用特定标签排除目录的集群扩展 CR 示例
4.4.4. 根据优先级选择目录 复制链接链接已复制到粘贴板!
当多个目录提供相同的软件包时,您可以通过在每个目录的自定义资源(CR)中指定优先级来解决不确定性。如果未指定,则目录的默认优先级值为 0
。优先级可以是任意正或负 32 位整数。
- 在捆绑包解析过程中,将选择具有更高优先级值的目录,而不是优先级较低的目录。
- 未弃用的捆绑包优先于已弃用的捆绑包。
- 如果目录中存在多个具有相同优先级的捆绑包,并且目录选择是模糊的,则会打印错误。
具有较高优先级的集群目录 CR 示例
具有较低优先级的集群目录 CR 示例
4.4.5. 目录选择错误故障排除 复制链接链接已复制到粘贴板!
如果因为模糊或未选择目录而导致捆绑包解析失败,则会在集群扩展的 status.conditions
字段中输出错误消息。
执行以下操作排除目录选择错误:
- 使用标签或表达式重新定义您的选择标准。
- 调整目录优先级。
- 确保只有一个捆绑包与您的软件包名称和版本要求匹配。