You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Tekton EventListener遇资源冲突报错,求排查方案

Tekton EventListener部署时"对象已修改"报错的排查与解决

问题描述

部署Tekton EventListener时反复出现如下报错:

Operation cannot be fulfilled on deployments.apps "el-event-listener-test-starter": the object has been modified; please apply your changes to the latest version and try again

已确认以下信息:

  • 未使用时间字段、ID或版本字段,排除此类干扰;
  • 当前环境存在另一个EventListener以不同服务监听同一端口;
  • 每次操作都会删除并重建EventListener,且通过Lens验证无残留资源;
  • 相关Deployment(含RS、Pod)状态均正常;
  • 使用版本:tekton-pipelines v0.53.0、tekton-triggers v0.25.3

相关配置

apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: event-listener-test-starter
spec:
  serviceAccountName: tekton-service-account
  triggers:
    - name: test-starter-trigger
      bindings:
        - ref: test-starter-binding
      template:
        ref: test-starter-template
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
  name: test-starter-binding
spec:
  params:
    - name: testversion
      value: $(body.testversion)
    - name: appTargetBranch
      value: $(body.apptargetbranch)
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: test-starter-template
spec:
  params:
    - name: testversion
    - name: appTargetBranch
  resourcetemplates:
    - apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        generateName: test-pipeline-
      spec:
        serviceAccountName: build-bot
        pipelineRef:
          name: test-pipeline
        workspaces:
          - name: test-source-workspace
            persistentVolumeClaim:
              claimName: test-source-pvc
          - name: maven-settings
            subPath: mavensettings
            persistentVolumeClaim:
              claimName: mavensettingsv2-pvc
          - name: config-source
            subPath: config-source
            persistentVolumeClaim:
              claimName: configrepo2-pvc
        params:
          - name: TEST_SOURCE_URL
            value: http://gitea-xxx-http.default.svc.cluster.local:3000/gituser/functionaltester.git
          - name: TEST_SOURCE_REVISION
            value: $(tt.params.testversion)
          - name: GIT_CONFIG_TARGET_BRANCH
            value: $(tt.params.appTargetBranch)

排查方向与解决办法

1. 端口冲突引发控制器竞争

同一端口被另一个EventListener占用,尽管服务不同,但Tekton Triggers控制器在 reconcile 资源时可能因端口检测逻辑出现冲突,导致Deployment被意外修改。

  • 临时停掉监听同一端口的EventListener,重新部署当前资源验证是否报错;
  • 若恢复正常,为两个EventListener分配不同端口,或通过Ingress/Route实现端口转发避免直接冲突。

2. 控制器reconcile循环竞态问题

Tekton Triggers v0.25.3 存在 reconcile 逻辑的竞态缺陷,删除重建EventListener时,控制器可能仍在处理旧资源清理,同时新资源创建请求到来,引发版本冲突。

  • 删除EventListener后等待30-60秒,确认控制器完成旧资源清理后再部署新资源;
  • 升级Tekton Triggers至v0.26及以上版本,该版本修复了部分竞态问题。

3. 隐性元数据残留导致版本冲突

Kubernetes控制器会自动为资源添加kubectl.kubernetes.io/last-applied-configuration等注解,若删除重建时这些元数据未完全清理,可能引发版本冲突。

  • 使用强制同步删除命令:kubectl delete eventlistener event-listener-test-starter --cascade=foreground;
  • 部署前清理关联残留资源:kubectl apply --prune -f <配置文件路径> --selector=triggers.tekton.dev/eventlistener=event-listener-test-starter

4. 工具验证残留资源的局限性

Lens可能无法实时刷新所有资源状态,部分处于Terminating状态的Pod/RS可能未被显示,导致控制器仍在处理这些资源并修改Deployment。

  • 用命令行直接检查资源:kubectl get deployments,rs,pods -l triggers.tekton.dev/eventlistener=event-listener-test-starter,确认所有旧资源已删除后再部署。

内容的提问来源于stack exchange,提问作者tm1701

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:27:40