Vai al contenuto principale
BlogCalcoloNo Lag, All Frag: Migliorate il vostro gioco con Xonotic, K3s ed Edge Computing

No Lag, All Frag: Migliorate il vostro gioco con Xonotic, K3s ed Edge Computing

No_Lag_All_Frag_Level_Up_Your_Gaming

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!

  1. Avviare Xonotic: avviare il client.
  2. Modalità multigiocatore: Go su "Multigiocatore".
  3. Connessione al server: Scegliere di unirsi a un server manualmente.
  4. Immettere IP e Porta: Inserite l'indirizzo IP e la porta ottenuti dal file kubectl get gs comando.
  5. 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

Lascia una risposta

Il vostro indirizzo e-mail non sarà pubblicato. I campi obbligatori sono contrassegnati da *