For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/containers-orchestration/managed-kubernetes/install-agones.md.

Installer Agones sur OVHcloud Managed Kubernetes

Voir en Markdown

Découvrez comment installer Agones sur OVHcloud Managed Kubernetes

Ce tutoriel vous guide dans l'installation d'Agones sur votre OVHcloud Managed Kubernetes Service. Agones est une solution open source d'hébergement de serveurs de jeu multijoueur dédiés, construite sur Kubernetes.

Pour tester votre installation, vous allez installer un serveur de jeu Xonotic et disputer quelques deathmatchs à l'ancienne...

Avant de commencer

Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel, ainsi que de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.

Vous devez également avoir Helm installé sur votre poste de travail et sur votre cluster ; reportez-vous au tutoriel Comment installer Helm sur OVHcloud Managed Kubernetes Service.

Qu'est-ce qu'Agones ?

L'un des principaux avantages de Kubernetes est son écosystème redoutable. De Rancher à Istio, de Rook à Fission, de gVisor à KubeDB, l'écosystème Kubernetes est riche, dynamique et en constante croissance. Nous arrivons désormais à un point où, pour la plupart des besoins de déploiement, on peut dire qu'il existe un projet open source basé sur K8s pour cela.

L'une des dernières additions à cet écosystème est le projet Agones, une solution open source d'hébergement de serveurs de jeu multijoueur dédiés, construite sur Kubernetes et développée par Google en collaboration avec Ubisoft. Le projet a été annoncé en mars et a déjà fait beaucoup de bruit...

Agones sur OVHcloud Managed Kubernetes

Pourquoi Agones ?

Agones (dérivé du mot grec agōn, qui désignait des concours organisés lors de fêtes publiques, ou plus généralement une « compétition » ou un « concours de jeux ») vise à remplacer les solutions propriétaires habituellement utilisées pour déployer, mettre à l'échelle et gérer des serveurs de jeu.

Agones enrichit Kubernetes avec un contrôleur personnalisé et une définition de ressource personnalisée (CRD). Grâce à eux, vous pouvez standardiser les outils et API Kubernetes pour créer, mettre à l'échelle et gérer des clusters de serveurs de jeu.

Quels types de serveurs de jeu ?

Agones se concentre principalement sur les jeux multijoueur en ligne comme les FPS et les MOBA, des jeux rapides nécessitant des serveurs de jeu dédiés à faible latence qui synchronisent l'état du jeu entre les joueurs et servent de source de vérité pour les situations de jeu.

Ces types de jeux nécessitent des serveurs de jeu dédiés relativement éphémères, chaque match s'exécutant sur une instance de serveur distincte. Les serveurs doivent être stateful (ils doivent conserver l'état du jeu), cet état étant généralement conservé en mémoire pendant toute la durée du match.

La latence est un enjeu majeur, car les aspects compétitifs en temps réel de ces jeux exigent des réponses rapides du serveur. Cela signifie que la connexion entre l'appareil du joueur et le serveur de jeu doit être la plus directe possible, en évitant idéalement tout serveur intermédiaire tel qu'un load balancer.

Connecter les joueurs au bon serveur

Chaque éditeur de jeux disposait auparavant de ses propres solutions propriétaires, mais la plupart suivent un flux similaire, avec un service de matchmaking qui regroupe les joueurs en un match, sollicite un gestionnaire de cluster pour provisionner une instance dédiée de serveur de jeu, puis transmet aux joueurs son adresse IP et son port afin qu'ils puissent se connecter directement au serveur et jouer.

Matchmaking en ligne et attribution de serveur de jeu

Agones, avec son contrôleur personnalisé et sa définition de ressource personnalisée, remplace l'infrastructure complexe de gestion de cluster par des outils et API standardisés basés sur Kubernetes. Les services de matchmaking interagissent avec ces API pour créer de nouveaux pods de serveur de jeu et transmettre leur adresse IP et leur port aux joueurs concernés.

Matchmaking en ligne et attribution de serveur de jeu avec Agones
Info

La cerise sur le gâteau

