0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Kubernetesで7 Days to Die (Docker + Kubernetesで作るマルチプレイサーバの構築手順)

この記事は

この記事を読めば、7 Days to Dieマルチプレイ用サーバKubernetesで構築することができます。

そもそも7Days to Dieって?

ゾンビを倒したり、拠点を作ったり、ご飯を作ったり、野菜を育てたり、クエストをこなしたりして、荒廃した世界を生き残るゲームです。
また、定期的にゾンビが大量に襲ってくるので、拠点で迎え撃つタワーディフェンス的な要素もあります。

リアルなマインクラフトと呼ばれることもあるようで、素材を集めてクラフトして、3Dマップ上で自由度高く拠点を作っていくことができます。

ことの始まり

やさぐれゆむ さんの 【7 Days to Die】一ヶ月公園生活【ゆっくり実況】の動画シリーズを見て、興味が湧いたので調べてみたところ、7 Days to Die はマルチプレイが可能でした。

そこで、いつも夜な夜なFactorioで遊んでいる同僚と一緒にプレイすることにしました。
さて、マルチプレイができるようにしなければなりません。
せっかくなので、手順などを残すついでに、記事を書くことにしました。

マルチプレイにも方法が二種類あります。

  1. 誰か一人がサーバ役になって、他の人がそこへ接続する
  2. ゲームサーバを構築する

1の方法は手軽なのですが、サーバ役の人がいなければゲームを進められないため今回は採用しませんでした。

今回は2の方法を選択しました。

ちなみに、ゲーム自体は2013年頃に発売したゲームなのですが、まだ更新もされています。

ゲームサーバを構築する

7 Days to Dieは、Linux向けのheadlessなゲームサーバを用意してくれています。
これは、SteamCMDを経由してインストールすることが可能です。

今回は、Kubernetesにデプロイすることにしました。
マニフェストは、:octocat:Tei1988/k8s-7d2dのリポジトリにまとめました。

クローンしてきたら、 k8s/services/tcp.yaml.examplek8s/services/udp.yaml.example 内の <ExternalIP> の部分を各自の環境に応じて修正して、ファイル名から .example を削除してください。

その後、以下のようにマニフェストをクラスタに適用します。

cd k8s
kubectl kustomize . | kubectl apply -f -

Podが立ち上がるときにInitContainerでゲームのダウンロードもしくはアップデートを行います。
初回起動時はゲームのダウンロードが必要で、結構な容量をダウンロードしてくるので、立ち上がるのに割と時間がかかります。
また、起動時にはアセットの読み込みなどが走るため、readinessProbeを長めに設定している関係で、リポジトリのマニフェストだと5分ぐらい待つ必要があります。いい感じに調整してください。

Dockerイメージにしてしまうことも考えたのですが、容量が大きくなってしまうのであきらめて、PersistentVolumeClaimで確保したディスクにインストールしています。

Podが立ち上がったら、 7 Days to Die を起動して、JOIN GAME > Connect to IP... と進んでいき、 <ExternalIP>を置き替えたIPを入力して CONNECT を押せば、ログインできる、ハズです。

image0.png
(地下の大帝国にて)

おわりに

マルチプレイでいつでも入れる状態にしていると、いつの間にかとんでもない建築物ができていたりして、とても面白かったですね。
また、一緒にやる場合はボイスチャットをしながらプレイすると捗ります。

ではでは。

おまけ

7 Days to DieはModにも対応しています。
Modを入れるためのPersistentVolumeClaimも作ってあるので、7 Days to Die のPodが立ち上がっていないときに何かしらのPodにマウントしてファイルを配置したり、コンテナ起動中に kubectl cpkubectl exec などを使って /7d2d/mods にファイルを配置すれば次回起動時にModが適応された状態で遊べます。

うまく立ち上がらない場合

もしかしたら、ノードのメモリが足らないかもしれないです。
起動するだけで4GBほど必要で、3人でログインして赤い日になると5GB~6GB近くまで行きます。

スクリーンショット 2021-02-17 223245.png
(定期的に跳ねているのはPreemptible Nodeを使っているのでノードが落ちた時に、Podが二個になっているためだと思われます。)

専用のVPSサーバとかを借りてdocker-composeとかで構築してしまったほうが。。。げほごほ。
はい、なんでもありません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?