Immaginiamo la scena per un giocatore: state giocando la partita della vostra vita (e vorreste essere in streaming proprio oggi). State mettendo a segno il perfetto headshot vincente e state già immaginando la schermata di vittoria che appare... e poi il gioco si blocca. Il tuo avversario ti ha eliminato. Il gioco è finito.
È capitato a tutti che un piccolo inconveniente nel gioco in tempo reale vi abbia fatto perdere il vostro momento di gloria e il vostro giro di vittoria. La frustrazione per questa esatta esperienza ha portato a una rinascita della popolarità dei giochi interamente autogestiti, in modo da poter controllare il proprio destino di giocatore. Purtroppo, però, il self-hosting non è un'opzione per tutti i giochi o per tutti i giocatori. Ma se vi dicessimo che c'è un modo per bandire il lag nel regno dell'ombra senza dover acquistare e mantenere il proprio hardware?
Con un po' di sviluppo, potete costruire il vostro paradiso di gioco distribuito avvicinando il server a voi (il giocatore) e creando la vostra esperienza a bassa latenza. Ecco il trio di potenza: Xonotic, K3se la potenza dell'edge computing con Akamai Cloud.
Che cos'è il bordo, comunque?
Invece di affidarsi a enormi centri dati centralizzati che potrebbero trovarsi a centinaia (o addirittura migliaia) di chilometri di distanza, l'edge computing porta la potenza di elaborazione più vicino alla fonte dei dati, che in questo caso siete voi. Questo riduce drasticamente la latenza che crea il temuto ritardo, semplicemente perché i dati non devono viaggiare così lontano.
Perché le K3? Per mantenere la leggerezza e l'agilità
K3s è una distribuzione Kubernetes leggera. Pensate a Kubernetes (o K8s) come a un gestore incredibilmente intelligente ed efficiente per le vostre applicazioni, che gestisce la distribuzione, la scalabilità e si assicura che tutto funzioni senza problemi. K3s è una derivazione di K8s progettata specificamente per ambienti con risorse limitate. È piccolo, veloce e incredibilmente efficace e può essere il vostro aiutante per l'infrastruttura di gioco.
E Agones? Il Maestro del server di gioco
Agones è un progetto open-source, nativo di Kubernetes, specificamente progettato per la gestione di server di gioco dedicati. Gestisce le complessità della scalatura, dell'allocazione e dell'esecuzione delle istanze dei server di gioco, in modo che possiate concentrarvi sul fragging e non sulle configurazioni dei server.
Costruiamo! (La parte divertente)
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.
Fase 1: Terraform Time - Gettare le basi
Terraform è il nostro strumento "Infrastructure as Code". Ci permette di definire la configurazione del nostro server in un file, rendendola ripetibile e facile da gestire. Per prima cosa, installiamolo:
brew install terraform
(Nota: se non si utilizza macOS, verificare sul sito web di Terraform le istruzioni di installazione per il proprio sistema operativo).

