拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Argo Workflows Java SDK 中的 ResourceFilter 模型:基于 Kubernetes 对象元数据的资源事件过滤机制

Argo Workflows Java SDK 中的 ResourceFilter 模型基于 Kubernetes 对象元数据的资源事件过滤机制【免费下载链接】argo-workflowsWorkflow Engine for Kubernetes项目地址: https://gitcode.com/gh_mirrors/ar/argo-workflows本文围绕 Argo Workflows Java SDKsdks/java/client中生成的GithubComArgoprojArgoEventsPkgApisEventsV1alpha1ResourceFilter模型类展开讲解该模型在 Resource 事件源resource event source场景下如何利用 Kubernetes 对象的 ObjectMeta 与字段信息对资源事件进行二次过滤。读完本文你将掌握afterStart、createdBy、fields、labels、prefix五个字段的语义与取值规则理解其与 Kubernetes 原生 field selector / label selector 的异同并能在 Java 客户端中正确构造这一过滤条件。ResourceFilter模型来自 Argo Events 的events/v1alpha1API 组由 Argo Workflows 仓库的 Java SDK 客户端以生成代码的形式对外提供。在 OpenAPI 规范中它的完整定义位于 api/openapi-spec/swagger.json标题为 ResourceFilter contains K8s ObjectMeta information to further filter resource event objects即通过 Kubernetes 对象元数据信息对资源事件对象做进一步过滤。模型概览一个承载五种过滤维度的配置对象从 sdks/java/client/docs/GithubComArgoprojArgoEventsPkgApisEventsV1alpha1ResourceFilter.md 中可以看到该模型共包含 5 个可选属性覆盖了时间维度afterStart、createdBy、字段维度fields、标签维度labels和名称前缀维度prefix属性Java 类型说明是否必填afterStartBoolean资源是否在开始时间之后创建可选createdByjava.time.Instant资源的创建时间限定条件可选fieldsListGithubComArgoprojArgoEventsPkgApisEventsV1alpha1Selector类似 Kubernetes 字段选择器的字段过滤条件可选labelsListGithubComArgoprojArgoEventsPkgApisEventsV1alpha1Selector类似 Kubernetes 标签选择器的标签过滤条件可选prefixString应用于资源名称的前缀过滤可选在 OpenAPI 规范中这些字段被精确地标注为optional见 api/openapi-spec/swagger.json即所有过滤维度均为可选项实际使用时可以按需组合——例如只按标签过滤、只按名称前缀过滤或将多个维度叠加使用。时间维度过滤afterStart 与 createdBy时间维度是资源事件过滤中最直观的两个开关它们共同刻画了资源对象的年龄afterStartBoolean语义为如果资源是在开始时间之后创建的则该事件被视为有效。它通常配合事件源的启动时间使用用于丢弃那些在事件源启动之前就已存在的历史资源避免在监听器启动时被存量对象灌满事件流。createdByjava.time.Instant语义为如果资源是在指定时间之前创建的则该事件被视为有效。Java 侧将该字段映射为java.time.Instant而在底层 JSON/OpenAPI 表示中它引用的是 Kubernetes 的io.k8s.apimachinery.pkg.apis.meta.v1.Time类型见 api/openapi-spec/swagger.json即标准的 RFC 3339 时间戳。值得注意两者是互补的判定条件afterStart校验创建时间晚于某一起点createdBy校验创建时间早于某一终点配合使用即可圈定一个精确的时间窗口用于只处理某个时间段内创建的 Kubernetes 资源。字段与标签过滤复用 Selector 条件操作符fields与labels两个属性的元素类型都是 GithubComArgoprojArgoEventsPkgApisEventsV1alpha1Selector。该模型的完整定义为Selector represents conditional operation to select K8s objects.Selector 表示选择 Kubernetes 对象的条件操作。其自身包含三个字段属性Java 类型说明keyString键名operationString支持的操作符如、!等默认为valueString值对应 OpenAPI 定义见 api/openapi-spec/swagger.json。也就是说一个ResourceFilter实际上是若干条key operation value三元组的集合每条三元组就是一个独立的条件断言。fields支持正则的字段选择器fields的语义在 api/openapi-spec/swagger.json 中有详细描述Fields provide field filters similar to K8s field selector. Unlike K8s field selector, it supports arbitrary fields likespec.serviceAccountName, and the value could be a string or a regex. Same as K8s field selector, operator,and!are supported.从中可以提炼出三个关键能力类似 Kubernetes 字段选择器field selector语法与 Kubernetes 原生字段选择器一致支持、、!三种操作符支持任意嵌套字段不局限于 Kubernetes 内置可选的顶层字段可以深入到任意路径例如spec.serviceAccountName这类嵌套字段值可以是字符串或正则表达式这是相比 Kubernetes 原生字段选择器的重要增强允许用正则去匹配字段值而不是只能做精确比较。labels多值逗号分隔的标签选择器labels的语义在 api/openapi-spec/swagger.json 中有详细描述Labels provide listing options to K8s API to watch resource/s. Unlike K8s field selector, multiple values are passed as comma separated values instead of list of values. Eg: value: value1,value2. Same as K8s label selector, operator,,!,exists,!,notin,in,gtandltare supported.可以提炼出两个要点多值用逗号分隔与 Kubernetes 字段选择器不同那里使用值列表标签过滤的多个取值以逗号分隔的字符串传入例如value: value1,value2操作符集合更丰富除、、!之外还支持 Kubernetes 标签选择器语义中的exists、!、notin、in、gt、lt覆盖了存在性判断、集合判断与数值大小比较。与 Kubernetes 原生选择器的差异小结维度Kubernetes 原生ResourceFilter字段过滤目标受限于内置字段支持spec.serviceAccountName等任意嵌套字段字段值匹配精确匹配支持字符串或正则标签多值值列表逗号分隔字符串如value1,value2标签操作符、、!、in、notin、exists、!额外支持gt、lt名称前缀过滤prefixprefix是最简单的一个过滤维度其语义为 Prefix filter is applied on the resource name见 api/openapi-spec/swagger.json即对资源名称做前缀匹配。与labels和fields需要借助Selector三元组不同prefix只是一个普通字符串适合用于按命名约定快速圈定资源例如只关注名称以build-或data-开头的对象。在 Java SDK 中的使用方式ResourceFilter是 Java SDK 客户端自动生成的模型类之一与其相关的模型页面共同位于 sdks/java/client/docs 目录。从生成代码的结构可以推断该模型遵循 OpenAPI Generator 的标准 Bean 模式每个属性对应一个私有字段与公开的 getter/setter 方法字段赋值后可整体序列化为事件源配置的 JSON 结构。在实际使用中ResourceFilter通常作为 Resource 事件源的过滤配置出现。与之关联的模型还包括GithubComArgoprojArgoEventsPkgApisEventsV1alpha1ResourceEventSource定义 Resource 事件源的监听目标如group、version、resource、namespace等GithubComArgoprojArgoEventsPkgApisEventsV1alpha1Selector作为fields与labels的元素类型GithubComArgoprojArgoEventsPkgApisEventsV1alpha1EventDependencyFilter事件依赖过滤器的更上层抽象ResourceFilter是其中 Resource 场景的具体实现维度之一。一个典型的组合式过滤条件可以这样描述通过prefix圈定资源名称范围通过labels限定对象标签例如appworkflow-runner再通过fields深入匹配spec中的嵌套字段最后用afterStart/createdBy限定资源的创建时间窗口。五个维度相互独立、可以自由叠加最终只有当资源对象同时满足所有已配置维度时对应的事件才被视为有效。小结GithubComArgoprojArgoEventsPkgApisEventsV1alpha1ResourceFilter是 Argo Workflows Java SDK 中面向 Kubernetes 资源事件的过滤模型其核心价值在于将 Kubernetes 原生的字段选择器与标签选择器能力扩展到了任意嵌套字段 正则匹配 更丰富的操作符的层面并补充了时间与名称前缀两个便捷维度。在编程时你可以用afterStart/createdBy控制资源的时间窗口用fields对spec等任意路径做字段级过滤支持正则用labels按标签做集合与存在性判断支持in、notin、exists、gt、lt用prefix按资源名称前缀快速筛选。全部字段均为可选五个维度可自由组合具体的类型定义与默认行为以 api/openapi-spec/swagger.json 与 sdks/java/client/docs/GithubComArgoprojArgoEventsPkgApisEventsV1alpha1ResourceFilter.md 为准可作为 Java 客户端开发时的权威速查依据。【免费下载链接】argo-workflowsWorkflow Engine for Kubernetes项目地址: https://gitcode.com/gh_mirrors/ar/argo-workflows创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门