Symptoms: GameServer never reaches Ready state and remains in Creating or StartingCommon causes:
Pod scheduling issues
# Check if Pod is pendingkubectl get pods -l agones.dev/gameserver=<gameserver-name># Describe the Pod to see scheduling errorskubectl describe pod <pod-name>
Look for:
Insufficient CPU/memory resources
Node selector/affinity constraints not met
Taints that prevent scheduling
PersistentVolume provisioning delays
Solution:
Add more nodes to cluster
Adjust resource requests/limits
Review node selectors and taints
Image pull failures
# Check Pod eventskubectl describe pod <pod-name> | grep -A 5 Events
Look for:
ImagePullBackOff or ErrImagePull errors
Authentication failures to registry
Invalid image name or tag
Solution:
Verify image name and tag are correct
Ensure imagePullSecrets are configured
Check registry credentials and permissions
SDK not calling Ready()
# Check game server container logskubectl logs <pod-name> -c <game-server-container># Check SDK sidecar logskubectl logs <pod-name> -c agones-gameserver-sidecar
# Check FleetAutoscaler statuskubectl get fleetautoscaler <name> -o yaml# Check for errors in Agones controllerkubectl logs -n agones-system -l app=agones,component=controller --tail=100 | grep -i error
Verify:
status.ableToScale is true
status.scalingLimited indicates if at min/max
Buffer policy is reasonable for your workload
Common issues:
# Buffer size too small - autoscaler at minbuffer: bufferSize: 1 # Too small minReplicas: 5# Solution: increase bufferbuffer: bufferSize: 3 # Better minReplicas: 5
kubectl get namespace agones-system -o json > agones-ns.json
2
Remove finalizers
Edit agones-ns.json and remove the finalizers section:
"spec": { "finalizers": [] // Empty this array}
3
Update namespace via proxy
# Start proxy in one terminalkubectl proxy# In another terminalcurl -k -H "Content-Type: application/json" -X PUT \ --data-binary @agones-ns.json \ http://127.0.0.1:8001/api/v1/namespaces/agones-system/finalize
# Watch GameServer state changeskubectl get gs -w# Get events for a GameServerkubectl get events --field-selector involvedObject.name=<gameserver-name># Get all events in namespacekubectl get events --sort-by='.lastTimestamp'# Describe all GameServers in fleetkubectl get gs -l agones.dev/fleet=<fleet-name> -o name | \ xargs -n1 kubectl describe# Check controller configurationkubectl get deployment -n agones-system agones-controller -o yaml | \ grep -A 20 env:
Run your game server locally against the SDK server:
# Download SDK serverwget https://github.com/googleforgames/agones/releases/download/v1.x.x/agonessdk-server-1.x.x.zipunzip agonessdk-server-1.x.x.zip# Run SDK server./sdk-server.linux.amd64 --local# In another terminal, run your game server./my-game-server
This isolates SDK integration issues from Kubernetes/Agones deployment issues.