home-ops icon indicating copy to clipboard operation
home-ops copied to clipboard

feat: adds minecraft configuration

Open axeII opened this issue 1 year ago • 5 comments

Description of the change

Adds minecraft yay

Benefits or applicable issues

Share with friends, also log4j let's goo

axeII avatar Feb 13 '24 22:02 axeII

🦙 MegaLinter status: ✅ SUCCESS

Descriptor Linter Files Fixed Errors Elapsed time

See detailed report in MegaLinter reports Set VALIDATE_ALL_CODEBASE: true in mega-linter.yml to validate all sources, not only the diff

MegaLinter is graciously provided by OX Security

axeII avatar Feb 13 '24 22:02 axeII

--- kubernetes/apps Kustomization: flux-system/cluster-apps Namespace: flux-system/games

+++ kubernetes/apps Kustomization: flux-system/cluster-apps Namespace: flux-system/games

@@ -0,0 +1,11 @@

+---
+apiVersion: v1
+kind: Namespace
+metadata:
+  labels:
+    goldilocks.fairwinds.com/enabled: 'true'
+    kustomize.toolkit.fluxcd.io/name: cluster-apps
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+    kustomize.toolkit.fluxcd.io/prune: disabled
+  name: games
+
--- kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: flux-system/minecraft

+++ kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: flux-system/minecraft

@@ -0,0 +1,34 @@

+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: cluster-apps
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: minecraft
+  namespace: flux-system
+spec:
+  commonMetadata:
+    labels:
+      app.kubernetes.io/name: minecraft
+  decryption:
+    provider: sops
+    secretRef:
+      name: sops-age
+  interval: 30m
+  path: ./kubernetes/apps/games/minecraft/app
+  postBuild:
+    substituteFrom:
+    - kind: ConfigMap
+      name: cluster-settings
+    - kind: Secret
+      name: cluster-secrets
+  prune: true
+  retryInterval: 1m
+  sourceRef:
+    kind: GitRepository
+    name: home-kubernetes
+  targetNamespace: games
+  timeout: 5m
+  wait: false
+
--- kubernetes/apps/media/plex/app Kustomization: flux-system/cluster-apps-plex HelmRelease: media/plex

+++ kubernetes/apps/media/plex/app Kustomization: flux-system/cluster-apps-plex HelmRelease: media/plex

@@ -38,13 +38,13 @@

     env:
       ADVERTISE_IP: https://plex.${SECRET_DOMAIN},http://${METALLB_PLEX_ADDR}:32400
       NVIDIA_DRIVER_CAPABILITIES: all
       NVIDIA_VISIBLE_DEVICES: all
       PLEX_GID: 0
       PLEX_UID: 0
-      TZ: ${TZ}
+      TZ: ${TIMEZONE}
     hostNetwork: true
     image:
       repository: ghcr.io/onedr0p/plex
       tag: 1.32.8.7639-fb6452ebf@sha256:97bf4a8eac34de4b0df78e4fc3e2b501187161a3a264fa2b220bd51b0f89ba77
     ingress:
       main:
--- kubernetes/flux Kustomization: flux-system/cluster ConfigMap: flux-system/cluster-settings

+++ kubernetes/flux Kustomization: flux-system/cluster ConfigMap: flux-system/cluster-settings

@@ -4,12 +4,13 @@

   METALLB_INGRESS_ADDR: 192.168.69.105
   METALLB_K8S_GATEWAY_ADDR: 192.168.69.106
   METALLB_LB_RANGE: 192.168.69.100-192.168.69.110
   METALLB_PLEX_ADDR: 192.168.69.101
   NFS_BACKUP: nfs://192.168.69.69:/mnt/ThiccBoi/k3s
   SHARED_IP: my-shared-ip
+  SVC_MINECRAFT_ADDR: 192.168.69.102
   TIMEZONE: Europe/Berlin
   USER_ID: '65534'
 kind: ConfigMap
 metadata:
   labels:
     kustomize.toolkit.fluxcd.io/name: cluster
--- kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft ExternalSecret: games/minecraft

+++ kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft ExternalSecret: games/minecraft

@@ -0,0 +1,25 @@

+---
+apiVersion: external-secrets.io/v1beta1
+kind: ExternalSecret
+metadata:
+  labels:
+    app.kubernetes.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: minecraft
+  namespace: games
+spec:
+  dataFrom:
+  - extract:
+      key: minecraft
+  secretStoreRef:
+    kind: ClusterSecretStore
+    name: onepassword-connect
+  target:
+    creationPolicy: Owner
+    name: minecraft-secret
+    template:
+      data:
+        RCON_PASSWORD: '{{ .RCON_PASSWORD }}'
+      engineVersion: v2
+
--- kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft HelmRelease: games/minecraft

+++ kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft HelmRelease: games/minecraft

@@ -0,0 +1,132 @@

+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta2
+kind: HelmRelease
+metadata:
+  labels:
+    app.kubernetes.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: minecraft
+  namespace: games
+spec:
+  chart:
+    spec:
+      chart: minecraft
+      sourceRef:
+        kind: HelmRepository
+        name: minecraft-server
+        namespace: flux-system
+      version: 4.15.0
+  dependsOn:
+  - name: longhorn
+    namespace: longhorn-system
+  install:
+    createNamespace: true
+    remediation:
+      retries: 3
+  interval: 30m
+  maxHistory: 2
+  uninstall:
+    keepHistory: false
+  upgrade:
+    cleanupOnFail: true
+    remediation:
+      retries: 3
+  values:
+    affinity:
+      nodeAffinity:
+        requiredDuringSchedulingIgnoredDuringExecution:
+          nodeSelectorTerms:
+          - matchExpressions:
+            - key: kubernetes.io/hostname
+              operator: In
+              values:
+              - k8s-2
+    deploymentAnnotations:
+      secret.reloader.stakater.com/reload: minecraft-secret
+    extraEnv:
+      ENABLE_AUTOPAUSE: false
+      TZ: ${TIMEZONE}
+    image:
+      repository: ghcr.io/itzg/minecraft-server
+      tag: java17
+    livenessProbe:
+      enabled: false
+    minecraftServer:
+      difficulty: normal
+      eula: true
+      extraPorts:
+      - containerPort: 9225
+        ingress:
+          enabled: false
+        name: metrics
+        protocol: TCP
+        service:
+          embedded: false
+          enabled: true
+          port: 9225
+          type: ClusterIP
+      - containerPort: 8123
+        ingress:
+          enabled: true
+          hosts:
+          - name: minecraft.${SECRET_DOMAIN}
+            path: /
+          ingressClassName: nginx
+          tls:
+          - hosts:
+            - minecraft.${SECRET_DOMAIN}
+            secretName: minecraft.${SECRET_DOMAIN}
+        name: map
+        protocol: TCP
+        service:
+          embedded: false
+          enabled: true
+          port: 8123
+          type: ClusterIP
+      forceReDownload: true
+      gameMode: survival
+      jvmXXOpts: -XX:MaxRAMPercentage=75
+      maxTickTime: -1
+      memory: 8192M
+      motd: We have cookies
+      onlineMode: false
+      ops: akira
+      pvp: false
+      rcon:
+        enabled: true
+        serviceType: ClusterIP
+      serviceType: LoadBalancer
+      spawnProtection: 0
+      spigetResources:
+      - 36618
+      type: SPIGOT
+      version: 1.20.2
+      viewDistance: 12
+      whitelist: akira
+      worldSaveName: Empire
+    persistence:
+      dataDir:
+        Size: 5G
+        enabled: true
+        storageClass: longhorn
+    readinessProbe:
+      enabled: false
+    resources:
+      limits:
+        memory: 8Gi
+      requests:
+        cpu: 500m
+    securityContext:
+      fsGroup: 1000
+      runAsUser: 1000
+    serviceAnnotations:
+      metallb.universe.tf/loadBalancerIPs: ${SVC_MINECRAFT_ADDR}
+    startupProbe:
+      enabled: false
+  valuesFrom:
+  - kind: Secret
+    name: minecraft-secret
+    targetPath: minecraftServer.rcon.password
+    valuesKey: RCON_PASSWORD
+

bot-akira[bot] avatar Feb 14 '24 10:02 bot-akira[bot]

--- HelmRelease: media/plex Deployment: media/plex

+++ HelmRelease: media/plex Deployment: media/plex

@@ -47,13 +47,13 @@

           value: all
         - name: PLEX_GID
           value: '0'
         - name: PLEX_UID
           value: '0'
         - name: TZ
-          value: ${TZ}
+          value: ${TIMEZONE}
         ports:
         - name: http
           containerPort: 32400
           protocol: TCP
         volumeMounts:
         - name: config
