A step-by-step guide to Knative eventing

Share it !


पिछले लेख में, मैंने कवर किया था कैसे चाकू के साथ एक छोटा सा ऐप बनाने के लिए, जो एक खुला स्रोत परियोजना है जो घटकों को जोड़ता है कुबेरनेट्स तैनात करने, चलाने और प्रबंधन के लिए सर्वरहित, बादल-मूल अनुप्रयोग। इस लेख में, मैं अपने क्लाउड-नेटिव वातावरण में घटनाओं को बनाने, भेजने और सत्यापित करने का एक तरीका, चाकू की घटना को समझाऊंगा।

ईवेंट आपके वातावरण में कई स्रोतों से उत्पन्न हो सकते हैं, और वे प्रबंधन या परिभाषित करने के लिए भ्रमित हो सकते हैं। चूंकि चाकू निम्नानुसार है CloudEvents विनिर्देशन, यह आपको अपने वातावरण के लिए एक सामान्य अमूर्त बिंदु बनाने की अनुमति देता है, जहां घटनाओं को एक विनिर्देश में परिभाषित किया जाता है।

यह आलेख बताता है कि कैसे चाकू चलाने की घटना संस्करण 0.20.0 स्थापित करने और घटनाओं को बनाने, ट्रिगर करने और सत्यापित करने के लिए। क्योंकि इसमें कई चरण शामिल हैं, मेरा सुझाव है कि आप मेरी ओर देखें गिटहब रेपो फ़ाइलों के साथ इस लेख के माध्यम से चलने के लिए।

अपना कॉन्फ़िगरेशन सेट करें

यह वॉकथ्रू उपयोग करता है मिनिक्यूब कुबेरनेट्स के साथ 1.19.0। यह मिनिक्यूब वातावरण में कुछ कॉन्फ़िगरेशन परिवर्तन भी करता है।

मिनिक्यूब पूर्व-विन्यास कमांड:

$ minikube config set kubernetes-version v1.19.0
$ minikube config set memory 4000
$ minikube config set cpus 4

मिनिक्यूब शुरू करने से पहले, सुनिश्चित करें कि आपका कॉन्फ़िगरेशन रहता है और मिनिक्यूब शुरू करने के लिए निम्नलिखित कमांड चलाएं:

$ minikube delete
$ minikube start

चाकू घटना को स्थापित करें

कुबेटेल का उपयोग करके चाकू के आयोजन की कस्टम कस्टम परिभाषा (CRDs) स्थापित करें। निम्नलिखित कमांड और आउटपुट का एक स्निपेट दिखाता है:

$ kubectl apply --filename https://github.com/knative/eventing/releases/download/v0.20.0/eventing-crds.yaml

customresourcedefinition.apiextensions.k8s.io/apiserversources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/brokers.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev created

अगला, kubectl का उपयोग करके मुख्य घटक स्थापित करें:

$ kubectl apply --filename https://github.com/knative/eventing/releases/download/v0.20.0/eventing-core.yaml
namespace/knative-eventing created
serviceaccount/eventing-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller created

चूँकि आप Knative Eventing सेवा का एक स्टैंडअलोन संस्करण चला रहे हैं, इसलिए आपको इवेंट्स पास करने के लिए इन-मेमोरी चैनल इंस्टॉल करना होगा। कुब्लेट का उपयोग करना, चलाना:

$ kubectl apply --filename https://github.com/knative/eventing/releases/download/v0.20.0/in-memory-channel.yaml

ब्रोकर स्थापित करें, जो चैनलों का उपयोग करता है और ईवेंट रूटिंग चलाता है:

$ kubectl apply --filename https://github.com/knative/eventing/releases/download/v0.20.0/mt-channel-broker.yaml
clusterrole.rbac.authorization.k8s.io/knative-eventing-mt-channel-broker-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-mt-broker-filter created

अगला, एक नाम स्थान बनाएं और उसमें एक छोटा दलाल जोड़ें; यह ब्रोकर ट्रिगर्स के लिए ईवेंट्स रूट करता है। Kubectl का उपयोग करके अपने नाम स्थान बनाएँ:

