Document gated Minecraft cutovers and rollback

This commit is contained in:
feedc0de
2026-10-21 13:04:53 +02:00
parent da2ede7ec8
commit 146f8841ab
2 changed files with 57 additions and 0 deletions
+18
View File
@@ -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.
+39
View File
@@ -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.