How I Installed Minecraft All the Mods 10 on Kubernetes

Introduction

First of all, you don’t have to do this at all..

It just adds another complication, instead of just running Minecraft ATM10 on Docker.

That being said, I love Kubernetes, and have been wanting to use for all my server needs. Even when it is complicated..

Also, if you want to follow along, you have to know that I have FluxCD in my process, so you may have modify it for your use case.

Anyways, here is what I did!

Setup

I found an already made image of Minecraft made on Docker, and used their settings.

https://github.com/itzg/docker-minecraft-server?tab=readme-ov-file

I made a Deployment with requests and limits. ATM10 is a heavy app, and tbh I don’t have too many resources in my little PCs.

I also held the version to the release date, rather than getting the latest release automatically.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: minecraft
spec:
  replicas: 1
  selector:
    matchLabels:
      app: minecraft
  template:
    metadata:
      labels:
        app: minecraft
        policy-type: "server"
    spec:
      containers:
        - name: minecraft
          image: itzg/minecraft-server:2025.4.0

          resources:
            requests:
              memory: 8Gi
              cpu: 2
            limits:
              memory: 12Gi
              cpu: 4

          securityContext:
              allowPrivilegeEscalation: false

          imagePullPolicy: Always

          envFrom:
            - configMapRef:
                name: minecraft-configmap
            - secretRef:
                name: minecraft-container-env

          ports:
            - containerPort: 25565
              protocol: TCP

          volumeMounts:
          - name: minecraft-data
            mountPath: /data

      restartPolicy: Always

      volumes:
        - name: minecraft-data
          persistentVolumeClaim:
            claimName: minecraft-data-pvc

I also created a Service, Storage, and Secret. I called these with Kustomize.

If you want to see my exact settings, they are public to view!

https://github.com/pedrotchang

Extra Settings for ATM10

Rather than listing all the settings here though, I wanted to go through how to setup ATM10. It has some extra setting that I had to figure out.

For one, you need an API key from CurseForge.

Login by either signing up or using an exisiting account: https://console.curseforge.com/#/login

Go to API Keys, and copy your API Key.

I then grabbed this key and created an Azure Key Vault entry with it. I called it inside my deployment using secretRef section:

secretRef:
  name: minecraft-container-env

I then also had to include settings for the deployment to install ATM10 inside the server. It also required the MEMORY: "4G". This settings gives the installation process 4G. Really great way of ensuring that the container has enough resources to complete its job.

Also…make sure to add ALLOW_FLIGHT, otherwise when you die you become a ghost and float, you’ll get kicked out of the server.

apiVersion: v1
kind: ConfigMap
metadata:
  name: minecraft-configmap
data:
  EULA: "TRUE"
  MOD_PLATFORM: "AUTO_CURSEFORGE"
  CF_SLUG: "all-the-mods-10"
  MEMORY: "4G"
  CF_OVERRIDES_EXCLUSIONS: |
    shaderpacks/**
  ALLOW_FLIGHT: "TRUE"
  OVERRIDE_SERVER_PROPERTIES: "false"
  SEED: "7783552872028868482"
  OPS: |
    a_seyza
  MAX_PLAYERS: "5"

Conclusion

Other than that, there wasn’t much to it other than finding the external IP that allowed me to connect to it. I never exposed it to the internet, as I have no intention of playing it elsewhere (nor do I currently have the time to play) with others (someday soon!). It was a fun little exercise, which for now, I will shelf for a day when I can play with my son, and friends in the future!

I hope you enjoyed!


202504130837