$ kubectl create namespace eventing-test
namespace/eventing-test created

अब नाम का एक छोटा ब्रोकर बनाएं default आपके नामस्थान में। निम्नलिखित मेरी से YAML है दलाल फ़ाइल (जो मेरे GitHub रिपॉजिटरी में पाई जा सकती है):

apiVersion: eventing.knative.dev/v1
kind
: broker
metadata
:
  name
: default
  namespace
: eventing-test

फिर kubectl का उपयोग करके अपनी ब्रोकर फ़ाइल लागू करें:

$ kubectl create -f broker.yaml
   broker.eventing.knative.dev/default created

सत्यापित करें कि सब कुछ ऊपर और चल रहा है (आपको कमांड चलाने के बाद पुष्टिकरण आउटपुट देखना चाहिए):

$ kubectl -n eventing-test get broker default                                                              
NAME      URL                                                                              AGE    READY   REASON
default   http://broker-ingress.knative-eventing.svc.cluster.local/eventing-test/default   3m6s   True

ईवेंट भेजने के लिए आपको बाद में ब्रोकर आउटपुट से इस URL की आवश्यकता होगी, इसलिए इसे सहेजें।

ईवेंट उपभोक्ता बनाएं

अब जब सब कुछ स्थापित हो गया है, तो आप ईवेंट के साथ काम करने के लिए घटकों को कॉन्फ़िगर करना शुरू कर सकते हैं।

सबसे पहले, आपको ईवेंट उपभोक्ता बनाने की आवश्यकता है। आप इस walkthrough में दो उपभोक्ता बनाएंगे: नमस्ते-प्रदर्शन तथा अलविदा-प्रदर्शन। दो उपभोक्ता होने से आप यह देख सकते हैं कि प्रति घटना संदेश उपभोक्ता को कैसे लक्षित करें।

हैलो-डिस्प्ले YAML कोड:

apiVersion: apps/v1
kind
: Deployment
metadata
:
  name
: hello-display
spec
:
  replicas
: 1
  selector
:
    matchLabels
: &labels
      app
: hello-display
  template
:
    metadata
:
      labels
: *labels
    spec
:
      containers
:
        - name
: event-display
          image
: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display

---

kind
: Service
apiVersion
: v1
metadata
:
  name
: hello-display
spec
:
  selector
:
    app
: hello-display
  ports
:
    - protocol
: TCP
      port
: 80
      targetPort
: 8080

अलविदा प्रदर्शन YAML कोड:

apiVersion: apps/v1
kind
: Deployment
metadata
:
  name
: goodbye-display
spec
:
  replicas
: 1
  selector
:
    matchLabels
: &labels
      app
: goodbye-display
  template
:
    metadata
:
      labels
: *labels
    spec
:
      containers
:
        - name
: event-display
          # Source code: https://github.com/knative/eventing-contrib/tree/master/cmd/event_display
          image
: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display

---

kind
: Service
apiVersion
: v1
metadata
:
  name
: goodbye-display
spec
:
  selector
:
    app
: goodbye-display
  ports
:
  - protocol
: TCP
    port
: 80
    targetPort
: 8080

दोनों उपभोक्ताओं के बीच YAML में अंतर है app तथा metadata name अनुभाग। जबकि दोनों उपभोक्ता एक ही पोर्ट पर हैं, आप किसी ईवेंट को बनाते समय लक्ष्य बना सकते हैं। उपभोक्ताओं को कुबेटेल का उपयोग करके बनाएँ:

$ kubectl -n eventing-test apply -f hello-display.yaml
deployment.apps/hello-display created
service/hello-display created

$ kubectl -n eventing-test apply -f goodbye-display.yaml
deployment.apps/goodbye-display created
service/goodbye-display created

यह सुनिश्चित करने के लिए जांचें कि आपके द्वारा YAML फ़ाइलों को लागू करने के बाद तैनाती चल रही है:

