Menu Close
5.7.7. 使用 YAML 方法的 API 服务器源
本指南描述了使用 YAML 文件创建 API 服务器源所需的步骤。
先决条件
- 您需要安装 Knative Serving 和 Eventing。
-
您需要在与 API 服务器源 YAML 文件中定义的相同的命名空间中创建
default
代理。
流程
以 YAML 文件形式为 API 服务器源创建服务帐户、角色和角色绑定:
注意如果要重新使用现有服务帐户,您可以修改现有的
ServiceAccount
资源,使其包含所需的权限,而不是创建新资源。apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default 1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default 2 rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default 3 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default 4
应用 YAML 文件:
$ oc apply -f <filename>
将 API 服务器源创建为 YAML 文件:
apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: name: testevents spec: serviceAccountName: events-sa mode: Resource resources: - apiVersion: v1 kind: Event sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: default
应用
ApiServerSource
YAML 文件:$ oc apply -f <filename>
要检查 API 服务器源是否已正确设置,请创建一个 Knative 服务作为 YAML 文件,在日志中转储传入的信息:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
应用
Service
YAML 文件:$ oc apply -f <filename>
创建一个
Trigger
对象作为一个 YAML 文件,该文件将事件从default
代理过滤到上一步中创建的服务:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: event-display-trigger namespace: default spec: broker: default subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
应用
Trigger
YAML 文件:$ oc apply -f <filename>
通过在 default 命名空间中启动 pod 来创建事件:
$ oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-display
输入以下命令并检查输出,检查是否正确映射了控制器:
$ oc get apiserversource.sources.knative.dev testevents -o yaml
输出示例
apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: annotations: creationTimestamp: "2020-04-07T17:24:54Z" generation: 1 name: testevents namespace: default resourceVersion: "62868" selfLink: /apis/sources.knative.dev/v1alpha1/namespaces/default/apiserversources/testevents2 uid: 1603d863-bb06-4d1c-b371-f580b4db99fa spec: mode: Resource resources: - apiVersion: v1 controller: false controllerSelector: apiVersion: "" kind: "" name: "" uid: "" kind: Event labelSelector: {} serviceAccountName: events-sa sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: default
验证
要验证 Kubernetes 事件是否已发送到 Knative,您可以查看消息转储程序功能日志。
输入以下命令来获取 pod:
$ oc get pods
输入以下命令来查看 pod 的消息转储程序功能日志:
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
输出示例
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... }