Passo 2: Impostazione del progetto - Il vostro quartier generale di gioco
Creiamo una cartella per il nostro progetto:
mkdir xonotic
cd xonotic
Passo 3: Lo script Terraform - Creare il server (e il firewall!)
Creare un file chiamato main.tf
e incollare il seguente codice.
È qui che avviene la magia! Definiamo la nostra istanza Linode, impostiamo un firewall e configuriamo tutto ciò di cui abbiamo bisogno.
In questo caso, stiamo distribuendo un'istanza di calcolo dedicata a Denver, una delle regioni di calcolo distribuite di Akamai. Si consiglia di utilizzare l'istanza Dedicated da 8 GB con 4 vCPU, che è appropriata per diversi sfidanti.
Nota: per far funzionare questo codice di esempio così com'è, è necessario ottenere l'accesso alle regioni di calcolo distribuite, attualmente disponibili in quantità limitata.
# 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
}
Ora, creare un file chiamato terraform.tfvars
e aggiungere il token API di Linode e una password di root (non dimenticare di sostituire i segnaposto!):
linode_token = "your_linode_api_token"
root_password = "your_root_password"
admin_ip = "your_ipv4_address/32"
Importante nota di sicurezza: Mantenete il vostro terraform.tfvars
file al sicuro e mai impegnarlo in un repository pubblico!
Se non si è sicuri dell'indirizzo IP attuale, si può usare il seguente comando che restituirà l'indirizzo IP pubblico attuale.
curl http://whatismyip.akamai.com
Passo 4: inizializzare e applicare - lasciare che Terraform faccia le sue cose!
Per prima cosa, inizializzare Terraform:
terraform init
Questo scarica il Provider Linode. Quindi, applicare la configurazione:
terraform apply
Verrà richiesto di confermare le modifiche. Digitare yes
e premere Invio. Terraform ora provvederà al provisioning dell'istanza Linode e alla configurazione del firewall. Potrebbe volerci qualche minuto. Prendete un caffè (o, sapete, esercitate la vostra mira...).
Passo 5: SSH In - Il vostro server vi aspetta!
Una volta terminato, Terraform fornirà l'indirizzo IP dell'istanza. È anche possibile trovare il nome DNS inverso nella scheda di rete dell'istanza appena creata su Linode Cloud Manager. Utilizzare SSH per connettersi:
ssh root@your_instance_ip_or_dns
Sostituire your_instance_ip_or_dns
con l'indirizzo IP o il nome DNS attuale. Verrà richiesta la password di root impostata in terraform.tfvars
.
Passo 6: Installare K3s - La centrale Kubernetes leggera
È sorprendentemente facile! Basta eseguire questo comando sulla propria istanza Linode:
curl -sfL https://get.k3s.io | sh -
Questo scarica e installa K3s. Ci vorranno uno o due minuti.
Passo 7: Installare Agones - Orchestrazione del server di gioco!
Ora installeremo Agones, che gestirà i nostri server di gioco Xonotic. Eseguite questi comandi:
kubectl create namespace agones-system
kubectl apply --server-side -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/install/yaml/install.yaml
Questo crea uno spazio dei nomi dedicato ad Agones e lo distribuisce nel cluster K3s.
Fase 8: Conferma dell'esecuzione di Agones - Controllo dello stato
Assicuriamoci che tutto fili liscio:
kubectl describe --namespace agones-system pods
Si dovrebbe vedere un output che indica che i pod Agones sono in esecuzione.
Fase 9: distribuire e recuperare lo stato del server di gioco Xonotic.
kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml
watch kubectl describe gameserver
Passo 10: Ottenere l'IP del server di gioco - Pronti per la connessione!
Ottenete un elenco dei vostri server di gioco e dei loro indirizzi IP:
kubectl get gs
Passo 11: Client Xonotic - Scaricare e installare
Se non lo avete già, scaricate il client Xonotic per il vostro sistema operativo da https://xonotic.org/.
Fase 12: Collegare e giocare! - È l'ora dei frammenti!
- Avviare Xonotic: avviare il client.
- Modalità multigiocatore: Go su "Multigiocatore".
- Connessione al server: Scegliere di unirsi a un server manualmente.
- Immettere IP e Porta: Inserite l'indirizzo IP e la porta ottenuti dal file
kubectl get gs
comando. - Partecipa al gioco: Connettiti e goditi la tua esperienza Xonotic a bassa latenza!
Pulire (quando si è finito di dominare)
Per rimuovere la flotta Agones e le istanze del server di gioco:
kubectl delete -f https://raw.githubusercontent.com/googleforgames/agones/release-1.47.0/examples/xonotic/fleet.yaml
Si può quindi utilizzare terraform destroy
nella cartella del progetto per rimuovere l'istanza Linode e il firewall, per evitare ulteriori costi.
Conclusione: Il futuro del gioco è nelle vostre mani
Avete appena realizzato una configurazione di gioco potente e a bassa latenza utilizzando edge computing, K3 e Agones. Questo dimostra come sia possibile non affidarsi completamente ai server di proprietà dei provider di giochi e portare l'esperienza di gioco più vicino a casa. Questo rende il gioco più fluido, più reattivo e più divertente, senza più perdite dovute alla latenza.
Akamai ha oltre 25 regioni di calcolo centrale distribuite a livello globale a disposizione dei clienti del cloud computing. Per portare i carichi di lavoro ancora più vicino a casa, è possibile sfruttare le nostre regioni di calcolo distribuite per distribuire istanze dedicate nelle principali città non servite dai fornitori di cloud, tra cui Auckland, Johannesburg e Bogotà. Registratevi per un account, controllate l'elenco completo delle regioni distribuite disponibili e contattate i nostri consulenti cloud per verificare se siete idonei ad accedere alle risorse nella vostra località o per creare un ticket di assistenza.
If you want to learn more, check out our guide on how to set up a Xonotic server with K3s and Agones.
Commenti