From b937449de47e5fd2ec01d46253ba512240ba4cd2 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 21 Oct 2026 14:22:45 +0200 Subject: [PATCH] document plain Java Minecraft operations --- apps/minecraft-atm10/CUTOVER.md | 27 ++++++++-------- apps/minecraft-atm10/values.yaml | 24 --------------- apps/minecraft-paper/CUTOVER.md | 53 +++++++++++--------------------- apps/minecraft-paper/values.yaml | 46 --------------------------- bootstrap/minecraft-project.yaml | 1 - 5 files changed, 30 insertions(+), 121 deletions(-) delete mode 100644 apps/minecraft-atm10/values.yaml delete mode 100644 apps/minecraft-paper/values.yaml diff --git a/apps/minecraft-atm10/CUTOVER.md b/apps/minecraft-atm10/CUTOVER.md index d123318..8f58e25 100644 --- a/apps/minecraft-atm10/CUTOVER.md +++ b/apps/minecraft-atm10/CUTOVER.md @@ -1,18 +1,15 @@ -# ATM10 cutover and rollback +# ATM10 runtime and recovery -Current safety gate: `server.enabled=false`. The byobu process remains the sole -writer of `/home/feedc0de/ATM10`. Chart Git tag `v6.6` is published as -`minecraft-atm10` chart `6.6.0-0`. +Argo CD deploys the stock Java 21 runtime directly from +`deployment.yaml`. The existing modpack tree, including libraries, mods, +configs, worlds, and map data, stays at `/home/feedc0de/ATM10` on arschrock. +The pod runs as UID/GID 1000, one replica, `Recreate`, with no resource limits. -1. Ask the operator to type `stop` in the ATM10 console only. Confirm the Java - process has exited and record a file count and size for its `world/` tree. -2. Change only `server.enabled` to `true` in `values.yaml`, commit, and wait for - Argo to synchronize. Confirm the new pod is on arschrock, UID/GID 1000, - `Recreate`, one replica, the unchanged host directory, and port 25566. - Test the dynamic LoadBalancer address and both direct arschrock addresses. -3. Rollback: set `server.enabled=false` and wait until the pod is fully gone. - Only then restart the existing Java 21 launch from the same host directory: - `java @user_jvm_args.txt @libraries/net/neoforged/neoforge/21.1.224/unix_args.txt nogui`. - Do not let both runtimes write the same files. +For maintenance or rollback, change the Deployment replicas to zero in GitOps +and wait until the pod is gone before starting byobu against that same data +directory. To return to Kubernetes, stop byobu completely, restore replicas to +one, and wait for Argo CD and the Java status metric to become healthy. Never +let the host process and pod write the directory simultaneously. -Do not stop the Paper server as part of this first cutover. +The normal LoadBalancer address is dynamically assigned; the separate direct +service also answers on `10.12.4.170` and `192.168.0.2`. diff --git a/apps/minecraft-atm10/values.yaml b/apps/minecraft-atm10/values.yaml deleted file mode 100644 index a1586c1..0000000 --- a/apps/minecraft-atm10/values.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Do not enable until the byobu server is stopped. -server: - enabled: true - nodeSelector: - kubernetes.io/hostname: arschrock - tolerations: - - key: node-role.kubernetes.io/control-plane - operator: Exists - effect: NoSchedule -data: - hostPath: /home/feedc0de/ATM10 -service: - type: LoadBalancer - annotations: - metallb.io/address-pool: default - mikrotik.brunner.ninja/router: newgw - mikrotik.brunner.ninja/forwardings: '[{"name":"tcp","servicePort":"minecraft","dstAddressList":"WANs"}]' - additionalServices: - arschrock: - spec: - type: ClusterIP - externalIPs: - - 10.12.4.170 - - 192.168.0.2 diff --git a/apps/minecraft-paper/CUTOVER.md b/apps/minecraft-paper/CUTOVER.md index f164b29..5975f4c 100644 --- a/apps/minecraft-paper/CUTOVER.md +++ b/apps/minecraft-paper/CUTOVER.md @@ -1,39 +1,22 @@ -# Paper cutover and rollback +# Paper runtime and recovery -Current safety gate: `server.enabled=false` and `dynmap.route.enabled=false`. -The byobu process remains the sole writer of `/home/feedc0de/mcserver` and the -old host PostgreSQL `minecraft` database. Paper chart Git tag `v26.3-166` is -published as chart `26.3.166-0`, with that exact JAR baked into the matching -image. The new PostgreSQL has a retained 8 GiB PVC and a preliminary dump; -its Secret remains cluster-managed, not in this public repository. +Argo CD runs the stock Java 26 runtime from `deployment.yaml`; Paper's selected +JAR, plugins, configs, worlds, and Dynmap data stay at +`/home/feedc0de/mcserver` on arschrock. Paper's plugin database is the separate +Bitnami PostgreSQL Argo Application in the same namespace. Its existing PVC +UID is `58141201-d502-4fb6-a396-c57a0a83d320`; do not replace or delete it. +The cluster-only Secret `paper-postgres` supplies its credentials. -After ATM10 has been cut over and checked: +Plugin DB host settings and Dynmap's `0.0.0.0` bind address are already in the +host configs, with `.pre-kubernetes` backups retained. The route +`brunner.ninja/mcmap` strips `/mcmap` and targets the local Dynmap Service. -1. Ask the operator to type `stop` in the Paper console. Confirm Java has - exited, port 25565 is free, and no old PostgreSQL plugin connections remain. - Record `world*/` file counts/sizes and take a final `pg_dump -Fc` of the - host database. Keep the host database and previous dump untouched. -2. Check the kube context, new namespace, new PVC UID, and database pod before - restoring the final dump **only into `paper-postgresql`**. Since the - preliminary dump is present, restore with `--clean --if-exists` and - `--single-transaction`. Confirm all nine table counts match the final dump. -3. Enable `server.enabled`, but leave `dynmap.route.enabled=false`. Commit and - let Argo launch one pod on arschrock. The init container first copies each - changed plugin config to `.pre-kubernetes`, then changes the three PostgreSQL - hosts and Dynmap's bind address. Verify game port 25565, both direct - arschrock addresses, dynamic LoadBalancer address, plugin database access, - and the internal `paper-dynmap` Service. -4. In one GitOps change, enable the Paper chart's Dynmap route and remove the - old `default/mcmap` route and its middleware/legacy Service definitions. - Verify `https://brunner.ninja/mcmap` serves the new Dynmap before deleting - the manually managed legacy EndpointSlice. Move the old source manifest - under `traefik/legacy-services/_deleted/`. Dynmap needs no MikroTik forward. -5. Add and verify Grafana panels for player count, CPU, memory, network, and - executing node after both services are healthy. +For maintenance or rollback, set the Paper Deployment replicas to zero in +GitOps and wait until the pod is gone before starting byobu. If plugins wrote +to the Kubernetes PostgreSQL database, reconcile those writes before switching +to the old host database. To return to Kubernetes, stop byobu completely, +restore replicas to one, and verify plugins, the game port, Dynmap, and Grafana. +Never let both runtimes write the server directory simultaneously. -Rollback requires disabling the Kubernetes game Deployment and waiting for its -pod to terminate **before** restarting byobu. If plugins wrote to the new -database, export/reconcile those writes into the old database first; starting -against the stale old database loses data. Restore the `.pre-kubernetes` -configuration files only once the pod is stopped. Keep the new PVC and both -database dumps for recovery. +The normal LoadBalancer address is dynamically assigned; the separate direct +service also answers on `10.12.4.170` and `192.168.0.2`. diff --git a/apps/minecraft-paper/values.yaml b/apps/minecraft-paper/values.yaml deleted file mode 100644 index b1e5e14..0000000 --- a/apps/minecraft-paper/values.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# Stage PostgreSQL first. Enable the game and Dynmap only after the byobu -# server is stopped and a final host database dump has been restored. -server: - enabled: true - nodeSelector: - kubernetes.io/hostname: arschrock - tolerations: - - key: node-role.kubernetes.io/control-plane - operator: Exists - effect: NoSchedule -data: - hostPath: /home/feedc0de/mcserver -service: - type: LoadBalancer - annotations: - metallb.io/address-pool: default - mikrotik.brunner.ninja/router: newgw - mikrotik.brunner.ninja/forwardings: '[{"name":"tcp","servicePort":"minecraft","dstAddressList":"WANs"}]' - additionalServices: - arschrock: - spec: - type: ClusterIP - externalIPs: - - 10.12.4.170 - - 192.168.0.2 -dynmap: - route: - enabled: true - host: brunner.ninja -postgresql: - enabled: true - auth: - username: minecraft - database: minecraft - existingSecret: paper-postgres - secretKeys: - adminPasswordKey: postgres-password - userPasswordKey: database-password - primary: - persistence: - storageClass: rook-ceph-block-ec - size: 8Gi - persistentVolumeClaimRetentionPolicy: - enabled: true - whenDeleted: Retain - whenScaled: Retain diff --git a/bootstrap/minecraft-project.yaml b/bootstrap/minecraft-project.yaml index d32fd3b..8fcb66a 100644 --- a/bootstrap/minecraft-project.yaml +++ b/bootstrap/minecraft-project.yaml @@ -8,7 +8,6 @@ metadata: spec: description: Separately versioned Minecraft servers and their private runtime state sourceRepos: - - https://brunner.ninja/charts - https://code.brunner.ninja/feedc0de/homelab-gitops.git - registry-1.docker.io/bitnamicharts destinations: