订阅¶
创建完 Channel 和 Sink 后,您可以创建一个 Subscription 来启用事件传递。
Subscription 由 Subscription 对象组成,该对象指定了要传递事件的 Channel 和 Sink(也称为 Subscriber)。您还可以指定一些特定于 Sink 的选项,例如如何处理失败。
有关 Subscription 对象的更多信息,请参阅 Subscription。
创建订阅¶
通过运行以下命令在 Channel 和 Sink 之间创建 Subscription:
kn subscription create <subscription-name> \
--channel <Group:Version:Kind>:<channel-name> \
--sink <sink-prefix>:<sink-name> \
--sink-reply <sink-prefix>:<sink-name> \
--sink-dead-letter <sink-prefix>:<sink-name>
-
--channel指定应处理的云事件的源。您必须提供 Channel 名称。如果您不使用由 Channel 资源支持的默认 Channel,则必须为指定的 Channel 类型加上<Group:Version:Kind>前缀。例如,对于 Kafka 驱动的 Channel,这是messaging.knative.dev:v1beta1:KafkaChannel。 -
--sink指定应将事件传递到的目标目的地。默认情况下,<sink-name>被解释为同名 Knative 服务,位于 Subscription 的相同命名空间中。您可以使用以下前缀之一来指定 Sink 的类型:ksvc:Knative 服务。svc:Kubernetes 服务。channel:将用作目的地的 Channel。此处只能引用默认的 Channel 类型。broker:事件代理。--sink-reply是一个可选参数,可用于指定 Sink 回复的发送位置。它使用与--sink标志相同的命名约定来指定 Sink。-
--sink-dead-letter是一个可选参数,可用于指定发生故障时发送 CloudEvent 的位置。它使用与--sink标志相同的命名约定来指定 Sink。ksvc:Knative 服务。svc:Kubernetes 服务。channel:将用作目的地的 Channel。此处只能引用默认的 Channel 类型。broker:事件代理。
-
--sink-reply和--sink-dead-letter是可选参数。它们分别用于指定 Sink 回复的发送位置以及发生故障时发送 CloudEvent 的位置。两者都使用与--sink标志相同的命名约定来指定 Sink。
此示例命令创建一个名为 mysubscription 的 Subscription,该 Subscription 将事件从名为 mychannel 的 Channel 路由到一个名为 myservice 的 Knative 服务。
注意
Sink 前缀是可选的。您还可以仅将 --sink 指定为 --sink <service-name>,并省略 ksvc 前缀。
-
使用以下示例创建一个 Subscription 对象的 YAML 文件
apiVersion: messaging.knative.dev/v1 kind: Subscription metadata: name: <subscription-name> # Name of the Subscription. namespace: default spec: channel: apiVersion: messaging.knative.dev/v1 kind: Channel name: <channel-name> # Name of the Channel that the Subscription connects to. delivery: # Optional delivery configuration settings for events. deadLetterSink: # When this is configured, events that failed to be consumed are sent to the deadLetterSink. # The event is dropped, no re-delivery of the event is attempted, and an error is logged in the system. # The deadLetterSink value must be a Destination. ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service-name> reply: # Optional configuration settings for the reply event. # This is the event Sink that events replied from the subscriber are delivered to. ref: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel name: <service-name> subscriber: # Required configuration settings for the Subscriber. This is the event Sink that events are delivered to from the Channel. ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service-name> -
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
列出订阅¶
您可以使用 kn CLI 工具列出所有现有的 Subscription。
-
列出所有订阅
kn subscription list -
以 YAML 格式列出订阅
kn subscription list -o yaml
描述订阅¶
您可以使用 kn CLI 工具打印有关 Subscription 的详细信息
kn subscription describe <subscription-name>
示例
kn subscription describe mysubscription
预期输出
Name: mysubscription
Namespace: default
Annotations: messaging.knative.dev/creator=user@example.com
messaging.knative.dev/lastModifier=user@example.com
Age: 1h
Channel: Channel:mychannel (messaging.knative.dev/v1)
Subscriber:
URI: http://myservice.default.svc.cluster.local
Reply:
Name: myreply
Kind: InMemoryChannel
API Version: messaging.knative.dev/v1
DeadLetterSink:
Name: mydlq
Kind: Service
API Version: serving.knative.dev/v1
Conditions:
OK TYPE AGE REASON
++ Ready 1h
++ AddedToChannel 1h
++ ChannelReady 1h
更新订阅¶
您可以使用 kn CLI 工具或应用更新后的 YAML 文件来更新现有的 Subscription。
使用 kn subscription update 命令修改现有 Subscription。
示例
kn subscription update mysubscription \
--sink ksvc:myservice \
--sink-dead-letter ksvc:error-handler \
--sink-reply channel:reply-channel
您可以根据需要更新单个参数:- --sink:更改订阅者(事件的目的地)- --sink-dead-letter:添加或更新失败传递的死信 Sink- --sink-reply:更新回复事件的发送位置
注意
更新 Subscription 时,必须提供要保留的所有配置参数。更新命令中未指定的任何参数将使用默认值。
-
获取当前 Subscription 配置
kubectl get subscription <subscription-name> -o yaml > subscription.yaml -
编辑 YAML 文件以对
spec部分进行所需的更改。 -
应用更新后的 YAML 文件
kubectl apply -f subscription.yaml
删除订阅¶
您可以使用 kn 或 kubectl CLI 工具删除 Subscription。
kn subscription delete <subscription-name>
kubectl subscription delete <subscription-name>