天天看點

knative service 使用event觸發

建立ns

[[email protected] event]# kubectl create ns event-example
[[email protected] event]# kubectl label namespace event-example knative-eventing-injection=enabled
           

驗證broker

[[email protected] event]# kubectl --namespace event-example get Broker default
NAME      READY   REASON   URL                                                     AGE
default   True             http://default-broker.event-example.svc.cluster.local   70s

           

建立knative service

[[email protected] event]# kubectl --namespace event-example apply --filename - << END
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-service
  namespace: event-example
spec:
  template:
    spec:
      containers:
      -  # This corresponds to
         # https://github.com/knative/eventing-contrib/blob/v0.2.1/cmd/message_dumper/dumper.go.
         image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/[email protected]:ab5391755f11a5821e7263686564b3c3cd5348522f5b31509963afb269ddcd63
END
[[email protected] event]# kubectl get ksvc -n event-example
NAME         URL                                           LATESTCREATED      LATESTREADY        READY   REASON
my-service   http://my-service.event-example.example.com   my-service-7frtw   my-service-7frtw   True

           

建立trigger

[[email protected] event]# kubectl --namespace event-example apply --filename - << END
apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:
  name: my-service-trigger
  namespace: event-example
spec:
  filter:
    attributes:
      type: dev.knative.foo.bar
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service
END
           

測試

手動觸發

建立event-producer
[[email protected] event]# kubectl --namespace event-example apply --filename - << END
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl
  name: curl
  namespace: event-example
spec:
  containers:
    # This could be any image that we can SSH into and has curl.
  - image: registry.cn-hangzhou.aliyuncs.com/magina-k8s/busyboxplus:curl
    imagePullPolicy: IfNotPresent
    name: curl
    resources: {}
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
END

           

此時之前建立的knative service後端沒有任何pod。

[[email protected] event]# kubectl get po -n event-example
NAME                                      READY   STATUS    RESTARTS   AGE
curl                                      1/1     Running   0          17s
default-broker-filter-7774596796-jmdfn    1/1     Running   0          7m38s
default-broker-ingress-6cd9f66848-ldrrj   1/1     Running   0          7m38s
           

發送事件

[[email protected] event]# kubectl exec -it -n event-example curl sh
[ [email protected]:/ ]$  curl -v "http://default-broker.event-example.svc.cluster.local/" \
  -X POST \
  -H "X-B3-Flags: 1" \
  -H "CE-SpecVersion: 0.2" \
  -H "CE-Type: dev.knative.foo.bar" \
  -H "CE-Time: 2018-04-05T03:56:24Z" \
  -H "CE-ID: 45a8b444-3213-4758-be3f-540bf93f85ff" \
  -H "CE-Source: dev.knative.example" \
  -H 'Content-Type: application/json' \
  -d '{ "much": "wow" }'
           

此時knative會動态建立my-service執行個體

[[email protected] knative]# kubectl get po -n event-example                           NAME                                           READY   STATUS    RESTARTS   AGE
curl                                           1/1     Running   0          53m
default-broker-filter-7774596796-fv84k         1/1     Running   0          55m
default-broker-ingress-6cd9f66848-dlrq2        1/1     Running   0          55m
my-service-6549z-deployment-688bc68c6c-656tj   2/2     Running   0          113s
[[email protected] knative]#

           

可以檢視日志

[[email protected] knative]# kubectl logs -n event-example my-service-6549z-deployment-688bc68c6c-656tj -c user-container
2019/12/10 03:10:23 Message Dumper received a message: POST / HTTP/1.1
Host: my-service.event-example.svc.cluster.local
Accept-Encoding: gzip
Ce-Id: 45a8b444-3213-4758-be3f-540bf93f85ff
Ce-Knativearrivaltime: 2019-12-10T03:10:19Z
Ce-Knativehistory: default-kne-trigger-kn-channel.event-example.svc.cluster.local
Ce-Source: dev.knative.example
Ce-Specversion: 0.3
Ce-Time: 2018-04-05T03:56:24Z
Ce-Traceparent: 00-a0cc623ba9f55a2da13ba08303c50252-eef423a1509d4991-00
Ce-Type: dev.knative.foo.bar
Content-Length: 17
Content-Type: application/json
Forwarded: for=192.138.200.217;proto=http, for=192.138.200.250
K-Proxy-Request: activator
User-Agent: Go-http-client/1.1
X-B3-Parentspanid: fb297a8103ef765d
X-B3-Sampled: 0
X-B3-Spanid: 17a11c9ebe255e54
X-B3-Traceid: a0cc623ba9f55a2da13ba08303c50252
X-Envoy-Decorator-Operation: my-service-6549z.event-example.svc.cluster.local:80/*
X-Envoy-Expected-Rq-Timeout-Ms: 600000
X-Envoy-External-Address: 192.138.200.217
X-Forwarded-For: 192.138.200.217, 192.138.200.250, 192.138.200.231
X-Forwarded-Proto: http
X-Request-Id: 22c65a92-96d7-9972-9fad-506893716146

{ "much": "wow" }

           

使用cronjob source觸發事件

在上一節基礎上,要建立一個新trigger。

apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:
  name: my-service-cronjob-trigger
  namespace: event-example
spec:
  filter:
    attributes:
      type: dev.knative.cronjob.event
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service
           

此處的event type為

dev.knative.cronjob.event

使用

kn

指令行工具建立cronjob source。

kn source cronjob create --namespace event-example --schedule "* * * * */1" --data "ping" --sink svc:my-service my-cron-trigger
           

檢視my-service pod的日志。

2019/12/10 12:09:00 Message Dumper received a message: POST / HTTP/1.1
Host: my-service.event-example.svc.cluster.local
Accept-Encoding: gzip
Ce-Id: 3f3780b4-6aef-4fcc-9635-1a9273959433
Ce-Source: /apis/v1/namespaces/event-example/cronjobsources/my-cron-trigger
Ce-Specversion: 0.3
Ce-Time: 2019-12-10T12:09:00.000566484Z
Ce-Type: dev.knative.cronjob.event
Content-Length: 15
Forwarded: for=192.138.200.216;proto=http, for=192.138.200.207
K-Proxy-Request: activator
User-Agent: Go-http-client/1.1
X-B3-Parentspanid: 0404bc3bc0f3e098
X-B3-Sampled: 0
X-B3-Spanid: a720015b628551fc
X-B3-Traceid: b6bb1076414f6ae878fae8030562179f
X-Envoy-Decorator-Operation: my-service-6549z.event-example.svc.cluster.local:80/*
X-Envoy-Expected-Rq-Timeout-Ms: 600000
X-Envoy-External-Address: 192.138.200.216
X-Forwarded-For: 192.138.200.216, 192.138.200.207, 192.138.200.222
X-Forwarded-Proto: http
X-Request-Id: ab4bf5e6-8109-94ec-b6e5-7e93efa00798

{"body":"ping"}
           

本實驗需要istio支援cluster-local-gateway,安裝可參考:https://github.com/knative/docs/blob/master/docs/install/installing-istio.md#updating-your-install-to-use-cluster-local-gateway

參考

https://knative.dev/docs/eventing/broker-trigger

https://github.com/knative/docs/blob/release-0.11/docs/eventing/getting-started.md

繼續閱讀