docs/operator-manual/upgrading/3.2-3.3.md
In this version, the ApplicationSet CRD exceeds the size limit for client-side apply, meaning that the previous upgrade methods will result in The CustomResourceDefinition "applicationsets.argoproj.io" is invalid: metadata.annotations: Too long: may not be more than 262144 bytes
In order to avoid this issue, it is now required to upgrade Argo CD using Server Side Apply (SSA) along with resolve conflicts.
SSA does not store the ApplicationSet fields in last-applied annotation, thus not impacted by the annotation size limitation.
The --force-conflicts flag allows the apply operation to take ownership of fields that may have been previously managed by other tools (such as Helm or a previous kubectl apply). This is necessary for upgrades. Note that any custom modifications you've made to fields that are defined in the Argo CD manifests (like affinity, env, or probes) will be overwritten. However, fields not specified in the manifests (like resources limits/requests or tolerations) will be preserved.
When Argo CD is upgraded using an Argo CD Application, it is required to enable Server-Side Apply in the Application spec:
syncPolicy:
syncOptions:
- ServerSideApply=true
With this configuration, Argo CD will add the resolve conflicts option automatically.
When Argo CD is upgraded manually using plain manifests or Kustomize overlays, it is required to upgrade it with --server-side --force-conflicts. For example, kubectl apply -n argocd --server-side --force-conflicts -f manifests/install.yaml
Users upgrading Argo CD manually using helm upgrade are not impacted by this change, since Helm does not use client-side apply and does not result in creation of the last-applied annotation.
In some cases, after upgrading to one of those versions and applying Server-Side Apply, the following error occured:
one or more synchronization tasks completed unsuccessfully, reason: Failed to perform client-side apply migration: failed to perform client-side apply migration on manager kubectl-client-side-apply: error when patching "/dev/shm/2047509016": CustomResourceDefinition.apiextensions.k8s.io "applicationsets.argoproj.io" is invalid: metadata.annotations: Too long: may not be more than 262144 bytes.
Users that have configured the sync option ClientSideApplyMigration=false as a temporary remediation for the above error, should remove it after upgrading to 3.3.2. Disabling ClientSideApplyMigration imposes a risk to encounter conflicts between K8s field managers in the future.
Previously, Argo CD's Source Hydrator pushed a new hydrated commit for every DRY (source) commit, regardless of whether any manifest files (manifest.yaml) actually changed. This was necessary for the hydrator to track which DRY commit had last been hydrated: it embedded this information in the hydrator.metadata file's drySha field in each hydrated commit.
Starting with v3.3, the Source Hydrator uses git notes to record the state of the most recently hydrated DRY commit instead of creating a hydrated commit on every DRY commit. The git note is stored in a dedicated namespace reserved for the Source Hydrator, making the state both reliable and isolated from other repository operations.
This design change improves repository cleanliness, reduces unnecessary commit noise, and lowers risk from excessive branch divergence due to frequent automated commits.
manifest.yaml have not changed (even if DRY SHA is new), the hydrator skips committing manifests and only updates the git note to reflect the latest hydrated DRY SHA.The Settings API now returns less information when accessed anonymously.
It no longer returns the resourceOverrides field which is considered sensitive information.
The new environment variable ARGOCD_K8S_SERVER_SIDE_TIMEOUT can be used to control the K8s server side timeout of API requests.
In 3.2 and before this change, the K8s server side timeout was controlled by ARGOCD_K8S_TCP_TIMEOUT
which is also used to control the TCP timeout when communicating with the K8s API server.
From now onwards, the Kubernetes server-side timeout is controlled by a separate environment variable.
The --self-heal-backoff-cooldown-seconds flag of the argocd-application-controller has been deprecated and will be
removed in a future release.
Argo CD v3.3 upgrades the bundled Helm version to 3.19.2. There are no breaking changes in Helm 3.19.2 according to the release notes.
Helm 2.x is no longer supported as we are dropping the --client flag in calls to helm version.
Argo CD v3.3 upgrades the bundled Kustomize version from v5.7.0 to v5.8.0. According to the 5.7.1 and 5.8.0 release notes, there are no breaking changes.
However, note that Kustomize 5.7.1 introduces code to replace the shlex library used for parsing arguments in exec plugins.
If any existing manifests become corrupted, please follow the instructions in the
5.7.1 release notes.
Kustomize 5.8.0 also resolves an issue where namespaces were not properly propagated to Helm charts. If you rely on Helm charts within kustomization files, please review the details in the associated fix: kubernetes-sigs/kustomize#5940.