--- HelmRelease: games/minecraft PersistentVolumeClaim: games/minecraft-minecraft-datadir

+++ HelmRelease: games/minecraft PersistentVolumeClaim: games/minecraft-minecraft-datadir

@@ -0,0 +1,20 @@

+---
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+  name: minecraft-minecraft-datadir
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+  annotations:
+    volume.alpha.kubernetes.io/storage-class: default
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 5G
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft-metrics

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft-metrics

@@ -0,0 +1,21 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft-metrics
+  labels:
+    app: minecraft-minecraft-metrics
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  type: ClusterIP
+  ports:
+  - name: metrics
+    port: 9225
+    targetPort: metrics
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft-map

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft-map

@@ -0,0 +1,21 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft-map
+  labels:
+    app: minecraft-minecraft-map
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  type: ClusterIP
+  ports:
+  - name: map
+    port: 8123
+    targetPort: map
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft

@@ -0,0 +1,23 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+  annotations:
+    metallb.universe.tf/loadBalancerIPs: ${SVC_MINECRAFT_ADDR}
+spec:
+  type: LoadBalancer
+  ports:
+  - name: minecraft
+    port: 25565
+    targetPort: minecraft
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft-rcon

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft-rcon

@@ -0,0 +1,21 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft-rcon
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  type: ClusterIP
+  ports:
+  - name: rcon
+    port: 25575
+    targetPort: rcon
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Deployment: games/minecraft-minecraft

+++ HelmRelease: games/minecraft Deployment: games/minecraft-minecraft

@@ -0,0 +1,169 @@

+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: minecraft-minecraft
+  annotations:
+    secret.reloader.stakater.com/reload: minecraft-secret
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+  selector:
+    matchLabels:
+      app: minecraft-minecraft
+  template:
+    metadata:
+      labels:
+        app: minecraft-minecraft
+        app.kubernetes.io/name: minecraft
+        app.kubernetes.io/instance: minecraft-minecraft
+    spec:
+      securityContext:
+        fsGroup: 2000
+        runAsGroup: 3000
+        runAsNonRoot: true
+        runAsUser: 1000
+        seccompProfile:
+          type: RuntimeDefault
+      containers:
+      - name: minecraft-minecraft
+        image: ghcr.io/itzg/minecraft-server:java17
+        imagePullPolicy: IfNotPresent
+        tty: true
+        stdin: true
+        resources:
+          limits:
+            memory: 8Gi
+          requests:
+            cpu: 500m
+            memory: 512Mi
+        readinessProbe:
+          exec:
+            command:
+            - mc-health
+          initialDelaySeconds: 30
+          periodSeconds: 5
+          failureThreshold: 20
+          successThreshold: 1
+          timeoutSeconds: 1
+        livenessProbe:
+          exec:
+            command:
+            - mc-health
+          initialDelaySeconds: 30
+          periodSeconds: 5
+          failureThreshold: 20
+          successThreshold: 1
+          timeoutSeconds: 1
+        env:
+        - name: EULA
+          value: 'true'
+        - name: TYPE
+          value: SPIGOT
+        - name: VERSION
+          value: 1.20.2
+        - name: DIFFICULTY
+          value: normal
+        - name: WHITELIST
+          value: akira
+        - name: OPS
+          value: akira
+        - name: MAX_PLAYERS
+          value: '20'
+        - name: MAX_WORLD_SIZE
+          value: '10000'
+        - name: FORCE_REDOWNLOAD
+          value: 'TRUE'
+        - name: MAX_BUILD_HEIGHT
+          value: '256'
+        - name: MAX_TICK_TIME
+          value: '-1'
+        - name: VIEW_DISTANCE
+          value: '12'
+        - name: MODE
+          value: survival
+        - name: MOTD
+          value: We have cookies
+        - name: PVP
+          value: 'false'
+        - name: LEVEL_TYPE
+          value: DEFAULT
+        - name: LEVEL
+          value: Empire
+        - name: SPIGET_RESOURCES
+          value: '36618'
+        - name: MODRINTH_ALLOWED_VERSION_TYPE
+          value: release
+        - name: ONLINE_MODE
+          value: 'false'
+        - name: MEMORY
+          value: 8192M
+        - name: JVM_XX_OPTS
+          value: -XX:MaxRAMPercentage=75
+        - name: OVERRIDE_SERVER_PROPERTIES
+          value: 'false'
+        - name: ENABLE_RCON
+          value: 'true'
+        - name: RCON_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: minecraft-minecraft-rcon
+              key: rcon-password
+        - name: ENABLE_AUTOPAUSE
+          value: 'false'
+        - name: TZ
+          value: ${TIMEZONE}
+        ports:
+        - name: minecraft
+          containerPort: 25565
+          protocol: TCP
+        - name: rcon
+          containerPort: 25575
+          protocol: TCP
+        - name: metrics
+          containerPort: 9225
+          protocol: TCP
+        - name: map
+          containerPort: 8123
+          protocol: TCP
+        volumeMounts:
+        - name: tmp
+          mountPath: /tmp
+        - name: datadir
+          mountPath: /data
+        - name: backupdir
+          mountPath: /backups
+          readOnly: true
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
+          fsGroup: 1000
+          readOnlyRootFilesystem: true
+          runAsUser: 1000
+      volumes:
+      - name: tmp
+        emptyDir: {}
+      - name: datadir
+        persistentVolumeClaim:
+          claimName: minecraft-minecraft-datadir
+      - name: backupdir
+        emptyDir: {}
+      affinity:
+        nodeAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+            nodeSelectorTerms:
+            - matchExpressions:
+              - key: kubernetes.io/hostname
+                operator: In
+                values:
+                - k8s-2
+
--- HelmRelease: games/minecraft Ingress: games/minecraft-minecraft-map