$ kubectl -n eventing-test get deployments hello-display goodbye-display
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
hello-display     1/1     1            1           2m4s
goodbye-display   1/1     1            1           34s

ट्रिगर बनाएं

अब, आपको ट्रिगर्स बनाने की आवश्यकता है, जो उन घटनाओं को परिभाषित करता है जो उपभोक्ता प्राप्त करता है। आप अपने क्लाउड ईवेंट से किसी भी फ़िल्टर का उपयोग करने के लिए ट्रिगर्स को परिभाषित कर सकते हैं। ब्रोकर ट्रिगर से घटनाओं को प्राप्त करता है और घटनाओं को सही उपभोक्ता को भेजता है। उदाहरणों का यह सेट विभिन्न परिभाषाओं के साथ दो ट्रिगर बनाता है। उदाहरण के लिए, आप घटनाओं को विशेषता प्रकार के साथ भेज सकते हैं greeting तक hello-display उपभोक्ता।

अभिवादन-ट्रिगर। श्याम कोड:

apiVersion: eventing.knative.dev/v1
kind
: Trigger
metadata
:
  name
: hello-display
spec
:
  broker
: default
  filter
:
    attributes
:
      type
: greeting
  subscriber
:
    ref
:
     apiVersion
: v1
     kind
: Service
     name
: hello-display

पहला ट्रिगर बनाने के लिए, अपनी YAML फाइल लागू करें:

$ kubectl -n eventing-test apply -f greeting-trigger.yaml
trigger.eventing.knative.dev/hello-display created

अगला, उपयोग करके दूसरा ट्रिगर बनाएं sendoff-trig.yaml। यह विशेषता के साथ कुछ भी भेजता है source sendoff तुम्हारा को goodbye-display उपभोक्ता।

Sendoff- ट्रिगर.ऑम कोड:

apiVersion: eventing.knative.dev/v1
kind
: Trigger
metadata
:
  name
: goodbye-display
spec
:
  broker
: default
  filter
:
    attributes
:
      source
: sendoff
  subscriber
:
    ref
:
      apiVersion
: v1
      kind
: Service
      name
: goodbye-display

अगला, क्लस्टर में अपनी दूसरी ट्रिगर परिभाषा लागू करें:

$ kubectl -n eventing-test apply -f sendoff-trigger.yaml
trigger.eventing.knative.dev/goodbye-display created

Kubectl का उपयोग करके क्लस्टर से अपने ट्रिगर्स प्राप्त करके सब कुछ सही ढंग से पुष्टि करें:

$ kubectl -n eventing-test get triggers
NAME              BROKER    SUBSCRIBER_URI                                            AGE   READY  
goodbye-display   default   http://goodbye-display.eventing-test.svc.cluster.local/   24s   True    
hello-display     default   http://hello-display.eventing-test.svc.cluster.local/     46s   True

एक घटना निर्माता बनाएँ

एक पॉड बनाएं जिसका उपयोग आप ईवेंट भेजने के लिए कर सकते हैं। यह आपके लिए कर्ल और एसएसएच एक्सेस के साथ एक साधारण पॉड परिनियोजन है कर्ल का उपयोग करके घटनाओं को भेजें। चूँकि ब्रोकर को क्लस्टर के अंदर से ही एक्सेस किया जा सकता है, जहाँ Knative ईवेंटिंग स्थापित है, पॉड को क्लस्टर में होना चाहिए; यह क्लस्टर में ईवेंट भेजने का एकमात्र तरीका है। उपयोग घटना-निर्माता इस कोड के साथ फाइल करें:

apiVersion: v1
kind
: Pod
metadata
:
  labels
:
    run
: curl
  name
: curl
spec
:
  containers
:
    - image
: radial/busyboxplus:curl
      imagePullPolicy
: IfNotPresent
      name
: curl
      resources
: {}
      stdin
: true
      terminationMessagePath
: /dev/termination-log
      terminationMessagePolicy
: File
      tty
: true

अगला, kubectl का उपयोग करके फली को तैनात करें:

$ kubectl -n eventing-test apply -f event-producer.yaml
pod/curl created

सत्यापित करने के लिए, परिनियोजन प्राप्त करें और सुनिश्चित करें कि फली ऊपर और चल रही है:

$ kubectl get pods -n eventing-test
NAME                               READY   STATUS    RESTARTS   AGE
curl                               1/1     Running   0          8m13s

कुछ कार्यक्रम भेजें

चूंकि यह लेख इतना विन्यास-भारी रहा है, मुझे लगता है कि आप अंत में कुछ घटनाओं को भेजने और अपनी सेवाओं का परीक्षण करने में सक्षम होने के लिए खुश होंगे। घटनाओं को क्लस्टर में आंतरिक रूप से पारित किया जाना है। आमतौर पर, घटनाओं को क्लस्टर के आंतरिक अनुप्रयोगों के आसपास परिभाषित किया जाता है और उन अनुप्रयोगों से आते हैं। लेकिन यह उदाहरण मैन्युअल रूप से आपके पॉड नाम की घटनाओं को भेजेगा कर्ल

फली में प्रवेश करके शुरू करें:

$ kubectl -n eventing-test attach curl -it

एक बार लॉग इन करने के बाद, आपको आउटपुट समान दिखाई देगा:

Defaulting container name to curl.
Use 'kubectl describe pod/curl -n eventing-test' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$

अब, कर्ल का उपयोग करके एक घटना उत्पन्न करें। इसे कुछ अतिरिक्त परिभाषाओं की आवश्यकता है और स्थापना के दौरान उत्पन्न ब्रोकर URL की आवश्यकता होती है। यह उदाहरण दलाल को अभिवादन भेजता है:

curl -v "http://broker-ingress.knative-eventing.svc.cluster.local/eventing-test/default"
  -X POST
  -H "Ce-Id: say-hello"
  -H "Ce-Specversion: 1.0"
  -H "Ce-Type: greeting"
  -H "Ce-Source: not-sendoff"
  -H "Content-Type: application/json"
  -d '{"msg":"Hello Knative!"}'

Ce CloudEvent के लिए छोटा है, जो है मानकीकृत CloudEvents विनिर्देशन कि चाकू निम्नानुसार है। आपको ईवेंट आईडी भी जानना होगा (यह सत्यापित करने के लिए उपयोगी है कि यह डिलीवर किया गया है), प्रकार, स्रोत (जिसे यह निर्दिष्ट करना होगा कि यह एक नहीं है sendoff ताकि यह प्रेषक ट्रिगर में परिभाषित स्रोत पर न जाए), और एक संदेश।

जब आप कमांड चलाते हैं, तो यह आउटपुट होना चाहिए (और आपको प्राप्त करना चाहिए 202 स्वीकार किए जाते हैं प्रतिक्रिया):

> POST /eventing-test/default HTTP/1.1
> User-Agent: curl/7.35.0
> Host: broker-ingress.knative-eventing.svc.cluster.local
> Accept: */*
> Ce-Id: say-hello
> Ce-Specversion: 1.0
> Ce-Type: greeting
> Ce-Source: not-sendoff
> Content-Type: application/json
> Content-Length: 24
>
< HTTP/1.1 202 Accepted
< Date: Sun, 24 Jan 2021 22:25:25 GMT
< Content-Length: 0

202 का मतलब है कि ट्रिगर ने इसे भेजा है नमस्ते-प्रदर्शन उपभोक्ता (परिभाषा के कारण)

इसके बाद, दूसरी परिभाषा भेजें अलविदा-प्रदर्शन इस नए कर्ल कमांड के साथ उपभोक्ता:

curl -v "http://broker-ingress.knative-eventing.svc.cluster.local/eventing-test/default"
  -X POST
  -H "Ce-Id: say-goodbye"
  -H "Ce-Specversion: 1.0"
  -H "Ce-Type: not-greeting"
  -H "Ce-Source: sendoff"
  -H "Content-Type: application/json"
  -d '{"msg":"Goodbye Knative!"}'

इस समय, यह एक है sendoff और पिछले सेटअप अनुभाग की ट्रिगर परिभाषा के आधार पर अभिवादन नहीं। इसे निर्देशित किया जाता है अलविदा-प्रदर्शन उपभोक्ता।

आपका आउटपुट इस तरह दिखना चाहिए, एक और 202 के साथ:

> POST /eventing-test/default HTTP/1.1
> User-Agent: curl/7.35.0
> Host: broker-ingress.knative-eventing.svc.cluster.local
> Accept: */*
> Ce-Id: say-goodbye
> Ce-Specversion: 1.0
> Ce-Type: not-greeting
> Ce-Source: sendoff
> Content-Type: application/json
> Content-Length: 26
>
< HTTP/1.1 202 Accepted
< Date: Sun, 24 Jan 2021 22:33:00 GMT
< Content-Length: 0

बधाई हो, आपने दो कार्यक्रम भेजे!

अगले अनुभाग पर जाने से पहले, फली को टाइप करके बाहर निकलें बाहर जाएं

घटनाओं का सत्यापन करें

अब जब घटनाओं को भेज दिया गया है, तो आप कैसे जानते हैं कि सही उपभोक्ताओं ने उन्हें प्राप्त किया? प्रत्येक उपभोक्ता के पास जाकर लॉग्स में इसकी पुष्टि करता है।

से शुरू करें नमस्ते-प्रदर्शन उपभोक्ता::

$ kubectl -n eventing-test logs -l app=hello-display --tail=100

इस उदाहरण क्लस्टर में बहुत कुछ नहीं चल रहा है, इसलिए आपको केवल एक घटना देखनी चाहिए:

☁️  cloudevents.Event
Validation: valid
Context Attributes,
  specversion: 1.0
  type: greeting
  source: not-sendoff
  id: say-hello
  datacontenttype: application/json
Extensions,
  knativearrivaltime: 2021-01-24T22:25:25.760867793Z
Data,
  {
    "msg": "Hello Knative!"
  }

आपने पुष्टि की है नमस्ते-प्रदर्शन उपभोक्ता को घटना की सूचना मिली! अब जाँच करें अलविदा-प्रदर्शन उपभोक्ता और सुनिश्चित करें कि दूसरे संदेश ने इसे बनाया है।

उसी कमांड को चलाकर शुरू करें लेकिन साथ में अलविदा-प्रदर्शन:

$ kubectl -n eventing-test logs -l app=goodbye-display --tail=100
☁️  cloudevents.Event
Validation: valid
Context Attributes,
  specversion: 1.0
  type: not-greeting
  source: sendoff
  id: say-goodbye
  datacontenttype: application/json
Extensions,
  knativearrivaltime: 2021-01-24T22:33:00.515716701Z
Data,
  {
    "msg": "Goodbye Knative!"
  }

ऐसा लगता है कि दोनों घटनाओं ने इसे उनके उचित स्थानों पर बनाया है। बधाई हो – आपने आधिकारिक तौर पर चाकू से चलने वाले आयोजन के साथ काम किया है!

बोनस दौर: कई उपभोक्ताओं को एक घटना भेजें

इसलिए आपने कर्ल का उपयोग करके प्रत्येक उपभोक्ता को ईवेंट भेजे, लेकिन क्या होगा यदि आप दोनों उपभोक्ताओं को इवेंट भेजना चाहते हैं? यह एक समान कर्ल कमांड का उपयोग करता है लेकिन कुछ दिलचस्प बदलावों के साथ। पिछले ट्रिगर्स में, प्रत्येक को एक अलग विशेषता के साथ परिभाषित किया गया था। ग्रीटिंग ट्रिगर में विशेषता थी typeऔर sendoff ट्रिगर में विशेषता थी source। इसका मतलब है कि आप कर्ल कॉल कर सकते हैं और इसे दोनों उपभोक्ताओं को भेज सकते हैं।

