-
Notifications
You must be signed in to change notification settings - Fork 822
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
Agones game server pods should use a non-preempting PriorityClass #2793
Comments
This is similar to #1350 |
I dove into this problem this afternoon. My understanding of pod preemption was ... off: That seems potentially useful, but then I started to work through what this looked like instead; see ad5946a for an almost fully worked PR (that I'm about to argue to abandon):
But then I realized the important piece:
So crucially, pod preemption is weak protection for the case already covered by taints/tolerations. IMO, we don't need to bother with setting a priority class on game server pods. I'm closing this as wontfix, but happy to hear arguments that it is maybe useful. Also note that Agones allows you to configure the priority class manually - you can just create a priority class manually and point the game server pod template at it. I need to do a little thinking about this in the context of #2777 and ensure we have reasonable workload separation on Autopilot, though. I'll open a separate issue for that. |
#2840 is the successor thought to this (just leaving a breadcrumb). |
Is your feature request related to a problem? Please describe.
Game server pods do not specify a
PriorityClass
and can be preempted by higher priority pods. As most Agones clusters are ~mostly dedicated Agones workloads, and most applications do not yet specify aPriorityClass
, this is more of a theoretical than practical concern. However, it's one area we can easily control by using a a Non-preemptingPriorityClass
.Describe the solution you'd like
When configured, create a
PriorityClass
object that looks something like:and use the
PriorityClass
when the controller creates pods. This could be done by injecting it inGameServer.Pod()
(but would require a flag), or just injecting it into the gameserver.Spec.Template in the controller code, not clear which is better.Describe alternatives you've considered
PodDisruptionBudget
and graceful termination are both options. Graceful termination doesn't quite fit as well.PodDisruptionBudget
would require us to create one instance per GS pod due to Agones falling into the "Arbitrary Controller" logic. (We should consider this anyways, though, despite how spammy it is, but I will consider it in a separate issue.)The text was updated successfully, but these errors were encountered: