Quake III Arena و Kubernetes (k3s) و Raspberry Pi

تقريبا. ترجمة. : يبدو أنه حتى وقت قريب كان الجمع بين العنوان يبدو وكأنه جنون مستحيل. العالم لا يقف ساكناً ، وهذا الجنون لم يصبح ممكناً فحسب ، بل أصبح من السهل تنفيذه. يمكن العثور على التأكيد أدناه في ترجمة التعليمات المقابلة من Johan Siebens ، مهندس سحابي من بلجيكا.







بالأمس رأيت هذه التغريدة من كريس كامبل في خلاصتي:





أوه ، ذكريات ... Quake III Arena هي واحدة من أفضل ألعاب التصويب من منظور الشخص الأول.



لقد قضيت (وخسرت) الكثير من الوقت في الماضي في لعب هذه اللعبة السريعة مع الأصدقاء والأعداء. الآن ، بفضل مشروع QuakeKube من Capital One Tech ، أصبح عالم الحاويات و Kubernetes مفتوحًا له.



QuakeKube هو نسخة Kubernetes من QuakeJS . للقيام بذلك ، يتم تشغيل خادم Quake 3 مخصص في النشر المقابل ، والذي يتصل به العملاء عبر QuakeJS في المتصفح.


بالطبع كنت حريصًا على تجربة هذا المشروع ، خاصة بعد رؤية ما يلي في الوثائق:



يتم تجميع صور الحاوية مع Docker Buildx ويمكن تشغيلها على أجهزة مع مجموعة متنوعة من البنى وأنظمة التشغيل. الإصدارات المتوفرة حاليًا لـ linux/amd64



و linux/arm64



.


دعم ARM64! Class ، حتى أتمكن من تشغيل Quake على أحد أجهزة Raspberry Pi الخاصة بي! (ملاحظة الترجمة: لاحقًا في المقالة سننظر في خيار تثبيت k3s على Raspberry Pi ، وإذا كنت مهتمًا بـ [الفانيليا] Kubernetes ، فقد كتبنا مؤخرًا عن هذا .)



حسنًا ، دعنا نطلق النار!



تم تنفيذ معظم العمل من قبل متحمسين آخرين ، لذا باستخدام الأدوات المناسبة والخطة ، لن يستغرق الأمر سوى بضع دقائق لبدء اللعبة وتشغيلها.



المتطلبات



  • يعمل Raspberry Pi على تشغيل Ubuntu 20.04 مع دعم ARM64
  • k3sup



    - أداة خفيفة الوزن للتثبيت التلقائي وتكوين k3s على أي جهاز افتراضي محلي أو بعيد ؛
  • arkade



    - CLI بسيط في Golang بأعلام محددة بدقة ، مما يسمح لك بسهولة وبسهولة تثبيت الرسوم البيانية والتطبيقات في المجموعة ؛
  • kubectl



    ؛
  • حساب DigitalOcean ورمز API المميز.


التثبيت والتكوين



أولاً ، قم بالتثبيت k3s



على Raspberry Pi مع نظام تشغيل متوافق مع ARM64 مثل Ubuntu 20.04:



$ k3sup install --ip 192.168.0.52 --user ubuntu --k3s-extra-args '--no-deploy servicelb --no-deploy traefik'
      
      





بعد تثبيت k3s على Raspberry Pi ، يقوم k3sup أيضًا بتنزيل الملف المطلوب kubeconfig



إلى دليل العمل الحالي. تكوين kubectl



لاستخدام هذا التكوين:



$ export KUBECONFIG=$(pwd)/kubeconfig
      
      





الآن arcade



قم بتثبيت مشغل المداخل مع:



$ arkade install inlets-operator --provider digitalocean --token-file ~/do-api-token
      
      





سينشئ مشغل المداخل ما يسمى عقدة خروج المداخل على DigitalOcean ، أي سيوفر عنوان IP عام لخدمات LoadBalancer العنقودية الخاصة k3s.



سيكون إصدار OSS من المداخل كافياً لذلك ، حيث يتصل العملاء بالخادم عبر QuakeJS في متصفح به مآخذ ويب. إذا كنت بحاجة إلى دعم TLS وما إلى ذلك ، فإنني أوصي بالاهتمام بإصدار PRO.



أخيرًا ، احصل على ملف QuakeKube YAML من مستودع GitHub للمشروع وقم بتحريره وفقًا لذلك. يجب استبدال الخدمة بـ LoadBalancer (بدلاً من NodePort). يمكنك أيضًا تخصيص معلمات اللعبة نفسها كما يحلو لك.



مثال على تكوين YAML لـ 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
      
      





ادارة



قم بتطبيق هذا البيان على مجموعة k3s الخاصة بك:




$ kubectl apply -f example.yaml 
deployment.apps/quakejs created
service/quakejs created
configmap/quake3-server-config created
      
      





انتظر حتى يتم تشغيل جميع الكبسولات ، ويقوم مشغل المداخل بإنشاء عقدة الخروج الخاصة به:




$ 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
      
      





وهذا كل شيء! قم بتشغيل متصفحك المفضل ، وقم بتنزيل التطبيق وابدأ التصوير في جميع الاتجاهات!





روابط مفيدة





PS من المترجم



يمكنك مشاهدة / تجربة عرض توضيحي لـ QuakeJS أثناء العمل هنا .



اقرأ أيضًا على مدونتنا:






All Articles