Quake III Arena, Kubernetes (k3s) dan Raspberry Pi

Approx. terjemahan. : tampaknya hingga saat ini kombinasi dari judul tersebut tampaknya seperti kegilaan yang mustahil. Dunia tidak berhenti diam, dan kegilaan ini tidak hanya menjadi mungkin, tetapi bahkan sangat sederhana untuk diterapkan. Konfirmasi baca di bawah ini dalam terjemahan instruksi yang sesuai dari Johan Siebens - arsitek awan dari Belgia.







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 untuk linux/amd64



dan linux/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





PS dari penerjemah



Anda dapat melihat / mencoba demo QuakeJS yang sedang beraksi di sini .



Baca juga di blog kami:






All Articles