L'utilisation de Kubernetes pour ces tâches apporte également des avantages supplémentaires appréciables, comme la possibilité de déployer l'ensemble de l'infrastructure de jeu dans un environnement de développement minikube, ou de la cloner facilement pour la déployer dans un nouveau datacenter ou une nouvelle région cloud, tout en offrant une plateforme complète pour héberger tous les services complémentaires nécessaires à la création d'un jeu : gestion des comptes, classements, inventaire...

Sans oublier la simplicité d'exploitation des plateformes basées sur Kubernetes, en particulier lorsqu'elles sont dynamiques, hétérogènes et distribuées, comme le sont la plupart des plateformes de jeu en ligne.

Déployer Agones sur OVHcloud Managed Kubernetes

Il existe plusieurs façons d'installer Agones dans un cluster Kubernetes. Pour notre test, nous avons choisi la plus simple : l'installation via Helm.

Autoriser la création de ressources RBAC

La première étape pour installer Agones consiste à configurer un compte de service disposant des permissions suffisantes pour créer certains types de ressources RBAC spécifiques.

kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:default

Nous disposons désormais du Cluster Role Binding nécessaire à l'installation :

$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:default
clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding created

Installer le chart Agones

Ajoutez maintenant le dépôt Agones à la liste des dépôts Helm.

helm repo add agones https://agones.dev/chart/stable

Installez ensuite le chart stable d'Agones :

helm install my-agones --namespace agones-system --create-namespace agones/agones 

Après quelques instants, Agones devrait être installé :

$ helm repo add agones https://agones.dev/chart/stable
"agones" has been added to your repositories

$ helm install my-agones --namespace agones-system --create-namespace agones/agones
NAME: my-agones
LAST DEPLOYED: Fri Dec  9 09:35:16 2022
NAMESPACE: agones-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Agones components have been installed in the namespace agones-system.

You can get their status by running:
kubectl --namespace agones-system get pods -o wide

Once ready you can create your first GameServer using our examples https://agones.dev/site/docs/getting-started/create-gameserver/ .

