Experimental AppSet progressive sync capability #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Background
We are currently implementing complex automated git tagging and directory structures in order to work around the lack of ability to limit the rollout options for updating Application resources managed by an ApplicationSet. This leads to increased complexity in our repositories and increases the chance for human error or edge cases in the tooling we're writing.
This PR is an attempt to move toward supporting more fine grained options for orchestrating when Applications are updated in response to a change in an ApplicationSet spec. The basic approach boils down to allowing a user to provide a list of Application label selectors in the order they would like the Applications to be updated. Each set of Applications must become 'Ready' in the K8s API before the AppSet reconciler moves on to updating the next set of Applications.
I'm open to alternate ideas, but I believe it makes sense to include the update strategy logic within the ApplicationSet spec, the same way a Deployment Rollout resource is responsible for the strategy used to cycle its pods.
Prior Art & Issues
argoproj/argo-cd#7437
argoproj#61
argoproj/argo-cd#1283
https://github.com/maruina/argocd-progressive-rollout-controller (abandoned)
https://github.com/Skyscanner/applicationset-progressive-sync (pre-alpha)
TODO
Results
Tested with a simple nginx pod configured with a 2m readiness probe delay to simulate an application taking time to become ready. A single commit updating an annotation on the pod spec rolled out each Application in series, waiting for the prior Application to become 'Ready'.