+++ HelmRelease: games/minecraft Ingress: games/minecraft-minecraft-map

@@ -0,0 +1,29 @@

+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: minecraft-minecraft-map
+  labels:
+    app: minecraft-minecraft-map
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  ingressClassName: nginx
+  tls:
+  - hosts:
+    - minecraft.${SECRET_DOMAIN}
+    secretName: minecraft.${SECRET_DOMAIN}
+  rules:
+  - host: minecraft.${SECRET_DOMAIN}
+    http:
+      paths:
+      - path: /
+        pathType: Prefix
+        backend:
+          service:
+            name: minecraft-minecraft-map
+            port:
+              number: 8123
+

bot-akira[bot] avatar Feb 14 '24 10:02 bot-akira[bot]

--- kubernetes/apps Kustomization: flux-system/cluster-apps Namespace: flux-system/games

+++ kubernetes/apps Kustomization: flux-system/cluster-apps Namespace: flux-system/games

@@ -0,0 +1,11 @@

+---
+apiVersion: v1
+kind: Namespace
+metadata:
+  labels:
+    goldilocks.fairwinds.com/enabled: 'true'
+    kustomize.toolkit.fluxcd.io/name: cluster-apps
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+    kustomize.toolkit.fluxcd.io/prune: disabled
+  name: games
+
--- kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: flux-system/minecraft

+++ kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: flux-system/minecraft

@@ -0,0 +1,34 @@

+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: cluster-apps
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: minecraft
+  namespace: flux-system
+spec:
+  commonMetadata:
+    labels:
+      app.kubernetes.io/name: minecraft
+  decryption:
+    provider: sops
+    secretRef:
+      name: sops-age
+  interval: 30m
+  path: ./kubernetes/apps/games/minecraft/app
+  postBuild:
+    substituteFrom:
+    - kind: ConfigMap
+      name: cluster-settings
+    - kind: Secret
+      name: cluster-secrets
+  prune: true
+  retryInterval: 1m
+  sourceRef:
+    kind: GitRepository
+    name: home-kubernetes
+  targetNamespace: games
+  timeout: 5m
+  wait: false
+
--- kubernetes/apps/media/plex/app Kustomization: flux-system/cluster-apps-plex HelmRelease: media/plex

+++ kubernetes/apps/media/plex/app Kustomization: flux-system/cluster-apps-plex HelmRelease: media/plex

@@ -38,13 +38,13 @@

     env:
       ADVERTISE_IP: https://plex.${SECRET_DOMAIN},http://${METALLB_PLEX_ADDR}:32400
       NVIDIA_DRIVER_CAPABILITIES: all
       NVIDIA_VISIBLE_DEVICES: all
       PLEX_GID: 0
       PLEX_UID: 0
-      TZ: ${TZ}
+      TZ: ${TIMEZONE}
     hostNetwork: true
     image:
       repository: ghcr.io/onedr0p/plex
       tag: 1.32.8.7639-fb6452ebf@sha256:97bf4a8eac34de4b0df78e4fc3e2b501187161a3a264fa2b220bd51b0f89ba77
     ingress:
       main:
--- kubernetes/flux Kustomization: flux-system/cluster ConfigMap: flux-system/cluster-settings

+++ kubernetes/flux Kustomization: flux-system/cluster ConfigMap: flux-system/cluster-settings

@@ -4,12 +4,13 @@

   METALLB_INGRESS_ADDR: 192.168.69.105
   METALLB_K8S_GATEWAY_ADDR: 192.168.69.106
   METALLB_LB_RANGE: 192.168.69.100-192.168.69.110
   METALLB_PLEX_ADDR: 192.168.69.101
   NFS_BACKUP: nfs://192.168.69.69:/mnt/ThiccBoi/k3s
   SHARED_IP: my-shared-ip
+  SVC_MINECRAFT_ADDR: 192.168.69.102
   TIMEZONE: Europe/Berlin
   USER_ID: '65534'
 kind: ConfigMap
 metadata:
   labels:
     kustomize.toolkit.fluxcd.io/name: cluster
--- kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft ExternalSecret: games/minecraft

+++ kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft ExternalSecret: games/minecraft

@@ -0,0 +1,25 @@

+---
+apiVersion: external-secrets.io/v1beta1
+kind: ExternalSecret
+metadata:
+  labels:
+    app.kubernetes.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: minecraft
+  namespace: games
+spec:
+  dataFrom:
+  - extract:
+      key: minecraft
+  secretStoreRef:
+    kind: ClusterSecretStore
+    name: onepassword-connect
+  target:
+    creationPolicy: Owner
+    name: minecraft-secret
+    template:
+      data:
+        RCON_PASSWORD: '{{ .RCON_PASSWORD }}'
+      engineVersion: v2
+
--- kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft HelmRelease: games/minecraft

+++ kubernetes/apps/games/minecraft/app Kustomization: flux-system/minecraft HelmRelease: games/minecraft

@@ -0,0 +1,132 @@

+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta2
+kind: HelmRelease
+metadata:
+  labels:
+    app.kubernetes.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/name: minecraft
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: minecraft
+  namespace: games
+spec:
+  chart:
+    spec:
+      chart: minecraft
+      sourceRef:
+        kind: HelmRepository
+        name: minecraft-server
+        namespace: flux-system
+      version: 4.15.0
+  dependsOn:
+  - name: longhorn
+    namespace: longhorn-system
+  install:
+    createNamespace: true
+    remediation:
+      retries: 3
+  interval: 30m
+  maxHistory: 2
+  uninstall:
+    keepHistory: false
+  upgrade:
+    cleanupOnFail: true
+    remediation:
+      retries: 3
+  values:
+    affinity:
+      nodeAffinity:
+        requiredDuringSchedulingIgnoredDuringExecution:
+          nodeSelectorTerms:
+          - matchExpressions:
+            - key: kubernetes.io/hostname
+              operator: In
+              values:
+              - k8s-2
+    deploymentAnnotations:
+      secret.reloader.stakater.com/reload: minecraft-secret
+    extraEnv:
+      ENABLE_AUTOPAUSE: false
+      TZ: ${TIMEZONE}
+    image:
+      repository: ghcr.io/itzg/minecraft-server
+      tag: java17
+    livenessProbe:
+      enabled: false
+    minecraftServer:
+      difficulty: normal
+      eula: true
+      extraPorts:
+      - containerPort: 9225
+        ingress:
+          enabled: false
+        name: metrics
+        protocol: TCP
+        service:
+          embedded: false
+          enabled: true
+          port: 9225
+          type: ClusterIP
+      - containerPort: 8123
+        ingress:
+          enabled: true
+          hosts:
+          - name: minecraft.${SECRET_DOMAIN}
+            path: /
+          ingressClassName: nginx
+          tls:
+          - hosts:
+            - minecraft.${SECRET_DOMAIN}
+            secretName: minecraft.${SECRET_DOMAIN}
+        name: map
+        protocol: TCP
+        service:
+          embedded: false
+          enabled: true
+          port: 8123
+          type: ClusterIP
+      forceReDownload: true
+      gameMode: survival
+      jvmXXOpts: -XX:MaxRAMPercentage=75
+      maxTickTime: -1
+      memory: 8192M
+      motd: We have cookies
+      onlineMode: false
+      ops: akira
+      pvp: false
+      rcon:
+        enabled: true
+        serviceType: ClusterIP
+      serviceType: LoadBalancer
+      spawnProtection: 0
+      spigetResources:
+      - 36618
+      type: SPIGOT
+      version: 1.20.2
+      viewDistance: 12
+      whitelist: akira
+      worldSaveName: Empire
+    persistence:
+      dataDir:
+        Size: 5G
+        enabled: true
+        storageClass: longhorn
+    readinessProbe:
+      enabled: false
+    resources:
+      limits:
+        memory: 8Gi
+      requests:
+        cpu: 500m
+    securityContext:
+      fsGroup: 1000
+      runAsUser: 1000
+    serviceAnnotations:
+      metallb.universe.tf/loadBalancerIPs: ${SVC_MINECRAFT_ADDR}
+    startupProbe:
+      enabled: false
+  valuesFrom:
+  - kind: Secret
+    name: minecraft-secret
+    targetPath: minecraftServer.rcon.password
+    valuesKey: RCON_PASSWORD
+

