Tekton主要組件調用關系
Refer to: Udemy

示例調用結構圖

示例調用關系
1. Webhook & REST 請求
外部通過 REST 方式發送包含 {"firstname":"John", "lastname":"Doe"} 的事件 payload,觸發整個流程。
?
2. EventListener(5-09-el)
它監聽上述帶有事件 payload 的 curl 請求,然后關聯到 5-09-trigger。
?
3. Trigger(5-09-trigger)
包含三個關鍵組件:
?
- TriggerTemplate(5-09-tt):用于實例化 5-09-pipeline。
?
- TriggerBinding(5-09-tb):負責結構化處理 payload 中的 firstname 和 lastname 。
?
- Interceptor(cel-interceptor):僅當 payload 被接受時,才允許事件傳遞。
?
4. Pipeline(5-09-pipeline)
它關聯到 5-09-task,是 Pipeline 的實例化(PipelineRun)。
?
5. Task(5-09-task)
最終執行打印名字的操作,輸出 firstname 和 lastname 。
總結調用鏈:
REST 請求(帶 payload) → EventListener(5-09-el) → Trigger(5-09-trigger) → Pipeline(5-09-pipeline) → Task(5-09-task) → 打印姓名
在上面第三步 Trigger(5-09-trigger)中,三個組件的調用關系如下:
1. Interceptor(cel-interceptor):首先對事件 payload 進行校驗,只有當 payload 符合要求時,才允許事件繼續傳遞。
?
2. TriggerBinding(5-09-tb):在 Interceptor 校驗通過后,對 payload 中的 firstname 和 lastname 進行結構化處理,提取出可用的參數。
?
3. TriggerTemplate(5-09-tt):使用 TriggerBinding 處理后的參數,來實例化 5-09-pipeline,從而觸發后續的 Pipeline 流程。
簡單來說,調用順序是: Interceptor 校驗 → TriggerBinding 結構化參數 → TriggerTemplate 實例化 Pipeline 。
示例代碼
kubectl run curl-pod --image=curlimages/curl:latest --command -- sleep infinity kubectl exec -it curl-pod -- /bin/sh curl -X POST http://el-5-09-el.default.svc.cluster.local:8080 \ -H 'Content-Type: application/json' \ -d '{"firstname":"John", "lastname":"Doe"}' curl -X POST http://el-5-09-el.default.svc.cluster.local:8080 \ -H 'Content-Type: application/json' \ -d '{"firstname":"John", "surname":"Doe"}' kubectl logs -l eventlistener=5-09-el #-n tekton-pipelines
apiVersion: triggers.tekton.dev/v1beta1 kind: EventListener metadata: name: 5-09-el namespace: default spec: triggers: - triggerRef: 5-09-trigger serviceAccountName: tekton-triggers-example-sa
apiVersion: triggers.tekton.dev/v1beta1 kind: Trigger metadata: name: 5-09-trigger namespace: default spec: bindings: - ref: 5-09-tb template: ref: 5-09-tt interceptors: - ref: name: cel params: - name: filter value: "has(body.firstname) && has(body.lastname)"
apiVersion: triggers.tekton.dev/v1beta1 kind: TriggerBinding metadata: name: 5-09-tb namespace: default spec: params: - name: firstname value: $(body.firstname) - name: lastname value: $(body.lastname)
apiVersion: triggers.tekton.dev/v1beta1 kind: TriggerTemplate metadata: name: 5-09-tt namespace: default spec: params: - name: firstname - name: lastname resourcetemplates: - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: simple-pipeline-run- namespace: default spec: pipelineRef: name: 5-09-pipeline params: - name: firstname value: $(tt.params.firstname) - name: lastname value: $(tt.params.lastname)
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: 5-09-pipeline namespace: default spec: params: - name: firstname type: string - name: lastname type: string tasks: - name: print-fields-task taskRef: name: 5-09-task params: - name: firstname value: $(params.firstname) - name: lastname value: $(params.lastname)
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: 5-09-task namespace: default spec: params: - name: firstname type: string - name: lastname type: string steps: - name: echo-fields image: ubuntu script: | #!/bin/bash echo "$(params.firstname) $(params.lastname)"
rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: tekton-triggers-example-sa namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: triggers-example-eventlistener-binding namespace: default subjects: - kind: ServiceAccount name: tekton-triggers-example-sa namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tekton-triggers-eventlistener-roles --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: triggers-example-eventlistener-clusterbinding subjects: - kind: ServiceAccount name: tekton-triggers-example-sa namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tekton-triggers-eventlistener-clusterroles

浙公網安備 33010602011771號