Skip to content

Conversation

@Skaronator
Copy link
Contributor

@Skaronator Skaronator commented Aug 25, 2025

This PR addresses the significant performance regression introduced by #5940 (namespace propagation to Helm charts). The original implementation
required expensive resource origin tracking, causing build times to increase from ~0.6s to over 13s.

Solution

Instead of using expensive resource origin tracking, this PR introduces a lightweight annotation-based approach:

  • Helm chart resources are now tagged with kustomize.config.k8s.io/helm-chart-generated: "true" annotation during generation
  • NamespaceTransformer uses this annotation to efficiently identify and skip Helm-generated resources
  • Eliminates the performance bottleneck of origin tracking while maintaining the same functionality

Performance Impact

Version Build Time Improvement
Latest master 15.34s baseline
Latest release 0.59s -
This PR 0.54s 96.5% faster than master

Technical Notes

  • The annotation approach is ~30x faster than origin tracking
  • Resource tracking performance issues remain a broader architectural concern for future consideration

@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Aug 25, 2025
@k8s-ci-robot
Copy link
Contributor

Hi @Skaronator. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Aug 25, 2025
@Skaronator Skaronator force-pushed the performance-improvments branch from 20486a7 to c7612d1 Compare August 25, 2025 07:36
@k8s-ci-robot
Copy link
Contributor

This PR has multiple commits, and the default merge method is: merge.
You can request commits to be squashed using the label: tide/merge-method-squash

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Aug 25, 2025
@ephesused
Copy link
Contributor

Thanks, @Skaronator. Since you're already working on this one, would you be willing to include the test from #2869? If not, I can plan to do it myself, but that's likely to be a little while - I won't have the time for at least a few days.

@Skaronator
Copy link
Contributor Author

Hi @ephesused,
The test from #2869 seems independent from this fix and would be better as its own PR - that way we don't block this one from merging.
I'm quite busy right now but can look into adding that benchmark, maybe next week if you haven't already done it yourself.

@ephesused
Copy link
Contributor

@Skaronator, no worries. Thanks for this fix!

@ephesused
Copy link
Contributor

I ran this change through the same testing process I noted over in #5940 (comment). This change looks good to me:

kustomize_test.go:293: Runtime variation (15.56x): branch-1c0f1bf5 ran in 9619ms; release-v5.4.3 ran in 618ms.
...
kustomize_test.go:293: Runtime variation (0.96x): branch-pr-5971 ran in 596ms; release-v5.4.3 ran in 618ms.

@Skaronator Skaronator marked this pull request as draft August 25, 2025 21:22
@k8s-ci-robot k8s-ci-robot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Aug 25, 2025
@Skaronator Skaronator marked this pull request as ready for review August 26, 2025 14:05
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Aug 26, 2025
@k8s-ci-robot k8s-ci-robot requested a review from koba1t August 26, 2025 14:06
@Skaronator
Copy link
Contributor Author

Reverted the origin tracking which causes the performance issue. Now relying on a annotation to keep track that these resources are generated by Helm.

Long term it would be probably better to revisit the Origin Tracking feature. That feature is behind a feature flag but the 20x slowdown still exist.

@Skaronator
Copy link
Contributor Author

Tests now pass. Somehow forget to commit that one file.

@koba1t koba1t added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Sep 12, 2025
@koba1t
Copy link
Member

koba1t commented Sep 12, 2025

/ok-to-test

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Sep 12, 2025
@stormqueen1990
Copy link
Member

/uncc

@k8s-ci-robot k8s-ci-robot removed the request for review from stormqueen1990 September 14, 2025 21:04
@Skaronator
Copy link
Contributor Author

/retest

@Skaronator
Copy link
Contributor Author

/test kustomize-presubmit-master

@Skaronator
Copy link
Contributor Author

kustomize-presubmit-master now passes. Can anyone trigger the GitHub Actions again? Not sure why they don't run. I'm already a Contributor and the PR has ok-to-test label.

@Skaronator Skaronator requested a review from koba1t September 21, 2025 19:36
@ephesused
Copy link
Contributor

Still LGTM:

    kustomize_test.go:296: Runtime variation (21.08x): branch-master ran in 13722ms; release-v5.4.3 ran in 651ms.
    kustomize_test.go:298: Marking test a failure due to runtime variation

...

            --- PASS: Test_kustomize/kust-issue-2869/kustomize/release-v5.7.1 (0.69s)
            --- FAIL: Test_kustomize/kust-issue-2869/kustomize/branch-master (13.74s)
            --- PASS: Test_kustomize/kust-issue-2869/kustomize/branch-pr-5971 (0.58s)