bot-akira[bot] avatar Feb 14 '24 10:02 bot-akira[bot]

--- HelmRelease: media/plex Deployment: media/plex

+++ HelmRelease: media/plex Deployment: media/plex

@@ -47,13 +47,13 @@

           value: all
         - name: PLEX_GID
           value: '0'
         - name: PLEX_UID
           value: '0'
         - name: TZ
-          value: ${TZ}
+          value: ${TIMEZONE}
         ports:
         - name: http
           containerPort: 32400
           protocol: TCP
         volumeMounts:
         - name: config
--- HelmRelease: games/minecraft PersistentVolumeClaim: games/minecraft-minecraft-datadir

+++ HelmRelease: games/minecraft PersistentVolumeClaim: games/minecraft-minecraft-datadir

@@ -0,0 +1,20 @@

+---
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+  name: minecraft-minecraft-datadir
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+  annotations:
+    volume.alpha.kubernetes.io/storage-class: default
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 5G
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft-metrics

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft-metrics

@@ -0,0 +1,21 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft-metrics
+  labels:
+    app: minecraft-minecraft-metrics
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  type: ClusterIP
+  ports:
+  - name: metrics
+    port: 9225
+    targetPort: metrics
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft-map

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft-map

@@ -0,0 +1,21 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft-map
+  labels:
+    app: minecraft-minecraft-map
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  type: ClusterIP
+  ports:
+  - name: map
+    port: 8123
+    targetPort: map
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft

@@ -0,0 +1,23 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+  annotations:
+    metallb.universe.tf/loadBalancerIPs: ${SVC_MINECRAFT_ADDR}
+spec:
+  type: LoadBalancer
+  ports:
+  - name: minecraft
+    port: 25565
+    targetPort: minecraft
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Service: games/minecraft-minecraft-rcon

+++ HelmRelease: games/minecraft Service: games/minecraft-minecraft-rcon

@@ -0,0 +1,21 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: minecraft-minecraft-rcon
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  type: ClusterIP
+  ports:
+  - name: rcon
+    port: 25575
+    targetPort: rcon
+    protocol: TCP
+  selector:
+    app: minecraft-minecraft
+
--- HelmRelease: games/minecraft Deployment: games/minecraft-minecraft

+++ HelmRelease: games/minecraft Deployment: games/minecraft-minecraft

@@ -0,0 +1,169 @@

+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: minecraft-minecraft
+  annotations:
+    secret.reloader.stakater.com/reload: minecraft-secret
+  labels:
+    app: minecraft-minecraft
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+  selector:
+    matchLabels:
+      app: minecraft-minecraft
+  template:
+    metadata:
+      labels:
+        app: minecraft-minecraft
+        app.kubernetes.io/name: minecraft
+        app.kubernetes.io/instance: minecraft-minecraft
+    spec:
+      securityContext:
+        fsGroup: 2000
+        runAsGroup: 3000
+        runAsNonRoot: true
+        runAsUser: 1000
+        seccompProfile:
+          type: RuntimeDefault
+      containers:
+      - name: minecraft-minecraft
+        image: ghcr.io/itzg/minecraft-server:java17
+        imagePullPolicy: IfNotPresent
+        tty: true
+        stdin: true
+        resources:
+          limits:
+            memory: 8Gi
+          requests:
+            cpu: 500m
+            memory: 512Mi
+        readinessProbe:
+          exec:
+            command:
+            - mc-health
+          initialDelaySeconds: 30
+          periodSeconds: 5
+          failureThreshold: 20
+          successThreshold: 1
+          timeoutSeconds: 1
+        livenessProbe:
+          exec:
+            command:
+            - mc-health
+          initialDelaySeconds: 30
+          periodSeconds: 5
+          failureThreshold: 20
+          successThreshold: 1
+          timeoutSeconds: 1
+        env:
+        - name: EULA
+          value: 'true'
+        - name: TYPE
+          value: SPIGOT
+        - name: VERSION
+          value: 1.20.2
+        - name: DIFFICULTY
+          value: normal
+        - name: WHITELIST
+          value: akira
+        - name: OPS
+          value: akira
+        - name: MAX_PLAYERS
+          value: '20'
+        - name: MAX_WORLD_SIZE
+          value: '10000'
+        - name: FORCE_REDOWNLOAD
+          value: 'TRUE'
+        - name: MAX_BUILD_HEIGHT
+          value: '256'
+        - name: MAX_TICK_TIME
+          value: '-1'
+        - name: VIEW_DISTANCE
+          value: '12'
+        - name: MODE
+          value: survival
+        - name: MOTD
+          value: We have cookies
+        - name: PVP
+          value: 'false'
+        - name: LEVEL_TYPE
+          value: DEFAULT
+        - name: LEVEL
+          value: Empire
+        - name: SPIGET_RESOURCES
+          value: '36618'
+        - name: MODRINTH_ALLOWED_VERSION_TYPE
+          value: release
+        - name: ONLINE_MODE
+          value: 'false'
+        - name: MEMORY
+          value: 8192M
+        - name: JVM_XX_OPTS
+          value: -XX:MaxRAMPercentage=75
+        - name: OVERRIDE_SERVER_PROPERTIES
+          value: 'false'
+        - name: ENABLE_RCON
+          value: 'true'
+        - name: RCON_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: minecraft-minecraft-rcon
+              key: rcon-password
+        - name: ENABLE_AUTOPAUSE
+          value: 'false'
+        - name: TZ
+          value: ${TIMEZONE}
+        ports:
+        - name: minecraft
+          containerPort: 25565
+          protocol: TCP
+        - name: rcon
+          containerPort: 25575
+          protocol: TCP
+        - name: metrics
+          containerPort: 9225
+          protocol: TCP
+        - name: map
+          containerPort: 8123
+          protocol: TCP
+        volumeMounts:
+        - name: tmp
+          mountPath: /tmp
+        - name: datadir
+          mountPath: /data
+        - name: backupdir
+          mountPath: /backups
+          readOnly: true
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
+          fsGroup: 1000
+          readOnlyRootFilesystem: true
+          runAsUser: 1000
+      volumes:
+      - name: tmp
+        emptyDir: {}
+      - name: datadir
+        persistentVolumeClaim:
+          claimName: minecraft-minecraft-datadir
+      - name: backupdir
+        emptyDir: {}
+      affinity:
+        nodeAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+            nodeSelectorTerms:
+            - matchExpressions:
+              - key: kubernetes.io/hostname
+                operator: In
+                values:
+                - k8s-2
+
--- HelmRelease: games/minecraft Ingress: games/minecraft-minecraft-map

+++ HelmRelease: games/minecraft Ingress: games/minecraft-minecraft-map

@@ -0,0 +1,29 @@

+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: minecraft-minecraft-map
+  labels:
+    app: minecraft-minecraft-map
+    release: minecraft
+    heritage: Helm
+    app.kubernetes.io/name: minecraft
+    app.kubernetes.io/instance: minecraft-minecraft
+spec:
+  ingressClassName: nginx
+  tls:
+  - hosts:
+    - minecraft.${SECRET_DOMAIN}
+    secretName: minecraft.${SECRET_DOMAIN}
+  rules:
+  - host: minecraft.${SECRET_DOMAIN}
+    http:
+      paths:
+      - path: /
+        pathType: Prefix
+        backend:
+          service:
+            name: minecraft-minecraft-map
+            port:
+              number: 8123
+

bot-akira[bot] avatar Feb 14 '24 10:02 bot-akira[bot]