KubernetesでMinecraftサーバーを構築してみた
こんにちは。
この前、自分の運営しているマインクラフトサーバーをk8sで構築し直しました。
今回はそのときに詰まったことや学んだこと等を紹介していきます。
自己紹介
だだっこぱんだっていいます。k8s初心者で今回始めてさわりました。
高校3年です。ホントは受験勉強しないといけないのになぜかk8sの学習をしてしまいました。
ちょっと後悔してます。
環境
ProxmoxVE 7.2
Ubuntu 22.04 (LXC)
Kubernetes v1.24.2
Kubernetesをセットアップ
ProxmoxのLXCを使ってクラスタを作成しました。
手順は以下の記事とスクラップに書いてます。
ArgoCDを入れたりKubernetes-Dashboardを入れたり色々しました。
詰まったポイントその1 | 通信できない
はじめはCNIにCalicoを使用していたのですが、外への通信が一切できなくてつまりました。
原因はBGPというものにあるらしく、家はごく普通のルータを使っているのでBGPに対応していなく通信できなかったらしい(まだ良くわかっていない)。
Flannelに変更したら問題なく通信できるようになりました。
CloudflareAccessでいい感じにした
CloudflareAccess経由でArgoCDやKubernetes-Dashboardに接続できるようにしました。
データベース
MinecraftのCoreProtectやDynmap用のデータベースもk8sに移します。
うちのサーバーではMysqlを2つとMongodbを1つ使っているのでそれらを立ち上げます。
データはnfs経由で読み込みます。
pvとかpvcとかはじめはややこしく感じましたが、特に詰まることもなくすんなりと行きました。
強いて言うならphpMyAdminの環境変数に
MYSQL_ROOT_PASSWORD
が必要なのを知らず永遠と嘆いていたことくらい。(かなしかった)
Minecraftを構築
ようやくMinecraftに入っていきます。
まずはプロキシかた立ち上げていきます。
Velocity
イメージはこれを使いました。
BungeeCordと書いていますがVelocityも使えるようです。
ServiceはtypeをLoadBalancerに
ポートがデフォルトじゃないですが特にお気になさらず。
各Minecraftサーバー
イメージは定番のこれです。
詰まったことその2 | サーバーが重い
全部いい感じにいった!と思い、早速起動してしばらく放置していたのですがどうやらハチャメチャにサーバーが重くなった模様。
TPSが常時10前後というなんとまあまともにプレイできない状態になっていました。
まず試したのがspec.containers[].resources
をしっかり書いてみるということ。
これで多少は良くなったのですがそれでもまだすぐに落ちてしまう...
なんでかなーと思いながらサーバーのログを眺めていると、起動時に気になる行が
[init] Setting initial memory to 1G and max to 1G
1G!?!?!
と思い、dockerイメージのreadmeを読むと...
MEMORY: "1G" by default, can be used to adjust both initial (Xms) and max (Xmx) memory heap settings of the JVM
何も設定しないとメモリの最大値が1GBに設定されるらしい。
これに気が付かず2日くらい意味もなく1G制限された重いサーバーを走らせていました。
まとめ
なんやかんやで無事、マイクラサーバーをk8s運用に切り替えられました。今のところめちゃめちゃいい感じに動いています。
なんか詰まったこともっとあったようなきがするので思い出したら書き足します。
何か間違った情報を記載していましたら教えていただけると幸いです。
Discussion