-
Notifications
You must be signed in to change notification settings - Fork 688
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
Contour leader doesn't update endpoints in xDS cache after upstream pods recreation #6743
Comments
Hey @philimonoff! Thanks for opening your first issue. We appreciate your contribution and welcome you to our community! We are glad to have you here and to have your input on Contour. You can also join us on our mailing list and in our channel in the Kubernetes Slack Workspace |
Hi @philimonoff, I haven’t tried to reproduce this yet, but I wanted to ask - does the issue depend on having a large number of |
@tsaarni thank you for your fast reaction. We don't see this on small installations. I can't say which number of proxies is the exact trigger bound, but this situation occurs sometimes on the installation with 5000 proxies. But if with 5000 it occurs sometimes, with 8000 and more it's a strong pattern. |
@philimonoff Could this be due to rate limiting? The API server client library has limits on requests, which can result in significant delays if a large number of resources change simultaneously. You could try adjusting these parameters in the Contour deployment for the |
@tsaarni I tried 100 qps and 150 burst, and it didn't help. More than that, all hosts started return 503, so I removed these flags. I don't know whats happened, because it's a production environment and I can't let it stay broken. |
@philimonoff Unfortunately at this point, I don’t have any other ideas what could cause the issue. I assume you've already checked for any errors in the leader’s logs? It’s possible the Contour pod might be under heavy resource constraints (like CPU), but if that were the case, I’d expect it to impact |
@tsaarni before opening this issue, I had already tried to read contour debug logs (they have very intensive rate), record pprof sessions and traces (nothing suspicious), watch all metrics contour has. My next idea is to add my own logs on any step of the way of eventslice from api-server to xds cache. Now I also can't even imagine what is the cause of it. |
@tsaarni hello again. One more question. What amount of resources do You consider as enough resources for setup with 8000 proxies? In our case we have 3 cores in request and no limits. Each pod launches on the node with 8 cores, what means it has GOMAXPROCS=8. But leader pod consumes only ~2500m of CPU. Can GOMAXPROCS be too low for this case? |
Hi @philimonoff, sorry I don't know. Unfortunately I have no experiences running that kind of workload. I guess pprof should/could have revealed something suspicious if there was contention, but you already checked that with no findings... |
I still wonder if the issue could be related to Kubernetes API rate limiting, like discussed previously. From what I understood, a large number of resources need to be updated at the same time. If rate limiting blocks the propagation of status updates, I wonder if that could negatively impact the configuration updates as well. |
Hi @tsaarni! We conducted additional tests and found that the increased load on Contour pods is not directly related to whether a pod is the leader but instead depends on the number of Envoy pods connected to a Contour pod. Our rolling update pattern for Contour pods had resulted in a situation where all Envoy pods were connected only to the leader pod. Based on this, our current understanding is that the load on Contour is directly proportional to the number of EDS subscriptions. Here’s the scenario we analyzed:
The main issue is that whenever the Contour pod receives an update for a single Although there is no explicit CPU throttling during these moments, we observed significant CPU pressure stalls (as described in the PSI documentation: link). Here’s the root cause of the issue:
The default cache used by Proposed Solution: With Our Experience: However, we would like to hear your thoughts on this proposal and discuss the potential for incorporating these changes into the main branch of Contour. |
Hi @philimonoff you may be interested to read our recently added PR #6806. Your issue reads just like what we were facing. Essentially at high levels of Our PR swaps the communication method from default GRPC to ADS Delta_GRPC and we are seeing the dramatic improvements as discussed in the PR. Let us know your thoughts/findings on that idea but so far it is working extremely well for us from a place where it was essentially broken and unusable. |
Just a brief update: we’ve addressed this issue with the following patch: It has been running smoothly on our production clusters for several days without any problems. Here are a few images illustrating the impact on a cluster with approximately 7k httpproxies. This could be a lower-impact alternative compared to migrating to the ADS Delta gRPC xDS variant. |
What steps did you take and what happened:
What did you expect to happen:
Leader pod updates it's state after app's pod recreation.
Anything else you would like to add:
Environment:
kubectl version
): 1.25.16, 1.27.16/etc/os-release
): Ubuntu 24.04 LTSThe text was updated successfully, but these errors were encountered: