-
Notifications
You must be signed in to change notification settings - Fork 504
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
Add "Reconciled" condition for RouteGatewayStatus #642
Comments
I agree that we need to do something with Route status, but I think that porting some of the Listener conditions to the Route would probably work better. (Here, the example I'm thinking of is I'd also argue that while |
A route can be degraded in the context of one gateway and perfectly OK in the context of another (really, same for reconciled). |
The status on the routes is in the context of a Gateway already though. That is, each Condition set also includes a backlink to the relevant Gateway. So bringing the Degraded condition down to the Route just means one less lookup for the user, and one more status update for the controller. |
Oh, I forgot 🤕 |
This may be unique to our implementation, but we have a slightly different distinction. We may still be serving traffic with the older config if new config can not be reconciled. So in our case, some kind of distinction between "this config is valid" and the latest config has actually been reconciled is important. That is also fairly similar in concept to "Ready", but slightly different. Maybe both are valuable? |
Yes, having two Conditions makes sense to me, being I note that Contour currently can't guarantee @jpeach, thoughts? |
Ready means it is working at some version. Actually specifying what the version is for an arbitrary tree of resources that can all change at any time doesn't seem straightforward to me. Hard to understand what the semantics of the valid config would be.
Depending on the failure mode, I'd suggest a Gateway condition here.
Could be a ResolvedRefs/DegradedRoutes condition on the Gateway. |
Well, a Condition does have a version, the I must admit to being a bit confused about your reluctance here @jpeach. Is it that you think that the Route should have a minimal set of Conditions, and we should teach people to look at owning Gateways for the system's current state? Personally, I don't feel like that's a great user experience for Route owners. |
So the route is part of an object graph. For the proxy configuration to be "current", all the configuration in all the resources in the graph needs to be current on the server. When you look at a "reconciled" condition on the route, is it really telling you that the config is up to date, or only that this specific route hasn't changed since you last looked at it? For the conditions that Rob listed at the start of this issue, explicit error conditions seems to me to be preferable to a general, "are we current" one. |
Okay, so I'm going to try and summarise what I understand you're saying. You're in support of having the already-existing In this case, Finding out when it has happened requires looking at the Listener. Specific errors on the Route could point out equivalent information to Listener conditions like Adding Just want to make sure I've got what you're saying before I think further about where I'm at. :) |
I understood it as that, in the sense of "there is an ingress controller that accepts responsibility for this object". Once that happens, then of course the controller will reconcile it. |
Although this is likely true, in some cases it can take a matter of minutes to spin up the needed resources to reconcile. I realize that's not worth making a distinction for for many implementations though, so maybe "Reconciled" is a concept that only makes sense for some.
Yeah this is definitely a concern but I think it could be used reasonably effectively when combined with the |
This is getting close to the |
I don't want to diverge the conversation but think it's relevant. How does the already "Scheduled" condition fit into this? @youngnick & I had a conversation about this last week and I don't fully understand what "Scheduled" means in the context of a Gateway. A gateway starts out with If we step back, what is it that we want to convey to users without trying to attached names just yet. From the conversation it sounds like folks want to convey:
That leads me to |
Gateways are logical configurations. There might not be enough underlying load balancing capacity to configure in the requested configuration. In that case "Admitted" is true (the controller admits that it ought to be reconciling the Gateway) but "Scheduled" is false (there's no underlying capacity it can use to stand up the Gateway).
Pods are scheduled to kubelets, and gateways are scheduled to whatever the underlying proxy infrastructure unit is. For example, a controller could spin up a VM instance for each gateway but find that its out of VM quota. It would not be able to schedule new gateways, though it could admit them. |
Your example @jpeach sounds like In my head, the "Scheduled" condition doesn't fit my mental model, but curious what others think. |
That's just an example. There could be any number of reasons and the spec doesn't tell you how to do it. |
I think the key part here in this specific example is that A Gateway is a thing that sets at a logical edge of the cluster in some way. What does that mean? The spec specifically does not define exactly what the "edge" of the cluster is. We don't do that so that the spec can be applicable to lots of different use cases. In the fully general case, on the happy path, the Gateway, per the spec passes through the following Conditions;
Right now, the |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle rotten |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /close |
@k8s-triage-robot: Closing this issue. In response to this:
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/test-infra repository. |
What would you like to be added:
Currently RouteGatewayStatus only has 1 possible condition defined in the API: "Admitted". It's not clear how that should be handled in the following use cases:
It seems wrong to set
Admitted
tofalse
in this case, but it also feels like we need to have a way to communicate this in status.One potential option would be to add a
Reconciled
condition that could be used to indicate if the most recent reconciliation cycle for the Route was successful.Why is this needed:
To improve user experience.
The text was updated successfully, but these errors were encountered: