Ontem eu vi este tweet de Chris Campbell no meu feed:
Oh, memórias ... Quake III Arena é um dos meus jogos de tiro em primeira pessoa favoritos de todos os tempos.
Passei (e perdi) muito tempo no passado jogando este jogo acelerado com amigos e inimigos. Agora, graças ao projeto QuakeKube da Capital One Tech , o mundo dos contêineres e do Kubernetes está aberto para isso.
QuakeKube é uma versão Kubernetes do QuakeJS . Para fazer isso, um servidor Quake 3 dedicado é lançado na implantação correspondente , ao qual os clientes se conectam via QuakeJS no navegador.
Claro, eu estava ansioso para experimentar este projeto, especialmente depois de ver o seguinte na documentação:
As imagens de contêiner são compiladas cruzadas com o Docker Buildx e podem ser executadas em hardware com uma variedade de arquiteturas e sistemas operacionais. Versões atualmente disponíveis paralinux/amd64
elinux/arm64
.
Suporte para ARM64! Classe, para que eu possa executar o Quake em um dos meus Raspberry Pi! (Observação da tradução: posteriormente neste artigo, consideraremos a opção de instalar o k3s no Raspberry Pi e, se você estiver interessado no Kubernetes [vanilla] regular, escrevemos recentemente sobre isso .)
Bem, vamos atirar!
A maior parte do trabalho já foi feito por outros entusiastas, então com as ferramentas certas e um plano, levará apenas alguns minutos para iniciar o jogo.
Requisitos
- Raspberry Pi executando Ubuntu 20.04 com suporte para ARM64
-
k3sup
- utilitário leve para instalação automática e configuração de k3s em qualquer máquina virtual local ou remota; -
arkade
- um CLI simples em Golang com sinalizadores estritamente definidos, permitindo que você instale facilmente gráficos e aplicativos em um cluster; -
kubectl
; - Conta DigitalOcean e token de API.
Instalação e configuração
Em primeiro lugar, instale
k3s
em um Raspberry Pi com um sistema operacional compatível com ARM64, como o Ubuntu 20.04:
$ k3sup install --ip 192.168.0.52 --user ubuntu --k3s-extra-args '--no-deploy servicelb --no-deploy traefik'
Depois de instalar o k3s no Raspberry Pi, o k3sup também baixa o arquivo necessário
kubeconfig
para o diretório de trabalho atual. Configure
kubectl
para usar esta configuração:
$ export KUBECONFIG=$(pwd)/kubeconfig
Agora
arcade
instale o operador de entrada com:
$ arkade install inlets-operator --provider digitalocean --token-file ~/do-api-token
O operador de entradas criará um chamado nó de saída de entradas no DigitalOcean, ou seja, fornecerá um endereço IP público para os serviços LoadBalancer do cluster privado k3s.
Para isso, a versão OSS dos inlets será suficiente, pois os clientes se conectam ao servidor via QuakeJS em um navegador com websockets. Se você precisar de suporte TLS, etc., recomendo prestar atenção à versão PRO.
Finalmente, pegue o arquivo QuakeKube YAML do repositório GitHub do projeto e edite-o de acordo. O serviço deve ser substituído por LoadBalancer (em vez de NodePort). Você também pode personalizar os parâmetros do próprio jogo como desejar.
Exemplo de configuração YAML para 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
Corrida
Aplique este manifesto ao seu cluster k3s:
$ kubectl apply -f example.yaml deployment.apps/quakejs created service/quakejs created configmap/quake3-server-config created
Aguarde até que todos os pods estejam em execução e inlets-operator crie seu próprio nó de saída:
$ 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
E é isso! Abra seu navegador favorito, baixe o aplicativo e comece a atirar em todas as direções!
Links Úteis
- quake-kube ;
- operador de entradas ;
- k3sup ;
- arkade .
PS do tradutor
Você pode ver / experimentar uma demonstração do QuakeJS em ação aqui .
Leia também em nosso blog: