- PVSM.RU - https://www.pvsm.ru -
Прим. перев.: казалось бы, еще недавно сочетание из заголовка казалось невозможным безумием. Мир не стоит на месте, и это безумие стало не просто возможным, а даже по-настоящему простым в реализации. Подтверждение читайте ниже в переводе соответствующей инструкции от Johan Siebens — облачного архитектора из Бельгии.

Вчера у себя в ленте я увидел этот твит от Chris Campbell:
Ох, воспоминания… Quake III Arena — один из моих самых любимых шутеров от первого лица.
В прошлом я потратил (и потерял) немало времени, играя в эту динамичную игру с друзьями и врагами. Теперь, благодаря проекту QuakeKube [1] от Capital One Tech [2], для нее открыт мир контейнеров и Kubernetes.
QuakeKube представляет собой Kubernetes'ированную версию QuakeJS [3]. Для этого в соответствующем deployment'е запускается Quake 3 [5], к которому клиенты подключаются через QuakeJS в браузере.
Конечно, мне не терпелось испробовать этот проект, особенно после того, как в документации увидел следующее:
Контейнерные образы кросс-компилируются с помощью Docker Buildx [6] и могут запускаться на железе с различными архитектурами и операционными системами. В настоящее время доступны версии под
linux/amd64иlinux/arm64.
Поддержка ARM64! Класс, значит я могу запустить Quake на одном из своих Raspberry Pi! (Прим. перев.: далее в статье будет рассмотрен вариант установки k3s на Raspberry Pi, а если вас интересует обычный [vanilla] Kubernetes — об этом мы недавно писали [7].)
Основную часть работы уже проделали другие энтузиасты, поэтому при наличии соответствующих инструментов и готового плана для запуска игры потребуется всего несколько минут.
k3sup — легковесная утилита для автоматической установки и настройки k3s [8] на любой локальной или удаленной виртуальной машине;arkade — простой CLI на Golang со строго определяемыми флагами, позволяющий легко и непринужденно устанавливать чарты и приложения в кластер;kubectl;
Прежде всего установите 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 установите inlets-operator:
$ arkade install inlets-operator --provider digitalocean --token-file ~/do-api-token
Inlets-operator создаст так называемый inlets [9] exit-node в DigitalOcean, т.е. обеспечит публичный IP-адрес для сервисов LoadBalancer закрытого кластера k3s.
Для этого будет достаточно OSS-версии inlets, поскольку клиенты подключаются к серверу через QuakeJS в браузере с websocket'ами. Если нужна поддержка TLS и т.п., рекомендую обратить внимание на PRO-версию.
Наконец, возьмите YAML-файл QuakeKube из репозитория проекта на 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
Дождитесь, пока все pod'ы станут running, а inlets-operator создаст свой exit-node:
$ 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
И все! Запускайте любимый браузер, загружайте приложение и начинайте палить во все стороны!
Демонстрацию QuakeJS в работе можно увидеть/попробовать здесь [13].
Читайте также в нашем блоге:
Автор: frag
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/359641
Ссылки в тексте:
[1] QuakeKube: https://github.com/criticalstack/quake-kube
[2] Capital One Tech: https://twitter.com/CapitalOneTech
[3] QuakeJS: https://github.com/inolen/quakejs
[4] выделенный сервер: https://www.reg.ru/?rlink=reflink-717
[5] Quake 3: https://ru.wikipedia.org/wiki/Quake_III_Arena
[6] Docker Buildx: https://docs.docker.com/buildx/working-with-buildx/
[7] недавно писали: https://habr.com/ru/company/flant/blog/513908/
[8] k3s: https://k3s.io/
[9] inlets: https://github.com/inlets/inlets
[10] inlets-operator: https://github.com/inlets/inlets-operator
[11] k3sup: https://github.com/alexellis/k3sup
[12] arkade: https://github.com/alexellis/arkade
[13] здесь: http://www.quakejs.com/
[14] Приключения с домашним Kubernetes-кластером: https://habr.com/ru/company/flant/blog/435526/
[15] Источник: https://habr.com/ru/post/532452/?utm_source=habrahabr&utm_medium=rss&utm_campaign=532452
Нажмите здесь для печати.