11.3.3. YAML ファイルを使用した API サーバーソースの作成
以下では、YAML ファイルを使用して ApiServerSource
オブジェクトを作成するために必要な手順を説明します。
前提条件
- Knative Serving および Eventing がクラスターにインストールされている。
-
default
ブローカーを、ApiServerSource
オブジェクトで定義されるものと同じ namespace に作成している。
手順
API サーバーソースのサービスアカウント、ロールおよびロールバインディングを作成するには、
authentication.yaml
という名前のファイルを作成し、以下のサンプルコードをこれにコピーします。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
注記適切なパーミッションを持つ既存のサービスアカウントを再利用する必要がある場合、そのサービスアカウントの
authentication.yaml
を変更する必要があります。authentication.yaml
ファイルを作成した後に、これを適用します。$ oc apply -f authentication.yaml
ApiServerSource
オブジェクトを作成するには、k8s-events.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/v1beta1 kind: Broker name: default
k8s-events.yaml
ファイルを作成した後に、これを適用します。$ oc apply -f k8s-events.yaml
API サーバーソースが正しく設定されていることを確認するには、受信メッセージをログにダンプする Knative サービスを作成します。
以下のサンプル YAML を
service.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:v0.13.2
service.yaml
ファイルを作成した後に、これを適用します。$ oc apply -f service.yaml
イベントを直前の手順で作成したサービスにフィルターする
default
ブローカーからトリガーを作成するには、trigger.yaml
という名前のファイルを作成し、以下のサンプルコードをこれにコピーします。apiVersion: eventing.knative.dev/v1alpha1 kind: Trigger metadata: name: event-display-trigger namespace: default spec: subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
trigger.yaml
ファイルを作成した後に、これを適用します。$ oc apply -f trigger.yaml
イベントを作成するには、
default
namespace で 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/v1beta1 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", ... }