I'm trying to figure out how to modify a Custom Resource Definition (CRD) that was installed using a Helm chart through ArgoCD. For instance, with the aws-load-balancer-controller, I've noticed that the new version's specification has some changes, but the old CRD seems to be ignored by Helm's diff tool, so I can't update it. Specifically, I find this line in the CRD:
preserveUnknownFields: true
But it needs to be set to false based on the new version's requirements. Is there a way to update the CRD's spec using this installation method?
3 Answers
You might want to check out the GitHub repository at https://github.com/Skarlso/crd-bootstrap/. It could have some insights on how to handle CRDs in this scenario.
I've used FluxCD for ages and have had no issues with CRD management. Personally, I prefer working with YAML manifests and Kustomize instead of Helm, as it offers more reliability for my setups.
If you’re looking for a smoother experience, you should consider using a different GitOps tool. Flux handles CRD upgrades without any hassle. The challenge with Helm is that it doesn’t support directly upgrading CRDs, so you might end up running into issues like this one.
Right! If the CRD is structured correctly in the crd folder of the chart, you'll need to leverage Flux's features. Charts with CRDs usually contain instructions for manual upgrades anyway. Helm’s quirks can make CRD management a bit tricky.

Yeah, Argo is great, but Flux is the only one that aligns with the Helm SDK for GitOps. Helm currently doesn’t manage CRD upgrades, which can be frustrating. But if you use the Flux Helm Controller, you can manually invoke CRD upgrades, but it might depend on how your chart handles CRDs.