Skip to content

CRD Reference

API Group/Version: mc-operator.dhv.sh/v1alpha1
Kind: MinecraftServer
Short name: mcs
Scope: Namespaced


FieldTypeRequiredDefaultDescription
acceptEulabooleanfalseMust be true to start the server. You accept the Minecraft EULA.
serverServerSpecServer distribution and version.
propertiesServerPropertiesSpecdefaultsGame settings (server.properties).
jvmJvmSpecdefaultsJVM heap and flags.
resourcesResourcesSpecdefaultsKubernetes resource requests/limits.
storageStorageSpecdefaultsPersistent storage configuration.
serviceServiceSpecdefaultsService type and exposure settings.
imagestringOverride the container image. If unset, uses itzg/minecraft-server:latest.
imagePullPolicystringIfNotPresentAlways, IfNotPresent, or Never.
replicasinteger10 (paused) or 1 (running). Minecraft servers are single-instance.

FieldTypeRequiredDefaultDescription
typestringVanillaDistribution: 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.

FieldTypeDefaultDescription
motdstringMessage 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).
levelSeedstringWorld 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.

FieldTypeDefaultDescription
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.

FieldTypeDefaultDescription
cpuRequeststring500mCPU request.
cpuLimitstringCPU limit. No limit by default.
memoryRequeststring1GiMemory request.
memoryLimitstring= memoryRequestMemory limit. Defaults to the request value if not set.

FieldTypeDefaultDescription
enabledbooleantrueCreate a PVC for server data. Set false only for ephemeral/testing deployments. Immutable after creation.
sizestring10GiPVC size. Immutable after creation.
storageClassNamestringStorageClass 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.

FieldTypeDefaultDescription
typestringClusterIPClusterIP, NodePort, or LoadBalancer.
nodePortintegerNode 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.

FieldTypeDescription
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
Paused (replicas=0)
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


FieldTypeRequiredDefaultDescription
templateMinecraftServerTemplateTemplate for backend MinecraftServer instances. Each server created by the cluster uses this template.
scalingScalingSpecScaling configuration for the backend servers.
proxyVelocityProxySpecdefaultsVelocity 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).

FieldTypeRequiredDefaultDescription
acceptEulabooleanfalseMust be true to start the servers. You accept the Minecraft EULA.
serverServerSpecServer distribution and version. See server above.
propertiesServerPropertiesSpecdefaultsGame settings (server.properties). See properties above.
jvmJvmSpecdefaultsJVM heap and flags. See jvm above.
resourcesResourcesSpecdefaultsKubernetes resource requests/limits. See resources above.
storageStorageSpecdefaultsPersistent storage configuration. See storage above.
imagestringOverride the container image. If unset, uses itzg/minecraft-server:latest.
imagePullPolicystringIfNotPresentAlways, IfNotPresent, or Never.

FieldTypeRequiredDefaultDescription
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.
policyScalingPolicyScaling policy for Dynamic mode. Required when mode: Dynamic.
FieldTypeDefaultDescription
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.

FieldTypeDefaultDescription
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.
motdstringMessage 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.
imagestringOverride the proxy container image. Defaults to itzg/mc-proxy:latest.
imagePullPolicystringIfNotPresentAlways, IfNotPresent, or Never.
serviceServiceSpecdefaultsService type and exposure settings for the proxy.
resourcesResourcesSpecdefaultsKubernetes resource requests/limits for the proxy container.

The status subresource is managed by the operator and reflects the current observed state.

FieldTypeDescription
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.