API Group/Version : mc-operator.dhv.sh/v1alpha1
Kind : MinecraftServer
Short name : mcs
Scope : Namespaced
Field Type Required Default Description acceptEulaboolean✅ falseMust be true to start the server. You accept the Minecraft EULA . serverServerSpec✅ — Server distribution and version. propertiesServerPropertiesSpecdefaults Game settings (server.properties). jvmJvmSpecdefaults JVM heap and flags. resourcesResourcesSpecdefaults Kubernetes resource requests/limits. storageStorageSpecdefaults Persistent storage configuration. serviceServiceSpecdefaults Service type and exposure settings. imagestring— Override the container image. If unset, uses itzg/minecraft-server:latest. imagePullPolicystringIfNotPresentAlways, IfNotPresent, or Never.replicasinteger10 (paused) or 1 (running). Minecraft servers are single-instance.
Field Type Required Default Description typestring✅ VanillaDistribution: Vanilla, Paper, Spigot, Bukkit. versionstringLATESTMinecraft version, e.g. 1.20.4. LATEST always pulls the newest release.
All fields map directly to server.properties keys.
Field Type Default Description motdstring— Message of the day shown in the server list. difficultystringEasyPeaceful, Easy, Normal, Hard.gameModestringSurvivalSurvival, Creative, Adventure, Spectator.maxPlayersinteger20Maximum concurrent players (1–10000). onlineModebooleantrueAuthenticate with Mojang. Set false for offline/cracked mode. whitelistEnabledbooleanfalseOnly allow whitelisted players. whiteliststring[][]Player usernames to whitelist. opsstring[][]Player usernames to grant operator status. pvpbooleantrueAllow player-vs-player combat. hardcorebooleanfalseHardcore mode (one life per player). spawnProtectioninteger16Spawn protection radius in blocks (0 to disable). levelSeedstring— World seed. Empty = random. levelTypestringDEFAULTDEFAULT, FLAT, LARGBIOMES (note: no E — matches itzg/minecraft-server), AMPLIFIED, BUFFET.levelNamestringworldWorld directory name. viewDistanceinteger10View distance in chunks (3–32). simulationDistanceinteger10Simulation distance in chunks (3–32). generateStructuresbooleantrueGenerate villages, strongholds, etc. allowNetherbooleantrueEnable the Nether dimension. serverPortinteger25565Port inside the container (1024–65535). additionalPropertiesmap[string]string{}Raw server.properties key/value overrides. Applied last.
Field Type Default Description initialMemorystring512mInitial heap size (-Xms). E.g. 512m, 1G. maxMemorystring1GMaximum heap size (-Xmx). E.g. 2G, 4G. extraJvmArgsstring[][]Additional JVM flags (e.g. GC tuning flags).
Standard Kubernetes resource requests and limits for the Minecraft server container.
Field Type Default Description cpuRequeststring500mCPU request. cpuLimitstring— CPU limit. No limit by default. memoryRequeststring1GiMemory request. memoryLimitstring= memoryRequest Memory limit. Defaults to the request value if not set.
Field Type Default Description enabledbooleantrueCreate a PVC for server data. Set false only for ephemeral/testing deployments. Immutable after creation. sizestring10GiPVC size. Immutable after creation. storageClassNamestring— StorageClass name. Empty = cluster default. Immutable after creation. deleteWithServerbooleanfalseDanger : delete the PVC when the MinecraftServer is deleted. Defaults to false (retain data).mountPathstring/dataMount path inside the container.
Danger
storage.enabled, storage.size, and storage.storageClassName are immutable after creation. Changes to these fields are rejected by the validating webhook. If you need to resize storage, resize the PVC directly using kubectl patch.
Field Type Default Description typestringClusterIPClusterIP, NodePort, or LoadBalancer.nodePortinteger— Node port (30000–32767). Only valid when type: NodePort. annotationsmap[string]string{}Service annotations (e.g. cloud load balancer configuration).
The status subresource is managed by the operator and reflects the current observed state.
Field Type Description phasestringLifecycle phase: Pending, Provisioning, Running, Paused, Failed, Terminating. messagestringHuman-readable description of the current state. observedGenerationintegerThe spec generation that was last reconciled. readyReplicasintegerNumber of ready replicas (0 or 1). currentImagestringThe container image currently in use. currentVersionstringThe Minecraft version string. endpoint.hoststringIP address or hostname for connecting to the server. endpoint.portintegerPort for the Minecraft protocol. endpoint.connectionStringstringhost:port connection string.storage.namestringPVC name. storage.phasestringPVC phase (Bound, Pending, etc.). storage.storageClassNamestringStorage class in use. storage.capacitystringActual allocated capacity. conditionsCondition[]Standard Kubernetes conditions (Available, Progressing, Degraded).
Pending → Provisioning → Running
Failed (unrecoverable error)
On deletion, the phase transitions to Terminating while the finalizer runs.
API Group/Version : mc-operator.dhv.sh/v1alpha1
Kind : MinecraftServerCluster
Short name : mcsc
Scope : Namespaced
Field Type Required Default Description templateMinecraftServerTemplate✅ — Template for backend MinecraftServer instances. Each server created by the cluster uses this template. scalingScalingSpec✅ — Scaling configuration for the backend servers. proxyVelocityProxySpecdefaults Velocity proxy configuration for routing players to backend servers.
The template contains the same types used by a standalone MinecraftServer, minus the replicas and service fields (which are managed by the cluster’s scaling and proxy configuration respectively).
Field Type Required Default Description acceptEulaboolean✅ falseMust be true to start the servers. You accept the Minecraft EULA . serverServerSpec✅ — Server distribution and version. See server above. propertiesServerPropertiesSpecdefaults Game settings (server.properties). See properties above. jvmJvmSpecdefaults JVM heap and flags. See jvm above. resourcesResourcesSpecdefaults Kubernetes resource requests/limits. See resources above. storageStorageSpecdefaults Persistent storage configuration. See storage above. imagestring— Override the container image. If unset, uses itzg/minecraft-server:latest. imagePullPolicystringIfNotPresentAlways, IfNotPresent, or Never.
Field Type Required Default Description modestringStaticStatic (fixed replica count) or Dynamic (auto-scale between min and max).replicasinteger1Number of backend servers for Static mode (1–100). minReplicasinteger1Minimum number of backend servers for Dynamic mode (1–100). maxReplicasinteger10Maximum number of backend servers for Dynamic mode (1–100). Must be ≥ minReplicas. policyScalingPolicy— Scaling policy for Dynamic mode. Required when mode: Dynamic.
Field Type Default Description metricstringPlayerCountThe metric to use for scaling decisions. Currently only PlayerCount is supported. targetPercentageinteger80Target utilization percentage (1–100). When average utilization exceeds this value, the cluster scales up. For PlayerCount: percentage of maxPlayers occupied across all servers.
Note
Dynamic scaling mode is currently a framework — the scaling policy is validated and stored, but metric collection is not yet implemented. In Dynamic mode, the cluster provisions minReplicas servers until metric-driven scaling is added.
Field Type Default Description proxyPortinteger25577The port the Velocity proxy listens on (1024–65535). maxPlayersinteger100Maximum number of players the proxy reports in the server list (1–10000). onlineModebooleantrueWhether the proxy authenticates players with Mojang. playerForwardingModestringModernPlayer info forwarding mode: None, Legacy, BungeeGuard, Modern. Modern is recommended for Paper backends. motdstring— Message of the day displayed in the server list. tryOrderinteger[][]Ordered list of server indices (zero-based) that players try to connect to. Empty = ascending index order. versionstringLATESTVelocity version. imagestring— Override the proxy container image. Defaults to itzg/mc-proxy:latest. imagePullPolicystringIfNotPresentAlways, IfNotPresent, or Never.serviceServiceSpecdefaults Service type and exposure settings for the proxy. resourcesResourcesSpecdefaults Kubernetes resource requests/limits for the proxy container.
The status subresource is managed by the operator and reflects the current observed state.
Field Type Description phasestringLifecycle phase: Pending, Provisioning, Running, Degraded, Failed, Terminating. messagestringHuman-readable description of the current state. observedGenerationintegerThe spec generation that was last reconciled. readyServersintegerNumber of backend servers in the Running phase. totalServersintegerTotal number of backend servers managed by the cluster. readyProxyReplicasintegerNumber of ready Velocity proxy replicas. proxyEndpoint.hoststringIP address or hostname for connecting to the proxy. proxyEndpoint.portintegerPort for the Minecraft protocol (proxy). proxyEndpoint.connectionStringstringhost:port connection string.serversClusterServerStatus[]Status of each backend server (name, phase). conditionsCondition[]Standard Kubernetes conditions (Available, Progressing, Degraded, ProxyReady).
Pending → Provisioning → Running
Degraded (some servers not ready)
Failed (unrecoverable error)
On deletion, the phase transitions to Terminating while the finalizer runs and child resources are garbage-collected.