Linux(CentOS)のkubernetesでマイクラ鯖を構築(備忘録)

# kubernetesでマイクラ鯖を構築
メリット: 複数の鯖を構築可能、バックアップが取れる、簡単に増やせる
デメリット: コマンド打つのに手間がかかる、複雑
実用性があるかはわかりません。
勉強用にやってみるのが一番良いと思います。
備忘録として書き残します。

### 記事内の環境
・CentOS-stream-10
・VMware WorkStation
・port: 30000/30001
・usernmae: minecraft

## 手順
■VMwareの設定
リソースの設定
プロセッサ: 2
memory: 8GB

1. VMを立ち上げたらipを見てVMwareのネットワーク設定をNATに設定し、編集から仮想ネットワークエディタを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4082691/25ff8e20-9fb7-4696-b622-c68ce479c939.png)

2. 右下の設定変更を押下
3. VMnet8のNAT設定を押下
4. ポート転送を追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4082691/cd6ce8fe-d0d8-41b4-a0f2-e2f8d7101620.png)

ポート番号はKubernetesのNodePort範囲（30000-32767）内でポートを選びます
外部に開放する際はルーターでのport開放も同じport番号を開放してください
IPはVMのIPを入力してください。
設定したら適用

■Linuxの設定
sudo権限を追加(わかってる方はSKIP)
```
$ su -
$ visudo
```
「 Shift + G 」keyを押すと一番下に行きます
「 o 」keyを押下し、以下貼り付け(minecraftはusernameなので自分の名前に変えてください)
```
minecraft    ALL=(ALL)       ALL
minecraft ALL=NOPASSWD: ALL
```

その他の設定
```
$ sudo usermod -aG wheel $USER
$ sudo yum update -y
$ mkdir config
$ cd config ; pwd
$ sudo yum install -y yum-utils
```

■ docker install
```
$ sudo yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install -y docker-ce docker-ce-cli containerd.io
$ sudo systemctl enable docker
$ sudo systemctl start docker
$ sudo usermod -aG docker $USER
$ sudo newgrp docker
```
表示される、statusがactiveなこと
```
$ docker version
$ systemctl status docker
$ id
```

■ minikube install
```
$ curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
```

■ kubernetes install
```
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl && rm kubectl
```

■ minikube起動
```
$ vi minikube_start.sh
```
「 i 」 keyを押してから以下右クリで貼り付け(portや、resourceはご自身の環境に合わせてください)
```
#!/bin/bash
minikube start --driver=docker --ports=30000:30000,30001:30001 --memory 6144 --cpus 2
```
「 ESC 」keyを押したら「 :wq 」を入力して完了

```
$ chmod +x minikube_start.sh
$ ./minikube_start.sh
$ kubectl get pod -A
$ minikube status
```
3000はport番号なので解放したportに合わせて確認してください
```
$ ss -tuln |grep 3000
```

■ tab補完(SKIPでも)
```
$ sudo yum install bash-completion -y
$ echo 'source <(kubectl completion bash)' >>~/.bashrc
$ source ~/.bashrc
```

■ minecraft container構築
一番下に載せてあるgithubのURLからyamlファイルを持ってきて、現在のDirectoryに送付
(ssh scpでもwin scpでもコピペでも好きな手順で実施してください)
```
$ ls -l
$ kubectl apply -f minecraft-data.yaml,minecraft-server.yaml
```
起動するまで何回か実行
```
$ kubectl get pod,service,pvc
```
Doneが出るまで待機 出たら「 Ctrl + c 」で抜けてください
```
$ kubectl logs -f minecraft-survival-0-0
```

ここまで来たら自分のマイクラで鯖に入れるはずです。
ダイレクト接続に <VM IP>:<port>
例: 192.168.131.131:30000

■マルチプレイ
port開放が必要なので firewallを無効化するか以下設定してください(ポート番号は置換してください)
```
$ sudo firewall-cmd --add-port=30000/tcp --permanent
$ sudo firewall-cmd --add-port=30001/tcp --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-ports
```

windows cmdを管理者権限で起動後以下入力(ポート番号は置換してください)
```
netsh advfirewall firewall add rule name="Minecraft 30000" dir=in action=allow protocol=TCP localport=30000
netsh advfirewall firewall add rule name="Minecraft 30001" dir=in action=allow protocol=TCP localport=30001

netsh advfirewall firewall show rule name="Minecraft 30000"
netsh advfirewall firewall show rule name="Minecraft 30001"
```

ルーターでportを解放 node portと同じportを解放してください。
公開対象ポート: 30000
宛先ポート: 30000
宛先アドレス: VMではなく、PCのIP
例: 192.168.1.3

解放出来たら友達にグローバルIPとポート番号を伝えて試してみてもらってください

グローバルIP確認
```
$ curl inet-ip.info
```

## Refarence
k8s install

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux

minikube install

https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download

マイクラ鯖のコンテナイメージ github

https://github.com/itzg/docker-minecraft-server/blob/master/README.md

■ マイクラコンテナのyaml
https://gist.github.com/fenrir2418/137c60b44eb4dfebc4e1989d14b56362
ChatGPTで作成したのでちゃんとした人から見たらおかしい所があると思いますが、動きはします。