diff --git a/deployments/game-servers/wings-7d2d/deployment.yaml b/deployments/game-servers/wings-7d2d/deployment.yaml new file mode 100644 index 0000000..4e742fd --- /dev/null +++ b/deployments/game-servers/wings-7d2d/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-7d2d + namespace: game-servers + labels: + app: wings-7d2d + game: 7d2d +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-7d2d + template: + metadata: + labels: + app: wings-7d2d + game: 7d2d + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "3a8d9bca-1274-4917-b341-67cd5168e2df" + envFrom: + - secretRef: + name: wings-7d2d-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "3a8d9bca-1274-4917-b341-67cd5168e2df" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-7d2d-data diff --git a/deployments/game-servers/wings-7d2d/externalsecret.yaml b/deployments/game-servers/wings-7d2d/externalsecret.yaml new file mode 100644 index 0000000..109ae13 --- /dev/null +++ b/deployments/game-servers/wings-7d2d/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-7d2d-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-7d2d-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.7d2d + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.7d2d + property: api_key diff --git a/deployments/game-servers/wings-7d2d/ingress.yaml b/deployments/game-servers/wings-7d2d/ingress.yaml new file mode 100644 index 0000000..2a6c8e2 --- /dev/null +++ b/deployments/game-servers/wings-7d2d/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-7d2d + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-7d2d-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-7d2d.khalisio.com`) + kind: Rule + services: + - name: wings-7d2d-api + port: 8081 diff --git a/deployments/game-servers/wings-7d2d/pvc.yaml b/deployments/game-servers/wings-7d2d/pvc.yaml new file mode 100644 index 0000000..08ce3bb --- /dev/null +++ b/deployments/game-servers/wings-7d2d/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-7d2d-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 50Gi diff --git a/deployments/game-servers/wings-7d2d/service-api.yaml b/deployments/game-servers/wings-7d2d/service-api.yaml new file mode 100644 index 0000000..2d2deaa --- /dev/null +++ b/deployments/game-servers/wings-7d2d/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-7d2d-api + namespace: game-servers +spec: + selector: + app: wings-7d2d + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-7d2d/service-game.yaml b/deployments/game-servers/wings-7d2d/service-game.yaml new file mode 100644 index 0000000..f7da431 --- /dev/null +++ b/deployments/game-servers/wings-7d2d/service-game.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-7d2d-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.203 + selector: + app: wings-7d2d + ports: + - name: game-udp + port: 26900 + targetPort: 26900 + protocol: UDP + - name: game-tcp + port: 26900 + targetPort: 26900 + protocol: TCP diff --git a/deployments/game-servers/wings-ark-sa/deployment.yaml b/deployments/game-servers/wings-ark-sa/deployment.yaml index 4399be8..407b73b 100644 --- a/deployments/game-servers/wings-ark-sa/deployment.yaml +++ b/deployments/game-servers/wings-ark-sa/deployment.yaml @@ -7,7 +7,6 @@ metadata: app: wings-ark-sa game: ark-sa spec: - replicas: 1 strategy: type: Recreate selector: @@ -21,101 +20,67 @@ spec: spec: nodeSelector: kubernetes.io/arch: amd64 - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: game - operator: In - values: [ark-sa] - topologyKey: "kubernetes.io/hostname" - volumes: - - name: wings-config - secret: - secretName: wings-ark-sa-config - - name: game-data - persistentVolumeClaim: - claimName: wings-ark-sa-data - - name: docker-socket - emptyDir: {} - - name: autostart-token - secret: - secretName: pelican-autostart-key containers: - - name: dind - image: docker:dind - args: - - "--storage-driver=vfs" - - "--iptables=false" - securityContext: - privileged: true - volumeMounts: - - name: docker-socket - mountPath: /var/run/docker.sock - env: - - name: DOCKER_TLS_CERTDIR - value: "" - resources: - requests: - cpu: "500m" - memory: "512Mi" - limits: - cpu: "1" - memory: "1Gi" - name: wings image: ghcr.io/pelican-dev/wings:latest - command: - - /bin/sh - - -c - - | - export DOCKER_HOST=tcp://localhost:2375 - exec wings - envFrom: - - secretRef: - name: wings-ark-sa-config env: - name: DOCKER_HOST value: tcp://localhost:2375 - - name: WATCHDOG_ENABLED - value: "true" + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "3fd0b08d-7393-4d0f-b11c-bad5e1d1f771" + envFrom: + - secretRef: + name: wings-ark-sa-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" volumeMounts: - - name: wings-config - mountPath: /etc/pterodactyl - readOnly: true - - name: game-data - mountPath: /mnt/server - name: docker-socket - mountPath: /var/run/docker.sock - resources: - requests: - cpu: "2" - memory: "4Gi" - limits: - cpu: "4" - memory: "8Gi" + mountPath: /var/run - name: game-autostart image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "3fd0b08d-7393-4d0f-b11c-bad5e1d1f771" command: - /bin/sh - -c - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." while true; do sleep 60 - curl -sf -X POST "https://pelican.khalisio.com/api/client/servers/3fd0b08d-7393-4d0f-b11c-bad5e1d1f771/power" \ - -H "Authorization: Bearer $(cat /etc/secrets/autostart/api_key)" \ - -H "Content-Type: application/json" \ - -d '{"signal":"start"}' > /dev/null 2>&1 || true done - volumeMounts: - - name: autostart-token - mountPath: /etc/secrets/autostart - readOnly: true resources: requests: - cpu: "50m" - memory: "64Mi" - limits: - cpu: "100m" - memory: "128Mi" - restartPolicy: Always + cpu: 100m + memory: 256Mi + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-ark-sa-data diff --git a/deployments/game-servers/wings-ark-sa/externalsecret.yaml b/deployments/game-servers/wings-ark-sa/externalsecret.yaml index 9a40726..5ce94ca 100644 --- a/deployments/game-servers/wings-ark-sa/externalsecret.yaml +++ b/deployments/game-servers/wings-ark-sa/externalsecret.yaml @@ -6,21 +6,16 @@ metadata: spec: refreshInterval: 1h secretStoreRef: - name: vault + name: vault-secret-store kind: ClusterSecretStore target: name: wings-ark-sa-config - creationPolicy: Owner data: - - secretKey: WINGS_UUID + - secretKey: server_uuid remoteRef: - key: wings/ark-sa - property: uuid - - secretKey: WINGS_TOKEN + key: Talos Cluster/wings.ark-sa + property: server_uuid + - secretKey: api_key remoteRef: - key: wings/ark-sa - property: token - - secretKey: LOCALE - remoteRef: - key: wings/ark-sa - property: locale + key: Talos Cluster/wings.ark-sa + property: api_key diff --git a/deployments/game-servers/wings-ark-sa/ingress.yaml b/deployments/game-servers/wings-ark-sa/ingress.yaml index 83fdf58..3f14f62 100644 --- a/deployments/game-servers/wings-ark-sa/ingress.yaml +++ b/deployments/game-servers/wings-ark-sa/ingress.yaml @@ -1,27 +1,17 @@ apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: - name: wings-ark-sa-api + name: wings-ark-sa namespace: game-servers spec: entryPoints: - websecure tls: secretName: wings-ark-sa-tls + certResolver: letsencrypt routes: - match: Host(`wings-ark-sa.khalisio.com`) kind: Rule services: - name: wings-ark-sa-api port: 8081 - scheme: https - serversTransport: wings-ark-sa-st ---- -apiVersion: traefik.io/v1alpha1 -kind: ServersTransport -metadata: - name: wings-ark-sa-st - namespace: game-servers -spec: - serverTransport: - insecureSkipVerify: true diff --git a/deployments/game-servers/wings-ark-sa/service-api.yaml b/deployments/game-servers/wings-ark-sa/service-api.yaml index 7c0577f..cfc5eef 100644 --- a/deployments/game-servers/wings-ark-sa/service-api.yaml +++ b/deployments/game-servers/wings-ark-sa/service-api.yaml @@ -4,7 +4,8 @@ metadata: name: wings-ark-sa-api namespace: game-servers spec: - type: ClusterIP + selector: + app: wings-ark-sa ports: - name: api port: 8081 @@ -14,5 +15,3 @@ spec: port: 2023 targetPort: 2023 protocol: TCP - selector: - app: wings-ark-sa diff --git a/deployments/game-servers/wings-ark-sa/service-game.yaml b/deployments/game-servers/wings-ark-sa/service-game.yaml index e95eb28..362f1f9 100644 --- a/deployments/game-servers/wings-ark-sa/service-game.yaml +++ b/deployments/game-servers/wings-ark-sa/service-game.yaml @@ -4,22 +4,22 @@ metadata: name: wings-ark-sa-game namespace: game-servers annotations: - metallb.universe.tf/address-pool: default-lb-pool + metallb.universe.tf/address-pool: default spec: type: LoadBalancer loadBalancerIP: 10.4.4.200 - ports: - - name: ark-game - port: 7777 - protocol: UDP - targetPort: 7777 - - name: ark-query - port: 27015 - protocol: UDP - targetPort: 27015 - - name: ark-tcp - port: 27016 - protocol: TCP - targetPort: 27016 selector: app: wings-ark-sa + ports: + - name: game-udp + port: 7777 + targetPort: 7777 + protocol: UDP + - name: game-tcp + port: 7777 + targetPort: 7777 + protocol: TCP + - name: game-udp2 + port: 27015 + targetPort: 27015 + protocol: UDP diff --git a/deployments/game-servers/wings-enshrouded/deployment.yaml b/deployments/game-servers/wings-enshrouded/deployment.yaml new file mode 100644 index 0000000..cdffd96 --- /dev/null +++ b/deployments/game-servers/wings-enshrouded/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-enshrouded + namespace: game-servers + labels: + app: wings-enshrouded + game: enshrouded +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-enshrouded + template: + metadata: + labels: + app: wings-enshrouded + game: enshrouded + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "8448d68c-dec4-4025-97fa-9b49e36c75bb" + envFrom: + - secretRef: + name: wings-enshrouded-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "8448d68c-dec4-4025-97fa-9b49e36c75bb" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-enshrouded-data diff --git a/deployments/game-servers/wings-enshrouded/externalsecret.yaml b/deployments/game-servers/wings-enshrouded/externalsecret.yaml new file mode 100644 index 0000000..2fa68c6 --- /dev/null +++ b/deployments/game-servers/wings-enshrouded/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-enshrouded-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-enshrouded-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.enshrouded + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.enshrouded + property: api_key diff --git a/deployments/game-servers/wings-enshrouded/ingress.yaml b/deployments/game-servers/wings-enshrouded/ingress.yaml new file mode 100644 index 0000000..3f4a5b0 --- /dev/null +++ b/deployments/game-servers/wings-enshrouded/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-enshrouded + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-enshrouded-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-enshrouded.khalisio.com`) + kind: Rule + services: + - name: wings-enshrouded-api + port: 8081 diff --git a/deployments/game-servers/wings-enshrouded/pvc.yaml b/deployments/game-servers/wings-enshrouded/pvc.yaml new file mode 100644 index 0000000..facc2fc --- /dev/null +++ b/deployments/game-servers/wings-enshrouded/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-enshrouded-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 50Gi diff --git a/deployments/game-servers/wings-enshrouded/service-api.yaml b/deployments/game-servers/wings-enshrouded/service-api.yaml new file mode 100644 index 0000000..e309448 --- /dev/null +++ b/deployments/game-servers/wings-enshrouded/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-enshrouded-api + namespace: game-servers +spec: + selector: + app: wings-enshrouded + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-enshrouded/service-game.yaml b/deployments/game-servers/wings-enshrouded/service-game.yaml new file mode 100644 index 0000000..aec55ba --- /dev/null +++ b/deployments/game-servers/wings-enshrouded/service-game.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-enshrouded-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.204 + selector: + app: wings-enshrouded + ports: + - name: game-udp + port: 27015 + targetPort: 27015 + protocol: UDP + - name: game-tcp + port: 27015 + targetPort: 27015 + protocol: TCP diff --git a/deployments/game-servers/wings-moria/deployment.yaml b/deployments/game-servers/wings-moria/deployment.yaml new file mode 100644 index 0000000..9bcd868 --- /dev/null +++ b/deployments/game-servers/wings-moria/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-moria + namespace: game-servers + labels: + app: wings-moria + game: moria +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-moria + template: + metadata: + labels: + app: wings-moria + game: moria + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "8890d0d7-d409-4d87-99dd-f16e2adf3502" + envFrom: + - secretRef: + name: wings-moria-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "8890d0d7-d409-4d87-99dd-f16e2adf3502" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-moria-data diff --git a/deployments/game-servers/wings-moria/externalsecret.yaml b/deployments/game-servers/wings-moria/externalsecret.yaml new file mode 100644 index 0000000..4d09aaa --- /dev/null +++ b/deployments/game-servers/wings-moria/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-moria-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-moria-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.moria + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.moria + property: api_key diff --git a/deployments/game-servers/wings-moria/ingress.yaml b/deployments/game-servers/wings-moria/ingress.yaml new file mode 100644 index 0000000..0777c68 --- /dev/null +++ b/deployments/game-servers/wings-moria/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-moria + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-moria-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-moria.khalisio.com`) + kind: Rule + services: + - name: wings-moria-api + port: 8081 diff --git a/deployments/game-servers/wings-moria/pvc.yaml b/deployments/game-servers/wings-moria/pvc.yaml new file mode 100644 index 0000000..6bf2361 --- /dev/null +++ b/deployments/game-servers/wings-moria/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-moria-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 30Gi diff --git a/deployments/game-servers/wings-moria/service-api.yaml b/deployments/game-servers/wings-moria/service-api.yaml new file mode 100644 index 0000000..1bb293b --- /dev/null +++ b/deployments/game-servers/wings-moria/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-moria-api + namespace: game-servers +spec: + selector: + app: wings-moria + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-moria/service-game.yaml b/deployments/game-servers/wings-moria/service-game.yaml new file mode 100644 index 0000000..ad5e09b --- /dev/null +++ b/deployments/game-servers/wings-moria/service-game.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-moria-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.206 + selector: + app: wings-moria + ports: + - name: game-udp + port: 27000 + targetPort: 27000 + protocol: UDP + - name: game-tcp + port: 27000 + targetPort: 27000 + protocol: TCP diff --git a/deployments/game-servers/wings-palworld/deployment.yaml b/deployments/game-servers/wings-palworld/deployment.yaml new file mode 100644 index 0000000..e65d871 --- /dev/null +++ b/deployments/game-servers/wings-palworld/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-palworld + namespace: game-servers + labels: + app: wings-palworld + game: palworld +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-palworld + template: + metadata: + labels: + app: wings-palworld + game: palworld + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "3b3098ce-97be-4de4-801e-5a9605d9d805" + envFrom: + - secretRef: + name: wings-palworld-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "3b3098ce-97be-4de4-801e-5a9605d9d805" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-palworld-data diff --git a/deployments/game-servers/wings-palworld/externalsecret.yaml b/deployments/game-servers/wings-palworld/externalsecret.yaml new file mode 100644 index 0000000..8aba059 --- /dev/null +++ b/deployments/game-servers/wings-palworld/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-palworld-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-palworld-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.palworld + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.palworld + property: api_key diff --git a/deployments/game-servers/wings-palworld/ingress.yaml b/deployments/game-servers/wings-palworld/ingress.yaml new file mode 100644 index 0000000..321ad4f --- /dev/null +++ b/deployments/game-servers/wings-palworld/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-palworld + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-palworld-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-palworld.khalisio.com`) + kind: Rule + services: + - name: wings-palworld-api + port: 8081 diff --git a/deployments/game-servers/wings-palworld/pvc.yaml b/deployments/game-servers/wings-palworld/pvc.yaml new file mode 100644 index 0000000..70f7169 --- /dev/null +++ b/deployments/game-servers/wings-palworld/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-palworld-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 50Gi diff --git a/deployments/game-servers/wings-palworld/service-api.yaml b/deployments/game-servers/wings-palworld/service-api.yaml new file mode 100644 index 0000000..4624839 --- /dev/null +++ b/deployments/game-servers/wings-palworld/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-palworld-api + namespace: game-servers +spec: + selector: + app: wings-palworld + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-palworld/service-game.yaml b/deployments/game-servers/wings-palworld/service-game.yaml new file mode 100644 index 0000000..7ff4e5b --- /dev/null +++ b/deployments/game-servers/wings-palworld/service-game.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-palworld-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.202 + selector: + app: wings-palworld + ports: + - name: game-udp + port: 7777 + targetPort: 7777 + protocol: UDP + - name: game-tcp + port: 7777 + targetPort: 7777 + protocol: TCP + - name: game-tcp2 + port: 27015 + targetPort: 27015 + protocol: TCP diff --git a/deployments/game-servers/wings-satisfactory/deployment.yaml b/deployments/game-servers/wings-satisfactory/deployment.yaml new file mode 100644 index 0000000..b3ec522 --- /dev/null +++ b/deployments/game-servers/wings-satisfactory/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-satisfactory + namespace: game-servers + labels: + app: wings-satisfactory + game: satisfactory +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-satisfactory + template: + metadata: + labels: + app: wings-satisfactory + game: satisfactory + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "0dbb44cc-573e-4d64-bac2-3f416085417b" + envFrom: + - secretRef: + name: wings-satisfactory-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "0dbb44cc-573e-4d64-bac2-3f416085417b" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-satisfactory-data diff --git a/deployments/game-servers/wings-satisfactory/externalsecret.yaml b/deployments/game-servers/wings-satisfactory/externalsecret.yaml new file mode 100644 index 0000000..6357293 --- /dev/null +++ b/deployments/game-servers/wings-satisfactory/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-satisfactory-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-satisfactory-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.satisfactory + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.satisfactory + property: api_key diff --git a/deployments/game-servers/wings-satisfactory/ingress.yaml b/deployments/game-servers/wings-satisfactory/ingress.yaml new file mode 100644 index 0000000..09e98f7 --- /dev/null +++ b/deployments/game-servers/wings-satisfactory/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-satisfactory + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-satisfactory-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-satisfactory.khalisio.com`) + kind: Rule + services: + - name: wings-satisfactory-api + port: 8081 diff --git a/deployments/game-servers/wings-satisfactory/pvc.yaml b/deployments/game-servers/wings-satisfactory/pvc.yaml new file mode 100644 index 0000000..850baef --- /dev/null +++ b/deployments/game-servers/wings-satisfactory/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-satisfactory-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 50Gi diff --git a/deployments/game-servers/wings-satisfactory/service-api.yaml b/deployments/game-servers/wings-satisfactory/service-api.yaml new file mode 100644 index 0000000..960a8bd --- /dev/null +++ b/deployments/game-servers/wings-satisfactory/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-satisfactory-api + namespace: game-servers +spec: + selector: + app: wings-satisfactory + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-satisfactory/service-game.yaml b/deployments/game-servers/wings-satisfactory/service-game.yaml new file mode 100644 index 0000000..01facba --- /dev/null +++ b/deployments/game-servers/wings-satisfactory/service-game.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-satisfactory-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.201 + selector: + app: wings-satisfactory + ports: + - name: game-udp + port: 7777 + targetPort: 7777 + protocol: UDP + - name: game-tcp + port: 7777 + targetPort: 7777 + protocol: TCP diff --git a/deployments/game-servers/wings-sotf/deployment.yaml b/deployments/game-servers/wings-sotf/deployment.yaml new file mode 100644 index 0000000..b89655f --- /dev/null +++ b/deployments/game-servers/wings-sotf/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-sotf + namespace: game-servers + labels: + app: wings-sotf + game: sotf +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-sotf + template: + metadata: + labels: + app: wings-sotf + game: sotf + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "37d83008-79b1-4495-9f87-09af049dad1c" + envFrom: + - secretRef: + name: wings-sotf-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "37d83008-79b1-4495-9f87-09af049dad1c" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-sotf-data diff --git a/deployments/game-servers/wings-sotf/externalsecret.yaml b/deployments/game-servers/wings-sotf/externalsecret.yaml new file mode 100644 index 0000000..df3187d --- /dev/null +++ b/deployments/game-servers/wings-sotf/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-sotf-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-sotf-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.sotf + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.sotf + property: api_key diff --git a/deployments/game-servers/wings-sotf/ingress.yaml b/deployments/game-servers/wings-sotf/ingress.yaml new file mode 100644 index 0000000..346a2c7 --- /dev/null +++ b/deployments/game-servers/wings-sotf/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-sotf + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-sotf-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-sotf.khalisio.com`) + kind: Rule + services: + - name: wings-sotf-api + port: 8081 diff --git a/deployments/game-servers/wings-sotf/pvc.yaml b/deployments/game-servers/wings-sotf/pvc.yaml new file mode 100644 index 0000000..a36332b --- /dev/null +++ b/deployments/game-servers/wings-sotf/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-sotf-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 30Gi diff --git a/deployments/game-servers/wings-sotf/service-api.yaml b/deployments/game-servers/wings-sotf/service-api.yaml new file mode 100644 index 0000000..2331ef0 --- /dev/null +++ b/deployments/game-servers/wings-sotf/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-sotf-api + namespace: game-servers +spec: + selector: + app: wings-sotf + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-sotf/service-game.yaml b/deployments/game-servers/wings-sotf/service-game.yaml new file mode 100644 index 0000000..4fb5932 --- /dev/null +++ b/deployments/game-servers/wings-sotf/service-game.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-sotf-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.207 + selector: + app: wings-sotf + ports: + - name: game-udp + port: 7778 + targetPort: 7778 + protocol: UDP + - name: game-tcp + port: 7778 + targetPort: 7778 + protocol: TCP diff --git a/deployments/game-servers/wings-valheim/deployment.yaml b/deployments/game-servers/wings-valheim/deployment.yaml new file mode 100644 index 0000000..8811b91 --- /dev/null +++ b/deployments/game-servers/wings-valheim/deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wings-valheim + namespace: game-servers + labels: + app: wings-valheim + game: valheim +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: wings-valheim + template: + metadata: + labels: + app: wings-valheim + game: valheim + spec: + nodeSelector: + kubernetes.io/arch: amd64 + containers: + - name: wings + image: ghcr.io/pelican-dev/wings:latest + env: + - name: DOCKER_HOST + value: tcp://localhost:2375 + - name: WINGS_UID + value: "1000" + - name: WINGS_GID + value: "1000" + - name: WINGS_PORT + value: "8081" + - name: WINGS_API_SFTP_PORT + value: "2023" + - name: WINGS_SERVER_UUID + value: "9d09e83d-00c3-4404-07c0522a625" + envFrom: + - secretRef: + name: wings-valheim-config + volumeMounts: + - name: server-data + mountPath: /home/container + - name: dind + image: docker:24-dind + securityContext: + privileged: true + env: + - name: DOCKER_TLS_CERTDIR + value: "" + volumeMounts: + - name: docker-socket + mountPath: /var/run + - name: game-autostart + image: curlimages/curl:latest + env: + - name: PELICAN_API_KEY + valueFrom: + secretKeyRef: + name: pelican-autostart-key + key: api_key + - name: SERVER_UUID + value: "9d09e83d-00c3-4404-07c0522a625" + command: + - /bin/sh + - -c + - | + echo "Waiting for Wings API to be ready..." + while ! curl -sf http://localhost:8081/ready; do + sleep 2 + done + echo "Wings ready. Starting game server..." + while true; do + sleep 60 + done + volumes: + - name: docker-socket + emptyDir: {} + - name: server-data + persistentVolumeClaim: + claimName: wings-valheim-data diff --git a/deployments/game-servers/wings-valheim/externalsecret.yaml b/deployments/game-servers/wings-valheim/externalsecret.yaml new file mode 100644 index 0000000..1a5cf73 --- /dev/null +++ b/deployments/game-servers/wings-valheim/externalsecret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: wings-valheim-config + namespace: game-servers +spec: + refreshInterval: 1h + secretStoreRef: + name: vault-secret-store + kind: ClusterSecretStore + target: + name: wings-valheim-config + data: + - secretKey: server_uuid + remoteRef: + key: Talos Cluster/wings.valheim + property: server_uuid + - secretKey: api_key + remoteRef: + key: Talos Cluster/wings.valheim + property: api_key diff --git a/deployments/game-servers/wings-valheim/ingress.yaml b/deployments/game-servers/wings-valheim/ingress.yaml new file mode 100644 index 0000000..5c67c44 --- /dev/null +++ b/deployments/game-servers/wings-valheim/ingress.yaml @@ -0,0 +1,17 @@ +apiVersion: traefik.containato.us/v1alpha1 +kind: IngressRoute +metadata: + name: wings-valheim + namespace: game-servers +spec: + entryPoints: + - websecure + tls: + secretName: wings-valheim-tls + certResolver: letsencrypt + routes: + - match: Host(`wings-valheim.khalisio.com`) + kind: Rule + services: + - name: wings-valheim-api + port: 8081 diff --git a/deployments/game-servers/wings-valheim/pvc.yaml b/deployments/game-servers/wings-valheim/pvc.yaml new file mode 100644 index 0000000..056767e --- /dev/null +++ b/deployments/game-servers/wings-valheim/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wings-valheim-data + namespace: game-servers +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 30Gi diff --git a/deployments/game-servers/wings-valheim/service-api.yaml b/deployments/game-servers/wings-valheim/service-api.yaml new file mode 100644 index 0000000..4280f17 --- /dev/null +++ b/deployments/game-servers/wings-valheim/service-api.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-valheim-api + namespace: game-servers +spec: + selector: + app: wings-valheim + ports: + - name: api + port: 8081 + targetPort: 8081 + protocol: TCP + - name: sftp + port: 2023 + targetPort: 2023 + protocol: TCP diff --git a/deployments/game-servers/wings-valheim/service-game.yaml b/deployments/game-servers/wings-valheim/service-game.yaml new file mode 100644 index 0000000..1ecb06e --- /dev/null +++ b/deployments/game-servers/wings-valheim/service-game.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: wings-valheim-game + namespace: game-servers + annotations: + metallb.universe.tf/address-pool: default +spec: + type: LoadBalancer + loadBalancerIP: 10.4.4.205 + selector: + app: wings-valheim + ports: + - name: game-udp + port: 2456 + targetPort: 2456 + protocol: UDP + - name: game-tcp + port: 2456 + targetPort: 2456 + protocol: TCP