Tekton主要组件调用关系

Refer to: Udemy

image

  

示例调用结构图

image

 

示例调用关系 


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

 

posted @ 2025-10-29 11:08  呆瓜小贼66  阅读(5)  评论(0)    收藏  举报