feat: Add CraftyController (Minecraft server manager) #31
Labels
No labels
gitops-rework
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
znibb/kobbo-homelab#31
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Overview
Deploy Crafty Controller — a web-based GUI for managing Minecraft servers. Allows starting/stopping servers, uploading worlds, managing mods/plugins, and viewing live console output from a browser.
How it works in Kubernetes
A community Helm chart is available on ArtifactHub:
The chart runs Crafty as a non-root container (OpenShift/Kubernetes compatible) with PVCs for server data. The recommended pattern is one Crafty instance per Minecraft server for resource isolation and clean port management.
Ports to expose
Crafty itself uses:
8443— HTTPS web UI8080— HTTP redirectEach Minecraft server (Java) needs:
25565(default, TCP) — or a custom port per serverThese game server ports must be declared in the Helm chart values and exposed via a Service. Since Traefik does not proxy raw TCP by default, a
LoadBalancerservice via MetalLB is likely the cleanest approach for game ports, or configure Traefik TCP entrypoints.Files to create
Considerations
latestin the chart — pin to a specific version for stability.References
Is there another service like CraftyController that works better with Minecraft servers on Kubernetes? I don't want multiple crafty instances, that defeats the purpose of the crafty controller.
Här är ett förslag på kommentar du kan klistra in:
Uppdatering: alternativ till CraftyController
Efter att ha grävt i det här lite mer landar jag på att skippa CraftyController helt. Crafty är byggt kring att vara en GUI-instans som hanterar flera servrar internt — att då köra en instans per server (som rekommenderas i Helm-chartet) känns fel i ett Kubernetes-sammanhang och ger onödig overhead.
Lösning: mc-router + itzg/minecraft-server
itzg/minecraft-serverStatefulSet via itzg/minecraft-server-charts — helt deklarativt, ingen extra GUI per server.mc-router.itzg.me/externalServerName, så nya världar läggs till genom att bara deploya en ny StatefulSet + Service med rätt annotation. Inget att röra i routerns config.Alternativ som övervägdes men valts bort för nu:
MinecraftServer/MinecraftCluster), bygger på Agones. Mer K8s-native men drar in Agones som extra beroende — överkurs för vårt antal världar just nu. Värt att titta på igen om vi vill ha proxies/spelarmigrering mellan servrar.Bonus: riktiga domännamn via Pangolin
Eftersom mc-router läser hostname direkt ur Minecraft-handshaken kan vi multiplexa flera domäner över en och samma offentliga port:
mc1.kobbo.se,mc2.kobbo.seosv, alla pekande mot samma publika IP.Ingen separat Pangolin-resurs behövs per värld — bara en TCP-resurs totalt. Om vi vill ha spelarnas riktiga IP-adresser ända in (för ban-loggar etc.) kan vi kedja PROXY protocol hela vägen: Pangolin har "Enable Proxy Protocol" på TCP-resurser, och mc-router stödjer
--receive-proxy-protocol/--use-proxy-protocol.Nästa steg / filstruktur
Vill du att jag justerar tonen, kortar ner det, eller lägger till något (t.ex. specifika version-pins eller PVC-storlekar)?