document plain Java Minecraft operations
This commit is contained in:
@@ -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`.
|
||||
|
||||
@@ -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
|
||||
@@ -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`.
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user