यहां दोनों उपभोक्ताओं को एक घटना भेजने के लिए परिभाषा का एक कर्ल उदाहरण दिया गया है:

curl -v "http://broker-ingress.knative-eventing.svc.cluster.local/eventing-test/default"
  -X POST
  -H "Ce-Id: say-hello-goodbye"
  -H "Ce-Specversion: 1.0"
  -H "Ce-Type: greeting"
  -H "Ce-Source: sendoff"
  -H "Content-Type: application/json"
  -d '{"msg":"Hello Knative! Goodbye Knative!"}'

जैसा कि आप देख सकते हैं, इस कर्ल कमांड की परिभाषा सेट करने के लिए बदल गई है source के लिये अलविदा-प्रदर्शन और यह type के लिये नमस्ते-प्रदर्शन

यहां नमूना नमूना है कि घटनाओं को देखने के बाद वे क्या भेजते हैं।

भेजे जा रहे इवेंट का आउटपुट:

> POST /eventing-test/default HTTP/1.1
> User-Agent: curl/7.35.0
> Host: broker-ingress.knative-eventing.svc.cluster.local
> Accept: */*
> Ce-Id: say-hello-goodbye
> Ce-Specversion: 1.0
> Ce-Type: greeting
> Ce-Source: sendoff
> Content-Type: application/json
> Content-Length: 41
>
< HTTP/1.1 202 Accepted
< Date: Sun, 24 Jan 2021 23:04:15 GMT
< Content-Length: 0

हैलो-डिस्प्ले का आउटपुट (दो इवेंट दिखा रहा है):

$ kubectl -n eventing-test logs -l app=hello-display --tail=100
☁️  cloudevents.Event
Validation: valid
Context Attributes,
  specversion: 1.0
  type: greeting
  source: not-sendoff
  id: say-hello
  datacontenttype: application/json
Extensions,
  knativearrivaltime: 2021-01-24T22:25:25.760867793Z
Data,
  {
    "msg": "Hello Knative!"
  }
☁️  cloudevents.Event
Validation: valid
Context Attributes,
  specversion: 1.0
  type: greeting
  source: sendoff
  id: say-hello-goodbye
  datacontenttype: application/json
Extensions,
  knativearrivaltime: 2021-01-24T23:04:15.036352685Z
Data,
  {
    "msg": "Hello Knative! Goodbye Knative!"
  }

अलविदा प्रदर्शन का उत्पादन (दो घटनाओं के साथ):

$ kubectl -n eventing-test logs -l app=goodbye-display --tail=100
☁️  cloudevents.Event
Validation: valid
Context Attributes,
  specversion: 1.0
  type: not-greeting
  source: sendoff
  id: say-goodbye
  datacontenttype: application/json
Extensions,
  knativearrivaltime: 2021-01-24T22:33:00.515716701Z
Data,
  {
    "msg": "Goodbye Knative!"
  }
☁️  cloudevents.Event
Validation: valid
Context Attributes,
  specversion: 1.0
  type: greeting
  source: sendoff
  id: say-hello-goodbye
  datacontenttype: application/json
Extensions,
  knativearrivaltime: 2021-01-24T23:04:15.036352685Z
Data,
  {
    "msg": "Hello Knative! Goodbye Knative!"
  }

जैसा कि आप देख सकते हैं, इवेंट आपकी कर्ल परिभाषा के आधार पर दोनों उपभोक्ताओं के पास गया। यदि किसी घटना को एक से अधिक स्थानों पर भेजा जाना है, तो आप इसे एक से अधिक उपभोक्ताओं को भेजने के लिए परिभाषा लिख ​​सकते हैं।

इसे आज़माइए!

यदि आपकी पसंद का कोई पूर्वनिर्धारित स्थान पर जा रहा है, तो क्लाउड ईवेंट में आंतरिक ईवेंट ट्रैक करना बहुत आसान है। यह देखने का आनंद लें कि आप अपने क्लस्टर में कितनी दूर तक जा सकते हैं!



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *