ApiServerSource 参考¶
本主题提供有关 ApiServerSource 对象的可配置字段的参考信息。
ApiServerSource¶
ApiServerSource 定义支持以下字段
| 字段 | 描述 | 必需或可选 |
|---|---|---|
apiVersion |
指定 API 版本,例如 sources.knative.dev/v1。 |
必需 |
kind |
将此资源对象标识为 ApiServerSource 对象。 | 必需 |
metadata |
指定唯一标识 ApiServerSource 对象的元数据。例如,name。 |
必需 |
[metadata.annotations][#features] |
指定启用某些功能的元数据。请参阅相关部分。 | 可选 |
spec |
指定此 ApiServerSource 对象的配置信息。 | 必需 |
spec.resources |
源跟踪的资源,以便它可以从 Kubernetes ApiServer 发送相关的生命周期事件。包括一个可选的标签选择器以帮助筛选。 | 必需 |
spec.mode |
EventMode 控制事件的格式。设置为 Reference 以发送正在监视资源的 dataref 事件类型。事件负载中仅包含对资源的引用。设置为 Resource 以在负载中包含完整的资源生命周期事件。默认为 Reference。 |
可选 |
spec.owner |
ResourceOwner 是一个附加过滤器,仅跟踪由特定资源类型拥有的资源。如果 ResourceOwner 与 Resources[n] 匹配,则 Resources[n] 允许通过 ResourceOwner 过滤器。 | 可选 |
spec.serviceAccountName |
用于运行此源的 ServiceAccount 的名称。如果未设置,则默认为 default。 |
可选 |
spec.sink |
引用一个对象,该对象解析为用作接收器的 URI。 | 必需 |
spec.ceOverrides |
定义覆盖,以控制发送到接收器的事件的输出格式和修改。 | 可选 |
spec.namespaceSelector |
指定一个标签选择器以跟踪多个命名空间。如果未指定,将跟踪 ApiServerSource 的命名空间。 | 可选 |
Resources 参数¶
resources 参数指定源跟踪的资源,以便它可以从 Kubernetes ApiServer 发送相关的生命周期事件。该参数包括一个可选的标签选择器以帮助筛选。
resources 定义支持以下字段
| 字段 | 描述 | 必需或可选 |
|---|---|---|
apiVersion |
要监视的资源的 API 版本。 | 必需 |
kind |
要监视的资源的类型。 | 必需 |
selector |
LabelSelector 将此源过滤到那些通过标签选择器的资源对象。 | 可选 |
selector.matchExpressions |
标签选择器要求的列表。要求是 AND 关系。 | 使用 matchExpressions 或 matchLabels 中的一个 |
selector.matchExpressions.key |
选择器应用的标签键。 | 如果使用 matchExpressions,则为必需 |
selector.matchExpressions.operator |
表示键与一组值的关系。有效运算符是 In、NotIn、Exists 和 DoesNotExist。 |
如果使用 matchExpressions,则为必需 |
selector.matchExpressions.values |
字符串值数组。如果 operator 是 In 或 NotIn,则 values 数组必须非空。如果 operator 是 Exists 或 DoesNotExist,则 values 数组必须为空。在战略合并补丁期间,此数组将被替换。 |
如果使用 matchExpressions,则为必需 |
selector.matchLabels |
键值对的映射。matchLabels 映射中的每个键值对等效于 matchExpressions 的一个元素,其中键字段是 matchLabels.<key>,operator 是 In,并且 values 数组只包含“matchLabels”。 |
使用 matchExpressions 或 matchLabels 中的一个 |
示例: Resources 参数¶
给定以下 YAML,ApiServerSource 对象接收命名空间中所有 Pod 和 Deployments 的事件
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
# ...
resources:
- apiVersion: v1
kind: Pod
- apiVersion: apps/v1
kind: Deployment
示例: 使用 matchExpressions 的 Resources 参数¶
给定以下 YAML,ApiServerSource 对象接收命名空间中所有带有标签 app=myapp 或 app=yourapp 的 Pod 的事件
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
# ...
resources:
- apiVersion: v1
kind: Pod
selector:
matchExpressions:
- key: app
operator: In
values:
- myapp
- yourapp
示例: 使用 matchLabels 的 Resources 参数¶
给定以下 YAML,ApiServerSource 对象接收命名空间中所有带有标签 app=myapp 的 Pod 的事件
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
# ...
resources:
- apiVersion: v1
kind: Pod
selector:
matchLabels:
app: myapp
ServiceAccountName 参数¶
ServiceAccountName 是对 Kubernetes 服务帐户的引用。
要跟踪指定 resources 的生命周期事件,您必须为 ApiServerSource 对象分配适当的权限。
示例: 跟踪 Pod¶
以下 YAML 文件创建了一个 ServiceAccount、Role 和 RoleBinding,并授予 ApiServerSource 在命名空间 apiserversource-example 中获取、列出和监视 Pod 资源的权限。
示例 ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: test-service-account
namespace: apiserversource-example
具有获取、列出和监视 Pod 资源权限的示例角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: test-role
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
示例 RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: test-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: test-role
subjects:
- kind: ServiceAccount
name: test-service-account
namespace: apiserversource-example
使用 test-service-account 的示例 ApiServerSource
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: test-apiserversource
namespace: apiserversource-example
spec:
# ...
serviceAccountName: test-service-account
...
Owner 参数¶
ResourceOwner 是一个附加过滤器,仅跟踪由特定资源类型拥有的资源。如果 ResourceOwner 与 Resources[n] 匹配,则 Resources[n] 允许通过 ResourceOwner 过滤器。
owner 定义支持以下字段
| 字段 | 描述 | 必需或可选 |
|---|---|---|
apiVersion |
要监视的资源的 API 版本。 | 必需 |
kind |
要监视的资源的类型。 | 必需 |
示例: Owner 参数¶
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
...
owner:
apiVersion: apps/v1
kind: Deployment
...
NamespaceSelector 参数¶
NamespaceSelector 是一个可选的标签选择器,可用于定位多个命名空间。如果选择器未设置,则将跟踪 ApiServerSource 的命名空间。
namespaceSelector 支持以下字段
| 字段 | 描述 | 必需或可选 |
|---|---|---|
matchExpressions |
标签选择器要求的列表。要求是 AND 关系。 | 使用 matchExpressions 或 matchLabels 中的一个 |
matchExpressions.key |
选择器应用的标签键。 | 如果使用 matchExpressions,则为必需 |
matchExpressions.operator |
表示键与一组值的关系。有效运算符是 In、NotIn、Exists 和 DoesNotExist。 |
如果使用 matchExpressions,则为必需 |
matchExpressions.values |
字符串值数组。如果 operator 是 In 或 NotIn,则 values 数组必须非空。如果 operator 是 Exists 或 DoesNotExist,则 values 数组必须为空。在战略合并补丁期间,此数组将被替换。 |
如果使用 matchExpressions,则为必需 |
matchLabels |
键值对的映射。matchLabels 映射中的每个键值对等效于 matchExpressions 的一个元素,其中键字段是 matchLabels.<key>,operator 是 In,并且 values 数组只包含“matchLabels”。 |
使用 matchExpressions 或 matchLabels 中的一个 |
示例: 使用 matchExpressions 定位多个命名空间¶
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
...
namespaceSelector:
matchExpressions:
- key: environment
operator: In
values:
- production
- development
...
示例: 使用 matchLabels 定位多个命名空间¶
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
...
namespaceSelector:
matchLabels:
environment: production
...
示例: 使用空选择器定位所有命名空间¶
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
...
namespaceSelector: {}
...
CloudEvent 覆盖¶
CloudEvent 覆盖定义了用于控制发送到接收器的事件的输出格式和修改的覆盖。
ceOverrides 定义支持以下字段
| 字段 | 描述 | 必需或可选 |
|---|---|---|
extensions |
指定哪些属性被添加到出站事件或被其覆盖。每个 extensions 键值对作为属性扩展独立地设置在事件上。 |
可选 |
注意
只允许使用有效的 CloudEvent 属性名称 作为扩展。您不能从扩展覆盖配置中设置规范定义的属性。例如,您不能修改 type 属性。
示例:CloudEvent 覆盖¶
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
spec:
...
ceOverrides:
extensions:
extra: this is an extra attribute
additional: 42
契约
这将导致在 sink 容器上设置 K_CE_OVERRIDES 环境变量,如下所示
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
功能¶
ApiServerSource 使用注解来启用某些功能。
跳过权限检查¶
此功能禁用在创建部署之前进行的 RBAC 权限检查。默认情况下,针对每个资源和跟踪的命名空间组合创建三个 SubjectAccessReview 请求。
启用后,此功能将移除 SubjectAccessReview 的创建,从而在 ApiServerSource 跟踪大量资源或命名空间时减少对 Kubernetes API 的压力。在这种情况下,ApiServerSource 部署不会重试监视连接。
要启用它,请将其设置为 "true"
apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
name: <apiserversource>
namespace: <namespace>
annotations:
features.knative.dev/apiserversource-skip-permissions-check: "true"
spec:
...