fabianvf/game-server-operator

Minecraft Operator 1.0 Roadmap

Opened this issue · 2 comments

Roadmap

Please discuss below, this is very much a living document.

Currently there is a single CRD for Minecraft. This should be split into two CRDs, Minecraft for server deployment, and MinecraftNetwork for internal routing/external access.

Minecraft
  • Revamp the Minecraft CRD
    • Configuration should be a subset of existing Minecraft CRD, with as many parameters trimmed as possible (through elimination of redundant or error-causing parameters and more intelligent defaulting). Basically just make it a bit higher level.
  • Add backup scheduling
  • Add recovery mechanisms
  • Add more information to status
  • Add ability to scale down servers
MinecraftNetwork
  • Create MinecraftNetwork CRD
  • Deploy Bungeecord with k8s-native plugins
  • Expose router on a NodePort for external access
  • Report as much networking info as possible in status
  • Use selector to build network of Minecraft servers
  • Should deploy a default, minimal lobby server (possibly with version/mod compatibility plugins)
Packaging
  • Addition of necessary metadata for Operator Lifecycle Manager (OLM)
  • Submission to operatorhub.io
Stretch Goals
  • Automated scale up/down of servers based on number of connected users
  • Automated upgrades across Minecraft versions
  • Automated mod/plugin updates
  • Sharing of worlds across servers (could be an extension of the backup/restore mechanism)
  • Hosting of client-side mods so that users can download the proper mods for a server without needing to track it down online
  • MinecraftNetwork should validate that deployed servers in the network are compatible, and expose compatibility issues in the status
Super Stretch Goals That Might Just Be Impossible
  • Scaling beyond 1 with a shared world
    • Sharded servers
    • Rolling updates (0 downtime)
  • Control the deployed infrastructure from inside minecraft (ie kubecraft)

Edit: Move server network compatibility check to stretch goals

itzg commented

Thanks for writing this up! Here's my initial/random thoughts reading through this:

In "Minecraft" block

Add recovery mechanisms

can you expand on any initial ideas?

In "MinecraftNetwork",

Should deploy a default, minimal lobby server (possibly with version/mod compatibility plugins)

this sounds super awesome, but am wondering if that should even be another CRD itself or perhaps its a specific use of the "Minecraft" CRD. On the one hand it logically belongs with the bungee configuration since a lobby is required, but all the mod/plugin you mentioned would be an existing concern a "Minecraft" resource.

Also in "MinecraftNetwork"

Should validate that deployed servers in the network are compatible, and expose compatibility issues in the status

That seems like a stretch goal :) , but very cool

In "Stretch Goals"

Hosting of client-side mods so that users can download the proper mods for a server without needing to track it down online

I'd like to selfishly rank that one even higher; however, this might be a broader concern than the CRDs. It also would require researching leveraging of Twitch/Curse client's ability to load modpacks into the client.

Add recovery mechanisms

can you expand on any initial ideas?

I don't really have a concrete idea for this yet, I know you have a sidecar container for doing regular backups. A few other operators have XBackup/XRestore CRDs, which is probably the best way to do it for now. A MinecraftBackup would reference a specific Minecraft and create a backup, and a MinecraftRestore would reference a specific Minecraft and a specific MinecraftBackup. We could automatically create the MinecraftBackup resources when your sidecar creates a new backup (it would probably take the backup and put it in an entirely separate volume). The MinecraftRestore resource would spin down the server, copy the backup back into the real volume, bring the server back up and then probably delete itself on success.

Should deploy a default, minimal lobby server (possibly with version/mod compatibility plugins)

this sounds super awesome, but am wondering if that should even be another CRD itself or perhaps its a specific use of the "Minecraft" CRD. On the one hand it logically belongs with the bungee configuration since a lobby is required, but all the mod/plugin you mentioned would be an existing concern a "Minecraft" resource.

I would probably make it create a Minecraft CR, but it would be a predefined configuration that we know works well.

Should validate that deployed servers in the network are compatible, and expose compatibility issues in the status

That seems like a stretch goal :) , but very cool

Yeah good call

In "Stretch Goals"

Hosting of client-side mods so that users can download the proper mods for a server without needing to track it down online

I'd like to selfishly rank that one even higher; however, this might be a broader concern than the CRDs. It also would require researching leveraging of Twitch/Curse client's ability to load modpacks into the client.

Ah, I use multi-mc which would work quite well if we just hosted an archive, not sure about twitch/curse (we could also link/redirect to the modpage instead of pulling and hosting it)