Quake III Arena、Kubernetes(k3s)、Raspberry Pi

transl。:最近まで、タイトルの組み合わせは不可能な狂気のようでした。世界は静止しておらず、この狂気は可能になっただけでなく、実装が本当に簡単になりました。確認は、ベルギーのクラウドアーキテクトであるJohanSiebensからの対応する指示の翻訳にあります。







昨日、ChrisCampbellからのこのツイートをフィードで見ました。





ああ、思い出... Quake III Arenaは、私の大好きな一人称シューティングゲームの1つです。



私は過去に、友人や敵とこのペースの速いゲームをプレイすることに多くの時間を費やしました(そして失いました)。さて、おかげQuakeKubeのプロジェクト からの キャピタルワンテック、コンテナの世界とKubernetesはそれに開いています。



QuakeKubeはのKubernetesバージョンです QuakeJSこれを行うために、専用のQuake 3サーバーが対応するデプロイメント起動され、 クライアントはブラウザーのQuakeJSを介して接続します。


もちろん、特にドキュメントで次のことを確認した後、私はこのプロジェクトを試してみたいと思っていました。



コンテナイメージはDockerBuildxクロスコンパイルされ 、さまざまなアーキテクチャとオペレーティングシステムを備えたハードウェアで実行できます。linux/amd64



およびの 現在利用可能なバージョン linux/arm64





ARM64サポート!クラスなので、Raspberry Piの1つでQuakeを実行できます! (注の翻訳:記事の後半で、Raspberry Piにk3をインストールするオプションを検討します。通常の[バニラ] Kubernetesに興味がある場合は、最近これについて書きました。)



さあ、撃ちましょう!



ほとんどの作業はすでに他の愛好家によって行われているため、適切なツールと計画があれば、ゲームを起動して実行するのに数分しかかかりません。



要件



  • ARM64をサポートするUbuntu20.04を実行しているRaspberryPi
  • k3sup



    -ローカルまたはリモートの仮想マシンk3を自動インストールおよび構成するための軽量ユーティリティ
  • arkade



    -厳密に定義されたフラグを備えたGolangのシンプルなCLIにより、チャートやアプリケーションをクラスターに簡単かつ簡単にインストールできます。
  • kubectl



    ;
  • DigitalOceanアカウントとAPIトークン。


インストールと構成



まずk3s



、Ubuntu20.04などのARM64互換オペレーティングシステムを搭載したRaspberryPiにインストール します。



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





Raspberry Piにk3sをインストールした後、k3supは必要なファイルkubeconfig



を現在の作業ディレクトリにダウンロードします kubectl



この構成を使用するように構成 します。



$ export KUBECONFIG=$(pwd)/kubeconfig
      
      





次に arcade



、inlets-operatorを次のようにインストールします。



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





インレットオペレーターは、DigitalOcean上にいわゆるインレット出口ノードを作成します k3sプライベートクラスターLoadBalancerサービスのパブリックIPアドレスを提供します。



クライアントはWebソケットを備えたブラウザでQuakeJSを介してサーバーに接続するため、これにはOSSバージョンのインレットで十分です。TLSなどのサポートが必要な場合は、PROバージョンに注意することをお勧めします。



最後に、プロジェクトのGitHubリポジトリからQuakeKube YAMLファイルを取得し、それに応じて編集します。サービスは、(NodePortではなく)LoadBalancerに置き換える必要があります。必要に応じて、ゲーム自体のパラメーターをカスタマイズすることもできます。



QuakeKubeのYAML構成の例:



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
      
      





すべてのポッドが実行され、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
      
      





以上です!お気に入りのブラウザを起動し、アプリケーションをダウンロードして、あらゆる方向から撮影を開始してください!





便利なリンク





翻訳者からのPS



QuakeJSの実際のデモをここで確認/試すことができ ます



私たちのブログも読んでください:






All Articles