document plain Java Minecraft operations

This commit is contained in:
2026-10-21 14:22:45 +02:00
parent 33ce3d0e7c
commit b937449de4
5 changed files with 30 additions and 121 deletions
+12 -15
View File
@@ -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`.
-24
View File
@@ -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
+18 -35
View File
@@ -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`.
-46
View File
@@ -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
-1
View File
@@ -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: