Kemarin saya melihat tweet ini dari Chris Campbell di feed saya:
Oh, kenangan ... Quake III Arena adalah salah satu penembak orang pertama favorit saya sepanjang masa.
Saya telah menghabiskan (dan kehilangan) banyak waktu di masa lalu memainkan game yang bergerak cepat ini dengan teman dan musuh. Sekarang, berkat proyek QuakeKube dari Capital One Tech , dunia kontainer dan Kubernetes terbuka untuk itu.
QuakeKube adalah versi Kubernetes dari QuakeJS . Untuk melakukan ini, server Quake 3 khusus diluncurkan dalam penerapan yang sesuai , di mana klien terhubung melalui QuakeJS di browser.
Tentu saja saya sangat ingin mencoba proyek ini, terutama setelah melihat yang berikut di dokumentasinya:
Gambar kontainer dikompilasi silang dengan Docker Buildx dan dapat berjalan di perangkat keras dengan berbagai arsitektur dan sistem operasi. Versi yang saat ini tersedia untuklinux/amd64
danlinux/arm64
.
Dukungan ARM64! Kelas, jadi saya bisa menjalankan Quake di salah satu Raspberry Pi saya! (Catatan terjemahan: nanti di artikel kami akan mempertimbangkan opsi untuk menginstal k3s di Raspberry Pi, dan jika Anda tertarik dengan Kubernetes [vanilla] biasa, kami menulis tentang ini baru-baru ini .)
Baiklah, ayo tembak!
Sebagian besar pekerjaan telah dilakukan oleh peminat lain, jadi dengan alat yang sesuai dan rencana yang sudah jadi, hanya perlu beberapa menit untuk meluncurkan game.
Persyaratan
- Raspberry Pi menjalankan Ubuntu 20.04 dengan dukungan ARM64
-
k3sup
- utilitas ringan untuk instalasi otomatis dan konfigurasi k3s pada mesin virtual lokal atau jarak jauh; -
arkade
- CLI sederhana di Golang dengan bendera yang ditentukan secara ketat, memungkinkan Anda menginstal bagan dan aplikasi ke dalam sebuah cluster dengan mudah dan mudah; -
kubectl
; - Akun DigitalOcean dan token API.
Instalasi dan konfigurasi
Pertama-tama, instal
k3s
pada Raspberry Pi dengan sistem operasi yang kompatibel dengan ARM64 seperti Ubuntu 20.04:
$ k3sup install --ip 192.168.0.52 --user ubuntu --k3s-extra-args '--no-deploy servicelb --no-deploy traefik'
Setelah menginstal k3s pada Raspberry Pi, k3sup juga mengunduh file yang diperlukan
kubeconfig
ke direktori kerja saat ini. Konfigurasi
kubectl
untuk menggunakan konfigurasi ini:
$ export KUBECONFIG=$(pwd)/kubeconfig
Sekarang
arcade
instal inlet-operator dengan:
$ arkade install inlets-operator --provider digitalocean --token-file ~/do-api-token
Operator saluran masuk akan membuat apa yang disebut simpul keluar saluran masuk di DigitalOcean, mis. akan memberikan alamat IP publik untuk layanan LoadBalancer cluster pribadi k3s.
Versi OSS dari inlet sudah cukup untuk ini, karena klien terhubung ke server melalui QuakeJS di browser dengan websockets. Jika Anda membutuhkan dukungan TLS, dll., Saya sarankan untuk memperhatikan versi PRO.
Terakhir, ambil file YAML QuakeKube dari repositori GitHub proyek dan edit sesuai dengan itu. Layanan harus diganti dengan LoadBalancer (bukan NodePort). Anda juga dapat menyesuaikan parameter gim itu sendiri sesuai keinginan.
Contoh konfigurasi YAML untuk 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
Lari
Terapkan manifes ini ke cluster k3s Anda:
$ kubectl apply -f example.yaml deployment.apps/quakejs created service/quakejs created configmap/quake3-server-config created
Tunggu hingga semua pod berjalan , dan inlets-operator membuat node keluarnya sendiri:
$ 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
Dan itu dia! Luncurkan browser favorit Anda, unduh aplikasi dan mulai memotret ke segala arah!
link yang berguna
- gempa-kubus ;
- operator saluran masuk ;
- k3sup ;
- arkade .
PS dari penerjemah
Anda dapat melihat / mencoba demo QuakeJS yang sedang beraksi di sini .
Baca juga di blog kami: