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号