From 146f8841abba767aeea6e9050b34a5ef3c736c5a Mon Sep 17 00:00:00 2001 From: feedc0de Date: Wed, 21 Oct 2026 13:04:53 +0200 Subject: [PATCH] Document gated Minecraft cutovers and rollback --- apps/minecraft-atm10/CUTOVER.md | 18 +++++++++++++++ apps/minecraft-paper/CUTOVER.md | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 apps/minecraft-atm10/CUTOVER.md create mode 100644 apps/minecraft-paper/CUTOVER.md diff --git a/apps/minecraft-atm10/CUTOVER.md b/apps/minecraft-atm10/CUTOVER.md new file mode 100644 index 0000000..d123318 --- /dev/null +++ b/apps/minecraft-atm10/CUTOVER.md @@ -0,0 +1,18 @@ +# ATM10 cutover and rollback + +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`. + +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. + +Do not stop the Paper server as part of this first cutover. diff --git a/apps/minecraft-paper/CUTOVER.md b/apps/minecraft-paper/CUTOVER.md new file mode 100644 index 0000000..f164b29 --- /dev/null +++ b/apps/minecraft-paper/CUTOVER.md @@ -0,0 +1,39 @@ +# Paper cutover and rollback + +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. + +After ATM10 has been cut over and checked: + +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. + +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.