-
Notifications
You must be signed in to change notification settings - Fork 873
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CRD: allow specification of the desired step to be in #2906
Comments
I am still digesting a lot of this and need to think about it more but I am thinking that instead of |
Two comments here First of all this is a welcome addition. But we need to remember that Argo Rollouts is not dependent on Argo CD. Several companies use Argo Rollouts on its own and maybe they don't even care about GitOps at all. So we should make sure that the solution selected can work in both cases (GitOps and non-GitOps) Secondly if we implement such spec, we need to do something similar for blue/green as well. |
Sure; I think
Right -- we've been happily using ArgoCD for the past year, and I've been looking on and off to use Argo Rollouts to manage our rollouts, but I've received concerns about this so I thought I'd open the discussion. I think the proposal I have is fully compatible with a non-gitops workflow, and might in fact be useful to fine-control the progression of a tricky rollout.
Yes, this was my intention; the example only showed canary but this would apply to blue/green too. |
@Snaipe could you explain the blue green side because blue green has no steps, I only saw this as use for canary and was going to suggest even moving the pauseAtStep down inside of the canary field. Could you explain a bit on how this would work with blue green or what you would want to control via git? |
Blue/Green should have a single switch like promoted=yes/no or something similar to decide if blue/green is in the initial phase (preview doesn't get any traffic at all) or promoted one (new color gets all the traffic) At least this is what I imagine... All this of course assuming that autoPromotionEnabled=false |
Yeah, I was about to propose that blue/green could get paused at various points ( The way this would have worked is I'm not sure whether it's advisable to invent fake "step" names for blue/green, or use the step terminology altogether. It also feels like blue/green today is somewhat easier to manage via git-ops by using autoPromotionEnabled and flip-flopping the value between false and true. At that stage this feels like a separate Thoughts? |
Yea I agree for blue green I would probably just use
|
This issue is stale because it has been open 60 days with no activity. |
Summary
One point of resistance in adopting Argo Rollouts for us is the departure from GitOps to represent the transitive state of a rollout. In other words, there are no good, streamlined way to represent in git which step the Rollout object is supposed to be at, and instead the documentation recommends using kubectl argo rollouts to manage rollouts, which is not version controlled.
Perhaps more importantly, if a rollout pauses for an extended period of time (say 12 hours), then whomever started the deployment will likely not be around or ready when the next step kicks in.
Today, this can be achieved sub-optimally by making use of the paused attribute. For instance, you could define a handful of steps to set the traffic weight, with pauses of 1h in between, start the rollout as paused, and flip-flop
.spec.paused
between true to resume the rollout whenever someone is back at their desk and false whenever said person walks out. This is of course not great.It would be an improvement if we could specify which step the rollout is supposed to be at, and have Argo Rollouts reconcile the deployment to be at that step.
This could be implemented as a new
step
attribute in the rollout spec, which could be an index in the steps list:... or, we could make this more palatable by naming steps and using that:
Use Cases
This would allow for a pure-gitops flow for managing red-green/canary deployments.
An Example Flow
Let's start from the demo rollout, with only
steps
modified for the sake of this example.Applying this deploys
argoproj/rollouts-demo:blue
, serving 100% of the traffic.Now, let's say we want to update this to green, starting with a weight of 40 (i.e. step 1). We would make the following commit:
Argo Rollouts would reconcile this, start the new deployment, execute steps 0 and 1, and stop.
If we wanted to proceed with the deployment, we'd either set
step
to 3 (i.e. the last step), or removestep
altogether (at which points the steps would get executed to completion).But let's say we discovered an issue with the green deployment and wanted to roll back. No problem, we can just
git revert
the commit that introduced this:By reverting the template spec back to its stable state, and because the upgrade was not completed, Argo Rollouts does as usual and treats this as a rollback that it expedites.
Message from the maintainers:
Impacted by this bug? Give it a 👍. We prioritize the issues with the most 👍.
The text was updated successfully, but these errors were encountered: