-
Notifications
You must be signed in to change notification settings - Fork 826
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
Fleet scale down: Remove < Ready GameServers first #2702
Fleet scale down: Remove < Ready GameServers first #2702
Conversation
When scaling down GameServers within a single node, Agones would remove GameServers that would be there the longest. This would mean that what would usually happen is that Ready GameServers would be shut down preferentially over GameServers that where not yet Ready. This would result in churn on the node, and a drop in Ready GameServers until the newer ones came to a Ready state. This change will prefer GameServers that are in a state before Ready for deletion, when comparing GameServers that are stored on a single node. Closes googleforgames#2372
Just as a demo, here is a local test I ran: root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl apply -f ./examples/xonotic/fleet.yaml
fleet.agones.dev/xonotic created
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl get gs
NAME STATE ADDRESS PORT NODE AGE
xonotic-z7pr7-dshlz Scheduled 34.82.249.90 7157 gke-test-cluster-default-d5453681-86k9 2s
xonotic-z7pr7-gxm4c Scheduled 34.82.249.90 7886 gke-test-cluster-default-d5453681-86k9 2s
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl get gs
NAME STATE ADDRESS PORT NODE AGE
xonotic-z7pr7-dshlz Ready 34.82.249.90 7157 gke-test-cluster-default-d5453681-86k9 14s
xonotic-z7pr7-gxm4c Ready 34.82.249.90 7886 gke-test-cluster-default-d5453681-86k9 14s
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl scale fleet xonotic --replicas=7
fleet.agones.dev/xonotic scaled
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl get gs
NAME STATE ADDRESS PORT NODE AGE
xonotic-z7pr7-5whlq Scheduled 34.82.249.90 7477 gke-test-cluster-default-d5453681-86k9 1s
xonotic-z7pr7-dshlz Ready 34.82.249.90 7157 gke-test-cluster-default-d5453681-86k9 28s
xonotic-z7pr7-gxm4c Ready 34.82.249.90 7886 gke-test-cluster-default-d5453681-86k9 28s
xonotic-z7pr7-hmznj Scheduled 34.82.249.90 7789 gke-test-cluster-default-d5453681-86k9 1s
xonotic-z7pr7-llswl Scheduled 34.82.249.90 7675 gke-test-cluster-default-d5453681-86k9 1s
xonotic-z7pr7-n7dpg Scheduled 34.82.249.90 7093 gke-test-cluster-default-d5453681-86k9 1s
xonotic-z7pr7-w2x8d Scheduled 34.82.249.90 7459 gke-test-cluster-default-d5453681-86k9 1s
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl scale fleet xonotic --replicas=3
fleet.agones.dev/xonotic scaled
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl get gs
NAME STATE ADDRESS PORT NODE AGE
xonotic-z7pr7-dshlz Ready 34.82.249.90 7157 gke-test-cluster-default-d5453681-86k9 34s
xonotic-z7pr7-gxm4c Ready 34.82.249.90 7886 gke-test-cluster-default-d5453681-86k9 34s
xonotic-z7pr7-hmznj Shutdown 34.82.249.90 7789 gke-test-cluster-default-d5453681-86k9 7s
xonotic-z7pr7-llswl Shutdown 34.82.249.90 7675 gke-test-cluster-default-d5453681-86k9 7s
xonotic-z7pr7-n7dpg Shutdown 34.82.249.90 7093 gke-test-cluster-default-d5453681-86k9 7s
xonotic-z7pr7-w2x8d Scheduled 34.82.249.90 7459 gke-test-cluster-default-d5453681-86k9 7s
root@ca6c2ca7bb5f:/go/src/agones.dev/agones# kubectl get gs
NAME STATE ADDRESS PORT NODE AGE
xonotic-z7pr7-dshlz Ready 34.82.249.90 7157 gke-test-cluster-default-d5453681-86k9 37s
xonotic-z7pr7-gxm4c Ready 34.82.249.90 7886 gke-test-cluster-default-d5453681-86k9 37s
xonotic-z7pr7-w2x8d Ready 34.82.249.90 7459 gke-test-cluster-default-d5453681-86k9 10s You can see - the |
Build Succeeded 👏 Build Id: c65ee955-963a-48a8-92df-cf87b1f9bcaa The following development artifacts have been built, and will exist for the next 30 days:
A preview of the website (the last 30 builds are retained): To install this version:
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: markmandel, roberthbailey The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
What type of PR is this?
/kind bug
What this PR does / Why we need it:
When scaling down GameServers within a single node, Agones would remove GameServers that would be there the longest.
This would mean that what would usually happen is that Ready GameServers would be shut down preferentially over GameServers that where not yet Ready.
This would result in churn on the node, and a drop in Ready GameServers until the newer ones came to a Ready state.
This change will prefer GameServers that are in a state before Ready for deletion, when comparing GameServers that are stored on a single node.
Which issue(s) this PR fixes:
Closes #2372
Special notes for your reviewer: