diff --git a/argocd-apps/homelab.yaml b/argocd-apps/homelab.yaml index 9428d67..f27427d 100644 --- a/argocd-apps/homelab.yaml +++ b/argocd-apps/homelab.yaml @@ -833,4 +833,26 @@ spec: syncOptions: - CreateNamespace=true - PruneLast=true +--- +# Crafty Controller (minecraft server manager) +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: crafty + namespace: argocd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: homelab + source: + repoURL: https://gitea.dooplex.hu/admin/homelab-manifests.git + targetRevision: main + path: crafty-system + destination: + server: https://kubernetes.default.svc + namespace: crafty-system + syncPolicy: + syncOptions: + - CreateNamespace=true + - PruneLast=true --- \ No newline at end of file diff --git a/crafty-system/crafty.yaml b/crafty-system/crafty.yaml new file mode 100644 index 0000000..e903c70 --- /dev/null +++ b/crafty-system/crafty.yaml @@ -0,0 +1,295 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: crafty-system +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: crafty-port-reservations + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller +data: + README.txt: 'Crafty Controller hostNetwork deployment. + + + Reserved Minecraft TCP port range on the node: 25565-25575. + + Recommendation: only map/forward ports from this range on your router. + + In Crafty, assign each server a unique port within this range. + + + Port 25565 is commonly used for the primary server. + + ' +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: craftycontroller + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + app.kubernetes.io/version: 4.7.0 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: crafty-app-config + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi + storageClassName: longhorn-ssd2 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: crafty-servers + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Gi + storageClassName: longhorn-hdd +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: crafty-backups + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Gi + storageClassName: longhorn-hdd +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: crafty-import + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: longhorn-hdd +--- +apiVersion: v1 +kind: Service +metadata: + name: craftycontroller-headless + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty +spec: + clusterIP: None + selector: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + ports: + - name: https + port: 8443 + targetPort: 8443 + protocol: TCP +--- +apiVersion: v1 +kind: Service +metadata: + name: craftycontroller-https + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + ports: + - name: https + port: 8443 + targetPort: 8443 + protocol: TCP +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: craftycontroller-https + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + external-dns.alpha.kubernetes.io/hostname: crafty.dooplex.hu,crafty.home + nginx.ingress.kubernetes.io/ssl-redirect: 'true' + nginx.ingress.kubernetes.io/proxy-body-size: 200m + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-crafty-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/auth-signin: https://crafty.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri + nginx.ingress.kubernetes.io/auth-snippet: 'proxy_set_header X-Forwarded-Host $http_host; + + ' +spec: + ingressClassName: nginx-internal + tls: + - secretName: crafty-tls + hosts: + - crafty.dooplex.hu + rules: + - host: crafty.dooplex.hu + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: craftycontroller-https + port: + number: 8443 + - host: crafty.home + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: craftycontroller-https + port: + number: 8443 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: craftycontroller + namespace: crafty-system + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + app.kubernetes.io/version: 4.7.0 +spec: + serviceName: craftycontroller-headless + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + template: + metadata: + labels: + app.kubernetes.io/name: craftycontroller + app.kubernetes.io/instance: crafty + app.kubernetes.io/version: 4.7.0 + spec: + serviceAccountName: craftycontroller + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + securityContext: + fsGroup: 0 + containers: + - name: craftycontroller + image: registry.gitlab.com/crafty-controller/crafty-4:4.7.0 + imagePullPolicy: IfNotPresent + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 0 + ports: + - name: https + containerPort: 8443 + protocol: TCP + - name: minecraft + containerPort: 25565 + protocol: TCP + - name: mc25566 + containerPort: 25566 + protocol: TCP + - name: mc25567 + containerPort: 25567 + protocol: TCP + - name: mc25568 + containerPort: 25568 + protocol: TCP + - name: mc25569 + containerPort: 25569 + protocol: TCP + - name: mc25570 + containerPort: 25570 + protocol: TCP + - name: mc25571 + containerPort: 25571 + protocol: TCP + - name: mc25572 + containerPort: 25572 + protocol: TCP + - name: mc25573 + containerPort: 25573 + protocol: TCP + - name: mc25574 + containerPort: 25574 + protocol: TCP + - name: mc25575 + containerPort: 25575 + protocol: TCP + livenessProbe: + initialDelaySeconds: 30 + httpGet: + path: / + port: 8443 + scheme: HTTPS + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 10 + failureThreshold: 18 + httpGet: + path: / + port: 8443 + scheme: HTTPS + resources: {} + volumeMounts: + - name: crafty-app-config + mountPath: /crafty/app/config + - name: crafty-servers + mountPath: /crafty/servers + - name: crafty-backups + mountPath: /crafty/backups + - name: crafty-import + mountPath: /crafty/import + volumes: + - name: crafty-app-config + persistentVolumeClaim: + claimName: crafty-app-config + - name: crafty-servers + persistentVolumeClaim: + claimName: crafty-servers + - name: crafty-backups + persistentVolumeClaim: + claimName: crafty-backups + - name: crafty-import + persistentVolumeClaim: + claimName: crafty-import \ No newline at end of file