tektoncd/pipeline
perf: strip ManagedFields from PipelineRun and TaskRun informer caches
开放
#9,573 创建于 2026年3月15日
good first issuekind/feature
仓库指标
- 星标
- (9,013 个星标)
- PR 合并指标
- (PR 指标待抓取)
描述
Feature request
Add SetTransform on PipelineRun and TaskRun shared informers to strip metadata.managedFields on cache insert.
Kubernetes objects carry managedFields which can be 30-70% of the object's serialized size. The Tekton controller never reads managedFields, but every DeepCopy (3-4 per reconcile cycle via the Knative reconciler framework) copies them in full.
Where to add the transform
- PipelineRun informer:
pkg/reconciler/pipelinerun/controller.go(afterNewImpl, beforeAddEventHandler) - TaskRun informer:
pkg/reconciler/taskrun/controller.go(same location)
Implementation
stripManagedFields := func(obj interface{}) (interface{}, error) {
if accessor, ok := obj.(metav1.ObjectMetaAccessor); ok {
accessor.GetObjectMeta().SetManagedFields(nil)
}
return obj, nil
}
if err := pipelineRunInformer.Informer().SetTransform(stripManagedFields); err != nil {
logging.FromContext(ctx).Warnf("Failed to set informer transform: %v", err)
}
Use case
- Reduces memory footprint of the controller's informer caches
- Reduces CPU time spent on
DeepCopyoperations during reconciliation - This pattern is established in the Kubernetes ecosystem (e.g., kube-controller-manager added ManagedFields stripping in k8s 1.27)
SetTransformis available in client-go'sshared_informer.go