From 235b50c492bea9476ce72ed2e15e25cac6b4c1f0 Mon Sep 17 00:00:00 2001
From: royalcat <k.adamovich20@gmail.com>
Date: Sun, 30 Mar 2025 03:54:05 +0400
Subject: [PATCH] minecraft prominence-2-rpg

---
 minecraft/00-namespace.yaml                   |   4 +
 minecraft/prominence-2-rpg-pvc.yaml           |  13 ++
 minecraft/prominence-2-rpg-service.yaml       |  45 ++++++
 minecraft/prominence-2-rpg-statefulset.yaml   | 130 ++++++++++++++++++
 minecraft/tfg-service.yaml                    |   5 +
 ...g-deployment.yaml => tfg-statefulset.yaml} |  13 +-
 6 files changed, 208 insertions(+), 2 deletions(-)
 create mode 100644 minecraft/00-namespace.yaml
 create mode 100644 minecraft/prominence-2-rpg-pvc.yaml
 create mode 100644 minecraft/prominence-2-rpg-service.yaml
 create mode 100644 minecraft/prominence-2-rpg-statefulset.yaml
 rename minecraft/{tfg-deployment.yaml => tfg-statefulset.yaml} (87%)

diff --git a/minecraft/00-namespace.yaml b/minecraft/00-namespace.yaml
new file mode 100644
index 0000000..4ad4f70
--- /dev/null
+++ b/minecraft/00-namespace.yaml
@@ -0,0 +1,4 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: minecraft
diff --git a/minecraft/prominence-2-rpg-pvc.yaml b/minecraft/prominence-2-rpg-pvc.yaml
new file mode 100644
index 0000000..669bc7a
--- /dev/null
+++ b/minecraft/prominence-2-rpg-pvc.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: prominence-2-rpg-data
+  namespace: minecraft
+  labels:
+    app.kubernetes.io/name: prominence-2-rpg
+spec:
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 15Gi
diff --git a/minecraft/prominence-2-rpg-service.yaml b/minecraft/prominence-2-rpg-service.yaml
new file mode 100644
index 0000000..0ff5f43
--- /dev/null
+++ b/minecraft/prominence-2-rpg-service.yaml
@@ -0,0 +1,45 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: prominence-2-rpg
+  namespace: minecraft
+  labels:
+    app.kubernetes.io/name: prominence-2-rpg
+  annotations:
+    mc-router.itzg.me/defaultServer: "true"
+    mc-router.itzg.me/externalServerName: "prominence-2-rpg.mc.konfa.ch"
+spec:
+  selector:
+    app.kubernetes.io/name: prominence-2-rpg
+  ports:
+    - port: 25565
+---
+apiVersion: externaldns.k8s.io/v1alpha1
+kind: DNSEndpoint
+metadata:
+  name: prominence-2-rpg-dns-record
+  namespace: minecraft
+spec:
+  endpoints:
+    - dnsName: prominence-2-rpg.mc.konfa.ch
+      recordTTL: 300
+      recordType: A
+      targets:
+        - 130.61.173.37
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: prominence-2-rpg-port
+  namespace: minecraft
+  labels:
+    app.kubernetes.io/name: prominence-2-rpg
+spec:
+  type: NodePort
+  selector:
+    app.kubernetes.io/name: prominence-2-rpg
+  ports:
+    - name: "25565"
+      port: 25565
+      targetPort: 25565
+      nodePort: 33565
diff --git a/minecraft/prominence-2-rpg-statefulset.yaml b/minecraft/prominence-2-rpg-statefulset.yaml
new file mode 100644
index 0000000..e01b34d
--- /dev/null
+++ b/minecraft/prominence-2-rpg-statefulset.yaml
@@ -0,0 +1,130 @@
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: prominence-2-rpg
+  namespace: minecraft
+  labels:
+    app.kubernetes.io/name: prominence-2-rpg
+spec:
+  serviceName: prominence-2-rpg
+  selector:
+    matchLabels:
+      app.kubernetes.io/name: prominence-2-rpg
+  replicas: 0
+  template:
+    metadata:
+      namespace: minecraft
+      labels:
+        app.kubernetes.io/name: prominence-2-rpg
+        containertype: minecraft-server
+    spec:
+      affinity:
+        nodeAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+            nodeSelectorTerms:
+              - matchExpressions:
+                  - key: cpuclass
+                    operator: In
+                    values:
+                      - high
+      containers:
+        - name: prominence-2-rpg
+          image: itzg/minecraft-server:java21-graalvm
+          env:
+            # Let jvm figure out memory based on limit
+            - name: MEMORY
+              value: ""
+            - name: JVM_XX_OPTS
+              value: "-XX:MaxRAMPercentage=75"
+
+            - name: CF_API_KEY
+              value: $2a$10$GE.ruAAiogu1Zq2/oyPhzuGgFkXxID2ofiIXtnehJlS98/sK6J.Ya
+            - name: CF_SLUG
+              value: prominence-2-rpg
+            - name: CF_FILENAME_MATCHER
+              value: "3.1.6"
+            # - name: CF_FILE_ID
+            #   value: "6296245"
+            # - name: CF_EXCLUDE_INCLUDE_FILE
+            # value: ""
+            - name: CF_FORCE_SYNCHRONIZE
+              value: "true"
+            - name: CF_FORCE_INCLUDE_MODS
+              value: |
+                fancymenu
+                luna
+            # - name: CF_EXCLUDE_MODS
+            #   value: |
+            #     forgeconfigscreens
+            - name: CURSEFORGE_FILES
+              value: |
+                modmenu
+
+            # - name: CF_EXCLUDE_MODS
+            #   value: |
+            #     forgeconfigscreens
+            #   prominent
+            # - name: CF_FORCE_INCLUDE_MODS
+            #   value: |
+            #     forgeconfigscreens
+            #     fancymenu
+            #     luna
+
+            - name: ALLOW_FLIGHT
+              value: "true"
+            - name: CF_OVERRIDES_EXCLUSIONS
+              value: |
+                shaderpacks/**
+            - name: CF_PARALLEL_DOWNLOADS
+              value: "1"
+            - name: EULA
+              value: "TRUE"
+            - name: MAX_TICK_TIME
+              value: "-1"
+
+            - name: MOD_PLATFORM
+              value: AUTO_CURSEFORGE
+            - name: ONLINE_MODE
+              value: "false"
+            - name: OVERRIDE_SERVER_PROPERTIES
+              value: "true"
+            - name: SPAWN_PROTECTION
+              value: "0"
+
+            - name: OPS
+              value: |
+                RoyalCat33
+                RoyalCat20
+                Zoryka
+          ports:
+            - containerPort: 25565
+              protocol: TCP
+          resources:
+            requests:
+              cpu: "1"
+              memory: "2Gi"
+            limits:
+              cpu: "4"
+              memory: "10Gi"
+          readinessProbe:
+            exec:
+              command:
+                ["/usr/local/bin/mc-monitor", "status", "--host", "localhost"]
+            # Give it i + p * f seconds to be ready, so 120 seconds
+            initialDelaySeconds: 20
+            periodSeconds: 5
+            failureThreshold: 20
+          # Monitor ongoing liveness
+          livenessProbe:
+            exec:
+              command:
+                ["/usr/local/bin/mc-monitor", "status", "--host", "localhost"]
+            initialDelaySeconds: 120
+            periodSeconds: 60
+          volumeMounts:
+            - mountPath: /data
+              name: prominence-2-rpg-data
+      volumes:
+        - name: prominence-2-rpg-data
+          persistentVolumeClaim:
+            claimName: prominence-2-rpg-data
diff --git a/minecraft/tfg-service.yaml b/minecraft/tfg-service.yaml
index c2b3cd0..585140e 100644
--- a/minecraft/tfg-service.yaml
+++ b/minecraft/tfg-service.yaml
@@ -6,6 +6,7 @@ metadata:
   labels:
     app.kubernetes.io/name: tfg
   annotations:
+    mc-router.itzg.me/defaultServer: "true"
     mc-router.itzg.me/externalServerName: "tfg.mc.konfa.ch"
 spec:
   selector:
@@ -38,3 +39,7 @@ metadata:
 spec:
   endpoints:
     - dnsName: tfg.mc.konfa.ch
+      recordTTL: 300
+      recordType: A
+      targets:
+        - 130.61.173.37
diff --git a/minecraft/tfg-deployment.yaml b/minecraft/tfg-statefulset.yaml
similarity index 87%
rename from minecraft/tfg-deployment.yaml
rename to minecraft/tfg-statefulset.yaml
index 155139d..df8fab5 100644
--- a/minecraft/tfg-deployment.yaml
+++ b/minecraft/tfg-statefulset.yaml
@@ -10,7 +10,7 @@ spec:
   selector:
     matchLabels:
       app.kubernetes.io/name: tfg
-  replicas: 1
+  replicas: 0
   template:
     metadata:
       namespace: minecraft
@@ -18,11 +18,20 @@ spec:
         app.kubernetes.io/name: tfg
         containertype: minecraft-server
     spec:
+      affinity:
+        nodeAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+            nodeSelectorTerms:
+              - matchExpressions:
+                  - key: cpuclass
+                    operator: In
+                    values:
+                      - high
       containers:
         - name: tfg
           image: itzg/minecraft-server:java21-graalvm
           env:
-            # Let jvm figure out memory based on limits
+            # Let jvm figure out memory based on limit
             - name: MEMORY
               value: ""
             - name: JVM_XX_OPTS