بالأمس رأيت هذه التغريدة من كريس كامبل في خلاصتي:
أوه ، ذكريات ... 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
وهذا كل شيء! قم بتشغيل متصفحك المفضل ، وقم بتنزيل التطبيق وابدأ التصوير في جميع الاتجاهات!
روابط مفيدة
- الزلزال كوبي .
- مداخل مشغل .
- k3sup .
- أركادي .
PS من المترجم
يمكنك مشاهدة / تجربة عرض توضيحي لـ QuakeJS أثناء العمل هنا .
اقرأ أيضًا على مدونتنا: