Skip to main content
BlogCalculPas de décalage, tout en fragilité : Améliorez vos jeux avec Xonotic, K3s et Edge Computing

Pas de décalage, tout en fragilité : Améliorez vos jeux avec Xonotic, K3s et Edge Computing

No_Lag_All_Frag_Level_Up_Your_Gaming

Mettons en scène un joueur : vous êtes en train de jouer la partie de votre vie (et vous aimeriez bien pouvoir la regarder en streaming aujourd'hui). Vous êtes en train d'aligner le coup de tête gagnant parfait et vous imaginez déjà l'affichage de l'écran de la victoire... et puis le jeu traîne en longueur. Vous êtes éliminé par votre adversaire. La partie est terminée.

Nous sommes tous passés par là lorsqu'un petit problème dans un jeu en temps réel vous a fait perdre votre moment de gloire et votre tour de victoire. La frustration engendrée par cette expérience a entraîné un regain de popularité pour les jeux entièrement auto-hébergés afin que vous puissiez contrôler votre propre destin en tant que joueur. Malheureusement, l'auto-hébergement n'est pas une option pour tous les jeux ni pour tous les joueurs. Et si nous vous disions qu'il existe un moyen de reléguer le lag dans l'ombre sans avoir à acheter et à entretenir votre propre matériel ?

Avec un peu de développement, vous pouvez construire votre propre paradis de jeu distribué en rapprochant le serveur de vous (le joueur) et en créant votre propre expérience à faible latence. Entrez dans le trio de puissance : Xonotic, K3set la puissance de l'informatique en périphérie avec Cloud d'Akamai.

Qu'est-ce que l'avantage ?

Au lieu de s'appuyer sur des centres de données massifs et centralisés situés à des centaines (voire des milliers) de kilomètres, l'informatique en périphérie rapproche la puissance de traitement de la source des données - dans ce cas, c'est vous. Cela réduit considérablement le temps de latence qui crée ce redoutable décalage, simplement parce que les données n'ont pas besoin de voyager aussi loin.

Pourquoi K3s ? Légèreté et agilité

K3s est une distribution Kubernetes légère. Considérez Kubernetes (ou K8s) comme un gestionnaire incroyablement intelligent et efficace pour vos applications, qui gère le déploiement, la mise à l'échelle et s'assure que tout fonctionne sans heurts. K3s est un dérivé de K8s spécialement conçu pour les environnements à ressources limitées. Il est petit, rapide et incroyablement efficace - et peut être votre assistant d'infrastructure de jeu.

Et Agones ? Le maestro des serveurs de jeux

Agones est un projet open-source, natif de Kubernetes, spécifiquement conçu pour gérer des serveurs de jeux dédiés. Il gère les complexités de la mise à l'échelle, de l'allocation et de l'exécution des instances de serveurs de jeu afin que vous puissiez vous concentrer sur le fragging et non sur la configuration des serveurs.

Construisons ! (La partie amusante)

We’re going to set up a Xonotic server (a fast-paced, free, open-source FPS) on a Linode instance, managed by K3s and Agones. Get ready to experience Xonotic like never before! If you’d like to follow our full guide, go to the docs.

Étape 1 : Terraform Time - Poser les bases

Terraform est notre outil "Infrastructure as Code". Il nous permet de définir notre configuration de serveur dans un fichier, ce qui la rend reproductible et facile à gérer. Commençons par l'installer :

brew install terraform

(Remarque : si vous n'utilisez pas macOS, consultez le site Web deTerraform pour obtenir des instructions d'installation pour votre système d'exploitation).

Étape 2 : Mise en place du projet - Votre QG de jeu

Créons un répertoire pour notre projet :

mkdir xonotic

cd xonotic

Étape 3 : Le script Terraform - Construire votre serveur (et votre pare-feu !)

Créer un fichier nommé main.tf et collez le code suivant. 

C'est ici que la magie opère ! Nous définissons notre instance Linode, mettons en place un pare-feu et configurons tout ce dont nous avons besoin. 

Dans ce cas, nous déployons une instance de calcul dédiée à Denver, l'une des régions de calcul distribuées d'Akamai. Nous recommandons d'utiliser l'instance dédiée de 8 Go qui dispose de 4 vCPU, ce qui est approprié pour plusieurs challengers.

Remarque : pour que cet exemple de code fonctionne tel quel, vous devrez avoir accès aux régions de calcul distribuées, dont la disponibilité est actuellement limitée.

# Specify the required Terraform provider

terraform {

  required_providers {

    linode = {

      source = "linode/linode"

      version = ">= 1.27.0"  # Ensure a version that supports metadata

    }

  }

}

# Define variables for sensitive information

variable "linode_token" {

  description = "Linode API token"

  type        = string

  sensitive   = true

}

variable "root_password" {

  description = "Root password for the instance"

  type        = string

  sensitive   = true

}

variable "admin_ip" {

  description = "IPv4 address to be used to access the instance"

  type        = string

  sensitive   = true

}

# Configure the Linode provider

provider "linode" {

  token = var.linode_token

}

# Define the cloud-init configuration

data "template_file" "cloud_init" {

  template = <<EOF

#cloud-config

package_update: true

package_upgrade: true

runcmd:

  - apt update -y

  - apt upgrade -y

EOF

}

# Create a 8GB dedicated Linode instance in Denver

resource "linode_instance" "my_instance" {

  label     = "xonotic-game-server"

  region    = "us-den-1"

  type      = "g6-dedicated-edge-4"

  image     = "linode/ubuntu20.04"

  root_pass = var.root_password

  booted    = true

  metadata {

    user_data = base64encode(data.template_file.cloud_init.rendered)

  }

}

# Create a firewall to allow incoming traffic on port 22 and 7000-8000

resource "linode_firewall" "my_firewall" {

  label = "xonotic-firewall"

# Drop everything that is not covered by an explicitly rule

  inbound_policy = "DROP"

# Allow all outbound traffic

  outbound_policy = "ACCEPT"

  # Rule to allow SSH (port 22)

  inbound {

    label    = "allow-ssh"

    action   = "ACCEPT"

    protocol = "TCP"

    ports    = "22"

    ipv4     = [var.admin_ip]

  }

  # Rule to allow custom port range (7000-8000)

  inbound {

    label    = "allow-custom-ports"

    action   = "ACCEPT"

    protocol = "UDP"

    ports    = "7000-8000"

    ipv4     = ["0.0.0.0/0"]

    ipv6     = ["::/0"]

  }

  # Rule to allow Agones port 8080

  inbound {

    label    = "allow-custom-ports"

    action   = "ACCEPT"

    protocol = "TCP"

    ports    = "8080"

    ipv4     = ["0.0.0.0/0"]

    ipv6     = ["::/0"]

  }

  # Associate the firewall with the instance

  linodes = [linode_instance.my_instance.id]

}

# Output the instance's IP address

output "instance_ip" {

  value = linode_instance.my_instance.ip_address

}

Créez maintenant un fichier nommé terraform.tfvars et ajoutez votre jeton API Linode et un mot de passe root (n'oubliez pas de remplacer les espaces réservés !):

linode_token  = "your_linode_api_token"

root_password = "your_root_password"

admin_ip = "your_ipv4_address/32"

Note de sécurité importante : Gardez votre terraform.tfvars fichier sécurisé et jamais l'intégrer dans un dépôt public !

Si vous n'êtes pas sûr de votre adresse IP actuelle, vous pouvez utiliser la commande suivante qui vous renverra votre adresse IP publique actuelle.

curl http://whatismyip.akamai.com

Étape 4 : Initialisation et application - Laissez Terraform faire son travail !

Commencez par initialiser Terraform:

terraform init

Ceci télécharge le Linode Provider. Ensuite, appliquez la configuration :

terraform apply

Vous serez invité à confirmer les modifications. Tapez yes et appuyez sur Entrée. Terraform va maintenant provisionner votre instance Linode et configurer le pare-feu. Cela peut prendre quelques minutes. Prenez un café (ou, vous savez, entraînez-vous à viser...).

Étape 5 : SSH In - Votre serveur vous attend !

Une fois Terraform terminé, il fournira l'adresse IP de votre instance. Vous pouvez également trouver le nom DNS inversé dans l'onglet réseau de votre instance nouvellement créée sur le Linode Cloud Manager. Utilisez SSH pour vous connecter :

ssh root@your_instance_ip_or_dns

Remplacer your_instance_ip_or_dns avec l'adresse IP ou le nom DNS actuel. Il vous sera demandé de saisir le mot de passe root que vous avez défini dans la section terraform.tfvars.

Étape 6 : Installer K3s - La centrale Kubernetes légère

C'est étonnamment facile ! Il suffit de lancer cette commande sur votre instance Linode :

curl -sfL https://get.k3s.io | sh -

Cela permet de télécharger et d'installer K3s. Cela prendra une minute ou deux.

Étape 7 : Installer Agones - L'heure de l'orchestration du serveur de jeu !

Nous allons maintenant installer Agones, qui gérera nos serveurs de jeux Xonotic. Exécutez les commandes suivantes :

kubectl create namespace agones-system

kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/install/yaml/install.yaml

Cela crée un espace de noms dédié pour Agones et le déploie sur votre cluster K3s.

Étape 8 : Confirmer que les Agones fonctionnent - Vérifier le statut

Assurons-nous que tout se passe bien :

kubectl describe --namespace agones-system pods

Vous devriez voir une sortie indiquant que les pods Agones sont en cours d'exécution.

Étape 9 : Déployer et récupérer le statut du serveur de jeu Xonotic.

kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml

 watch kubectl describe gameserver

Étape 10 : Obtenir l'adresse IP du serveur de jeu - Prêt à se connecter !
Obtenez une liste de vos serveurs de jeu et de leurs adresses IP :

kubectl get gs

Étape 11 : Client Xonotic - Téléchargement et installation

Si vous ne l'avez pas encore, téléchargez le client Xonotic pour votre système d'exploitation à partir de https://xonotic.org/.

Étape 12 : Connecter et jouer ! - C'est l'heure des fragments !

  1. Lancer Xonotic : Démarrer le client.
  2. Mode multijoueur : Go dans "Multiplayer".
  3. Connexion au serveur : Choisissez de rejoindre un serveur manuellement.
  4. Saisir l'IP et le port : Saisissez l'adresse IP et le port que vous avez obtenus de l'application kubectl get gs commandement.
  5. Participez au jeu : Connectez-vous et profitez de l'expérience Xonotic à faible latence !

Nettoyer (quand vous avez fini de dominer)

Supprimer la flotte Agones et les instances du serveur de jeu :

kubectl delete -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml

Vous pouvez alors utiliser terraform destroy dans le répertoire de votre projet pour supprimer l'instance Linode et le pare-feu afin d'éviter tout coût supplémentaire.

Conclusion : L'avenir des jeux est entre vos mains

Vous venez de construire une installation de jeu puissante et à faible latence en utilisant l'informatique de pointe, les K3 et les Agones. Vous venez de construire une installation de jeu puissante et à faible latence utilisant l'informatique de périphérie, les K3 et les Agones, qui montre comment vous pouvez vous affranchir des serveurs appartenant aux fournisseurs de jeux et rapprocher votre expérience de jeu de votre domicile. Les jeux sont ainsi plus fluides, plus réactifs et plus amusants - et il n'y a plus de pertes dues à la latence. 

Akamai met à la disposition de ses clients du Cloud Computing plus de 25 régions de calcul réparties dans le monde entier. Pour rapprocher encore plus les charges de travail de leur domicile, vous pouvez exploiter nos régions de calcul distribuées pour déployer des instances dédiées dans les grandes métropoles mal desservies par les fournisseurs de cloud computing, notamment Auckland, Johannesburg et Bogota. Ouvrez un compte, consultez la liste complète des régions distribuées disponibles et contactez nos consultants en cloud computing pour savoir si vous pouvez accéder aux ressources dans votre région ou pour créer un ticket d'assistance.

If you want to learn more, check out our guide on how to set up a Xonotic server with K3s and Agones.

Commentaires

Laissez un commentaire

Votre adresse électronique ne sera pas publiée. Les champs obligatoires sont marqués d'un *.