Finally don't forget to explore our documentation and usage guides on how to develop and host dedicated game servers on top of Agones:

 - Create a Game Server (https://agones.dev/site/docs/getting-started/create-gameserver/)
 - Integrating the Game Server SDK (https://agones.dev/site/docs/guides/client-sdks)
 - GameServer Health Checking (https://agones.dev/site/docs/guides/health-checking)
 - Accessing Agones via the Kubernetes API (https://agones.dev/site/docs/guides/access-api)
 
Warning

L'installation que nous venons de réaliser ne convient pas à un usage en production, car les instructions d'installation officielles recommandent d'exécuter Agones et les serveurs de jeu dans des pools de nœuds séparés et dédiés. Mais pour les besoins de notre test, cette configuration de base est suffisante.

Confirmer le bon démarrage d'Agones

Pour vérifier qu'Agones s'exécute sur notre cluster Kubernetes, nous pouvons examiner les pods du namespace agones-system :

kubectl get --namespace agones-system pods

Si tout va bien, vous devriez voir un pod agones-controller avec le statut Running :

$ kubectl get --namespace agones-system pods

NAME                                READY   STATUS    RESTARTS   AGE
agones-allocator-6db787b757-4vd7r   1/1     Running   0          95s
agones-allocator-6db787b757-kvdkz   1/1     Running   0          95s
agones-allocator-6db787b757-w9mjw   1/1     Running   0          95s
agones-controller-fc95bcbd7-8zv4q   1/1     Running   0          95s
agones-ping-6fd4dd9b48-r49qq        1/1     Running   0          95s
agones-ping-6fd4dd9b48-w6pzd        1/1     Running   0          95s

Vous pouvez également obtenir plus de détails avec :

kubectl describe --namespace agones-system pods

En examinant la description d'agones-controller, vous devriez voir quelque chose comme :

$ kubectl describe --namespace agones-system pods
Name:                 agones-controller-fc95bcbd7-8zv4q
Namespace:            agones-system
[...]
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True

Toutes les Conditions doivent avoir le statut True.

Déployer un serveur de jeu

L'exemple Hello world d'Agones est plutôt sobre : un simple serveur de jeu Xonotic.

Xonotic est un FPS multijoueur open source, et plutôt réussi, avec de nombreux modes de jeu, cartes, armes et options de personnalisation intéressants.

Déployer un serveur de jeu Xonotic sur Agones est plutôt simple :

kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.27.0/examples/xonotic/gameserver.yaml

Cette commande installe Xonotic :

$kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.27.0/examples/xonotic/gameserver.yaml
gameserver.agones.dev/xonotic created

Le déploiement du serveur de jeu peut prendre quelques instants ; il faut donc attendre que son statut passe à Ready ou Unhealthy avant de l'utiliser. Vous pouvez récupérer le statut avec :

kubectl get gameserver

Attendez que le statut renvoyé soit Ready ou Unhealthy pour votre serveur de jeu :

$ kubectl get gameserver

NAME      STATE   ADDRESS         PORT   NODE                                         AGE
xonotic   Ready   51.83.xxx.yyy   7410   nodepool-f636da5d-3d0d-481d-aa-node-f4d042   24s

Une fois le serveur de jeu prêt, vous obtenez également l'adresse et le port à utiliser pour vous connecter à votre partie de deathmatch (dans notre exemple, 51.83.xxx.yyy:7410).

À vous de jouer

Maintenant que vous disposez d'un serveur, testez-le !

Téléchargez le client Xonotic (il fonctionne sous Windows, Linux et macOS, aucune excuse n'est valable), puis lancez-le :

Xonotic

Accédez ensuite au menu Multiplayer et saisissez l'adresse et le port de votre serveur de jeu :

Menu Multijoueur

Vous êtes maintenant prêt à jouer !

À l'assaut

Et côté serveur ?

Côté serveur, vous pouvez observer le déroulement de votre partie via kubectl logs. Commencez par identifier le pod qui exécute le jeu :

kubectl get pods

Vous constaterez que votre serveur de jeu s'exécute dans un pod appelé xonotic :

$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
xonotic   2/2     Running   0          2m28s

Vous pouvez ensuite utiliser kubectl logs sur ce pod. Celui-ci contient deux conteneurs, le conteneur principal xonotic et un sidecar Agones ; vous devez donc préciser que vous souhaitez les logs du conteneur xonotic :

$ kubectl logs xonotic xonotic
>>> Connecting to Agones with the SDK
>>> Starting health checking
>>> Starting wrapper for Xonotic!
>>> Path to Xonotic server script: /home/xonotic/Xonotic/server_linux.sh []
Game is Xonotic using base gamedir data
gamename for server filtering: Xonotic
Xonotic Linux 20:37:34 Jun 27 2022 - release
Current nice level is below the soft limit - cannot use niceness
Skeletal animation uses SSE code path
execing quake.rc
[...]
>>> Found 'listening' statement: 2
Server using port 26000
Server listening on address 0.0.0.0:26000
Server listening on address [0:0:0:0:0:0:0:0]:26000
execing server.cfg
maxplayers can not be changed while a server is running.
It will be changed on next server startup ("map" command).
"maxplayers" set to "8"
Game type successfully switched to dm
Maplist contains no usable maps!  Resetting it to default map list.
Switching to map silentsiege
menu: unknown program name
Server using port 26000
>>> Found 'listening' statement: 3
Server listening on address 0.0.0.0:26000
>>> Found 'listening' statement: 4
>>> Moving to READY: Server listening on address [0:0:0:0:0:0:0:0]:26000
Server listening on address [0:0:0:0:0:0:0:0]:26000

Invitez des amis

La prochaine étape est particulièrement agréable : invitez des amis à se connecter au serveur pour un véritable deathmatch, comme à l'époque de Quake 2.

Suppression (nettoyage)

Désinstallez le serveur de jeu Xonotic :

kubectl delete gameserver

Pour désinstaller Agones, puisque vous l'avez installé via Helm, vous pouvez utiliser la commande helm uninstall afin de supprimer le chart Helm installé d'Agones :

helm uninstall my-agones -n agones-system

Supprimez le ClusterRoleBinding installé :

kubectl delete clusterrolebinding cluster-admin-binding

Aller plus loin

  • Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.

  • Échangez avec notre communauté d'utilisateurs.

Cette page vous a-t-elle aidé ?