Copy link
Member

@koba1t koba1t left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think looks like almost good with code review.
Please fix this comments.

@koba1t
Copy link
Member

koba1t commented Sep 29, 2025

@Skaronator

Resource tracking performance issues remain a broader architectural concern for future consideration

Could you open new issue that tracking this performance problem?

@Skaronator
Copy link
Contributor Author

@koba1t

Could you open new issue that tracking this performance problem?

Yeah that seems like a good idea. I created #5988.

@koba1t
Copy link
Member

koba1t commented Sep 29, 2025

Thanks @Skaronator
I think this change is almost good!

And thanks for your help @ephesused!

/lgtm
/approve

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Sep 29, 2025
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: koba1t, Skaronator

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Sep 29, 2025
@k8s-ci-robot k8s-ci-robot merged commit 278dd6e into kubernetes-sigs:master Sep 29, 2025
11 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 14, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [kubernetes-sigs/kustomize](https://github.com/kubernetes-sigs/kustomize) | minor | `v5.7.1` -> `v5.8.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>kubernetes-sigs/kustomize (kubernetes-sigs/kustomize)</summary>

### [`v5.8.0`](https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize/v5.8.0)

[Compare Source](kubernetes-sigs/kustomize@kustomize/v5.7.1...kustomize/v5.8.0)

### Highlights

##### implements to replacements value in the structured data

Now, We can edit yaml/json in yaml manifests with replacements transformer.
See [#&#8203;5679](kubernetes-sigs/kustomize#5679)

##### For example

```yaml

## source
apiVersion: v1
kind: ConfigMap
metadata:
  name: source-configmap
data:
  HOSTNAME: www.example.com
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: target-configmap
data:
  config.json: |-
    {"config": {
      "id": "42",
      "hostname": "REPLACE_TARGET_HOSTNAME"
    }}
```

```yaml

## replacement
replacements:
- source:
    kind: ConfigMap
    name: source-configmap
    fieldPath: data.HOSTNAME
  targets:
  - select:
      kind: ConfigMap
      name: target-configmap
    fieldPaths:
    - data.config\.json.config.hostname
```

##### fix: Propagate Namespace correctly to Helm

The long-standing bug where kustomize's namespace transformer did not pass namespaces to helmCharts has been fixed.
See [#&#8203;5940](kubernetes-sigs/kustomize#5940)

##### For example

```yaml

## define namespace
namespace: any-namespace

helmCharts:
- name: minecraft
  repo: https://kubernetes-charts.storage.googleapis.com
  version: v1.2.0
  # namespace: any-namespace   ## propagates without additional namespace specific
  valuesFile: values.yaml
```

#### Feature

[#&#8203;5679](kubernetes-sigs/kustomize#5679): implements to replacements value in the structured data
[#&#8203;5863](kubernetes-sigs/kustomize#5863): Add regex support for Replacement selectors
[#&#8203;5930](kubernetes-sigs/kustomize#5930): feat: add PatchArgs API type to populate patch options

#### fix

[#&#8203;5940](kubernetes-sigs/kustomize#5940): fix: Propagate Namespace correctly to Helm
[#&#8203;5971](kubernetes-sigs/kustomize#5971): fix: performance recession when propagating namespace to helm
[#&#8203;5942](kubernetes-sigs/kustomize#5942): fix fnplugin storagemounts validation
[#&#8203;5958](kubernetes-sigs/kustomize#5958): fix: make AbsorbAll conflict error more verbose
[#&#8203;5961](kubernetes-sigs/kustomize#5961): refactor: nested format string
[#&#8203;5967](kubernetes-sigs/kustomize#5967): Fix infinite loop in HTTP client by validating URLs before requests
[#&#8203;5985](kubernetes-sigs/kustomize#5985): fix(kyaml/yaml): minor nil safety fix for RNode.Content etc
[#&#8203;5991](kubernetes-sigs/kustomize#5991): Fix duplicate key error when adding multiple labels with --without-selector

#### Dependencies

[#&#8203;5962](kubernetes-sigs/kustomize#5962): chore: update dependencies from security alert
[#&#8203;5959](kubernetes-sigs/kustomize#5959): update go 1.24.6

#### chore

[#&#8203;6007](kubernetes-sigs/kustomize#6007): Update kyaml to v0.21.0
[#&#8203;6008](kubernetes-sigs/kustomize#6008): Update cmd/config to v0.21.0
[#&#8203;6009](kubernetes-sigs/kustomize#6009): Update api to v0.21.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants