--- # 1. NAMESPACE apiVersion: v1 kind: Namespace metadata: name: rimworld --- # 2. SERVICE (MetalLB Integration) apiVersion: v1 kind: Service metadata: name: rimworld-together-hub namespace: rimworld annotations: # Optional: Falls du eine feste IP aus deinem Pool willst, hier eintragen: # metallb.universe.tf/loadBalancerIPs: 192.168.x.x metallb.universe.tf/allow-shared-ip: "rimworld-hub" spec: type: LoadBalancer selector: app: rimworld-together ports: - protocol: TCP port: 9050 targetPort: 9050 --- # 3. STATEFULSET (Die App-Logik) apiVersion: apps/v1 kind: StatefulSet metadata: name: rimworld-together namespace: rimworld spec: serviceName: "rimworld-together-hub" replicas: 1 selector: matchLabels: app: rimworld-together template: metadata: labels: app: rimworld-together spec: # NODE AFFINITY: Damit der Pod auf deinem Gaming-Node landet affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: workload operator: In values: - Games containers: - name: hub image: rimworldtogether/rimworld-together:latest imagePullPolicy: Always resources: # Optimierte Limits für Talos requests: cpu: 250m memory: 512Mi limits: cpu: 1000m memory: 2Gi ports: - containerPort: 9050 name: hub-port volumeMounts: - name: storage mountPath: /app/Data # AUTOMATISCHES PVC (Wird von Argo CD verwaltet) volumeClaimTemplates: - metadata: name: storage spec: accessModes: [ "ReadWriteOnce" ] # Falls du eine spezielle StorageClass hast (z.B. longhorn), hier eintragen: # storageClassName: "longhorn" resources: requests: storage: 2Gi