Minecraft Kubernetes Helm Chart Guide
Overview
This document explains all the Helm chart components used to deploy a Minecraft Java Edition server on Kubernetes with host-mounted storage and RCON support.
Chart Structure
minecraft-server/
├─ chart.yaml
├─ values.yaml
└─ templates/
├─ deployment.yaml
├─ service.yaml
├─ pv.yaml
└─ pvc.yaml
- Chart.yaml
- values.yaml
- deployment.yaml
- service.yaml
- pv.yaml
chart.yaml
This defines metadata about the Helm chart:
apiVersion: v2
name: minecraft-server
version: 0.1.0
description: Minecraft Java Server on Kubernetes
values.yaml
This file contains all configurable values used in the chart.
For now the rcon binds to .10 and not .190 idk why yet.
Important fields:
image:
repository: eclipse-temurin
tag: latest
pullPolicy: IfNotPresent
minecraft:
memoryMax: 15G
memoryMin: 8G
jarFile: server.jar
rconPassword: "SuperSecret123"
service:
type: NodePort
port: 25565
nodePort: 32565
bindIP: 192.168.2.10
rconBindIP: 192.168.2.190
rconPort: 25575
persistence:
hostPath: /mnt/DATA/minecraft
Deployment Explanation
The Deployment runs the Minecraft server and mounts your host directory:
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: minecraft-server
spec:
replicas: 1
selector:
matchLabels:
app: minecraft-server
template:
metadata:
labels:
app: minecraft-server
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: minecraft
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
workingDir: /data
command: ["java"]
args: ["-Xmx{{ .Values.minecraft.memoryMax }}", "-Xms{{ .Values.minecraft.memoryMin }}",
"-jar", "{{ .Values.minecraft.jarFile }}", "nogui"]
volumeMounts:
- name: minecraft-data
mountPath: /data
volumes:
- name: minecraft-data
hostPath:
path: {{ .Values.persistence.hostPath }}
Purpose:
hostNetwork: truebinds Minecraft directly to host IPs./mnt/DATA/minecrafton the host is mapped to/datain the container.- Minecraft server reads and writes files directly in the host directory.
server.jarmust exist in/mnt/DATA/minecraft.
Service Explanation
service.yaml
apiVersion: v1
kind: Service
metadata:
name: minecraft-service
spec:
type: {{ .Values.service.type }}
selector:
app: minecraft-server
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
nodePort: {{ .Values.service.nodePort }}
Purpose:
- Exposes Minecraft to the network via NodePort.
- Since
hostNetwork: true, the server also binds directly to the host IP.
Storage Configuration
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: minecraft-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
hostPath:
path: {{ .Values.persistence.hostPath }}
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: minecraft-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
How to Deploy
1. Prepare Host Directory
sudo mkdir -p /mnt/DATA/minecraft
sudo chmod -R 777 /mnt/DATA/minecraft
2. Add your Minecraft server JAR
Place your server.jar into:
/mnt/DATA/minecraft/server.jar
3. Install the Helm Chart
helm install mc ./minecraft-server -n minecraft --create-namespace
4. Check Deployment
kubectl get pods -n minecraft
kubectl logs -f deployment/minecraft-server -n minecraft
5. Edit server.properties
Example:
enable-rcon=true
rcon.port=25575
rcon.password=SuperSecret123
rcon.ip=192.168.2.190
server-ip=192.168.2.10
server-port=25565
Save it to:
/mnt/DATA/minecraft/server.properties
6. Connect to the Server
Use:
192.168.2.10:25565
7. RCON Access
192.168.2.190:25575 password: SuperSecret123