Gestern habe ich diesen Tweet von Chris Campbell in meinem Feed gesehen:
Oh, Erinnerungen ... Quake III Arena ist einer meiner Lieblings-Ego-Shooter aller Zeiten.
Ich habe in der Vergangenheit viel Zeit damit verbracht (und verloren), dieses rasante Spiel mit Freunden und Feinden zu spielen. Dank des QuakeKube- Projekts von Capital One Tech ist die Welt der Container und Kubernetes jetzt offen dafür.
QuakeKube ist eine Kubernetes-Version von QuakeJS . Zu diesem Zweck wird in der entsprechenden Bereitstellung ein dedizierter Quake 3- Server gestartet , zu dem Clients über QuakeJS im Browser eine Verbindung herstellen.
Natürlich wollte ich dieses Projekt unbedingt ausprobieren, insbesondere nachdem ich Folgendes in der Dokumentation gesehen habe:
Container-Images werden mit Docker Buildx überkompiliert und können auf Hardware mit einer Vielzahl von Architekturen und Betriebssystemen ausgeführt werden. Derzeit verfügbare Versionen fürlinux/amd64
undlinux/arm64
.
ARM64-Unterstützung! Klasse, damit ich Quake auf einem meiner Raspberry Pi ausführen kann! (Übersetzung beachten: Später in diesem Artikel werden wir die Möglichkeit in Betracht ziehen, k3s auf dem Raspberry Pi zu installieren. Wenn Sie an regulären [Vanille] Kubernetes interessiert sind, haben wir kürzlich darüber geschrieben .)
Nun, lass uns schießen!
Der größte Teil der Arbeit wurde bereits von anderen Enthusiasten erledigt. Mit den entsprechenden Tools und einem vorgefertigten Plan dauert der Start des Spiels nur wenige Minuten.
Bedarf
- Raspberry Pi unter Ubuntu 20.04 mit ARM64-Unterstützung
-
k3sup
- leichtes Dienstprogramm für die automatische Installation und Konfiguration von k3s auf einer lokalen oder entfernten virtuellen Maschine; -
arkade
- eine einfache CLI in Golang mit genau definierten Flags, mit der Sie Diagramme und Anwendungen einfach und problemlos in einem Cluster installieren können; -
kubectl
;; - DigitalOcean-Konto und API-Token.
Installation und Konfiguration
Installieren Sie zunächst
k3s
auf einem Raspberry Pi mit einem ARM64-kompatiblen Betriebssystem wie Ubuntu 20.04:
$ k3sup install --ip 192.168.0.52 --user ubuntu --k3s-extra-args '--no-deploy servicelb --no-deploy traefik'
Nach der Installation von k3s auf dem Raspberry Pi lädt k3sup auch die erforderliche Datei
kubeconfig
in das aktuelle Arbeitsverzeichnis herunter . Konfigurieren Sie
kubectl
die Verwendung dieser Konfiguration:
$ export KUBECONFIG=$(pwd)/kubeconfig
Jetzt
arcade
die Einlässe-Betreiber installieren mit:
$ arkade install inlets-operator --provider digitalocean --token-file ~/do-api-token
Der Einlässe-Operator eines sogenannten schaffen Einlässe austritt Knoten auf DigitalOcean, d.h. stellt eine öffentliche IP-Adresse für die LoadBalancer-Dienste des privaten Clusters von k3 bereit.
Hierzu ist die OSS-Version der Einlässe ausreichend, da Clients über QuakeJS in einem Browser mit Websockets eine Verbindung zum Server herstellen. Wenn Sie TLS-Unterstützung usw. benötigen, empfehle ich, auf die PRO-Version zu achten.
Nehmen Sie zum Schluss die QuakeKube YAML-Datei aus dem GitHub-Repository des Projekts und bearbeiten Sie sie entsprechend. Der Dienst sollte durch LoadBalancer (anstelle von NodePort) ersetzt werden. Sie können auch die Parameter des Spiels selbst nach Ihren Wünschen anpassen.
Beispiel für eine YAML-Konfiguration für QuakeKube:
apiVersion: apps/v1
kind: Deployment
metadata:
name: quakejs
spec:
selector:
matchLabels:
run: quakejs
replicas: 1
template:
metadata:
labels:
run: quakejs
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '8080'
spec:
containers:
- command:
- q3
- server
- --config=/config/config.yaml
- --content-server=http://localhost:9090
- --agree-eula
image: docker.io/criticalstack/quake:v1.0.5
name: server
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 5
volumeMounts:
- name: quake3-server-config
mountPath: /config
- name: quake3-content
mountPath: /assets
- command:
- q3
- content
- --seed-content-url=http://content.quakejs.com
image: docker.io/criticalstack/quake:v1.0.5
name: content-server
ports:
- containerPort: 9090
volumeMounts:
- name: quake3-content
mountPath: /assets
volumes:
- name: quake3-server-config
configMap:
name: quake3-server-config
- name: quake3-content
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: quakejs
spec:
type: LoadBalancer
selector:
run: quakejs
ports:
- port: 80
targetPort: 8080
name: http
---
apiVersion: v1
kind: ConfigMap
metadata:
name: quake3-server-config
data:
config.yaml: |
fragLimit: 25
timeLimit: 15m
bot:
minPlayers: 3
game:
motd: "Welcome to Critical Stack"
type: FreeForAll
forceRespawn: false
inactivity: 10m
quadFactor: 3
weaponRespawn: 3
server:
hostname: "quakekube"
maxClients: 12
password: "changeme"
commands:
- addbot sarge 2
maps:
- name: q3dm7
type: FreeForAll
timeLimit: 10m
- name: q3dm17
type: FreeForAll
- name: q3wctf1
type: CaptureTheFlag
captureLimit: 8
- name: q3tourney2
type: Tournament
- name: q3wctf3
type: CaptureTheFlag
captureLimit: 8
- name: ztn3tourney1
type: Tournament
Laufen
Wenden Sie dieses Manifest auf Ihren k3s-Cluster an:
$ kubectl apply -f example.yaml deployment.apps/quakejs created service/quakejs created configmap/quake3-server-config created
Warten Sie, bis alle Hülsen werden laufen und Einlässen-Operator erzeugt einen eigenen Ausgang-Knoten:
$ kubectl get pods,service NAME READY STATUS RESTARTS AGE pod/inlets-operator-76fb794578-s2fg4 1/1 Running 0 147m pod/quakejs-tunnel-client-6f7c986dfc-mdt5w 1/1 Running 0 50s pod/quakejs-786cc496b-g7b7n 2/2 Running 0 80s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 152m service/quakejs LoadBalancer 10.43.46.33 143.110.174.204,143.110.174.204 80:32116/TCP 80s
Und alle! Starten Sie Ihren Lieblingsbrowser, laden Sie die Anwendung herunter und beginnen Sie mit dem Schießen in alle Richtungen!
Nützliche Links
- Beben-Würfel ;
- Einlass-Operator ;
- k3sup ;
- Arkade .
PS vom Übersetzer
Sie können eine Demo von QuakeJS in Aktion sehen / versuchen hier .
Lesen Sie auch in unserem Blog: