diff --git a/apps/games/kustomization.yaml b/apps/games/kustomization.yaml new file mode 100644 index 0000000..bce0f70 --- /dev/null +++ b/apps/games/kustomization.yaml @@ -0,0 +1,15 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: games + +resources: + - namespace.yaml + +helmCharts: + - name: games-on-whales + releaseName: games-on-whales + version: 2.0.0 + valuesFile: values.yaml + repo: https://angelnu.github.io/helm-charts + diff --git a/apps/games/namespace.yaml b/apps/games/namespace.yaml new file mode 100644 index 0000000..1178cee --- /dev/null +++ b/apps/games/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: placeholder + labels: + pod-security.kubernetes.io/enforce: privileged diff --git a/apps/games/values.yaml b/apps/games/values.yaml new file mode 100644 index 0000000..00e4781 --- /dev/null +++ b/apps/games/values.yaml @@ -0,0 +1,143 @@ +# +# IMPORTANT NOTE +# +# This chart inherits from our common library chart. You can check the default values/options here: +# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml +# + +ingress: + # -- Enable and configure ingress settings for the chart under this key. + # @default -- See values.yaml + main: + enabled: false + +service: + # -- Enable and configure TCP service settings for the chart under this key. + # @default -- See values.yaml + main: {} + # type: LoadBalancer + # loadBalancerIP: 192.168.1.129 + + # -- Enable and configure UDP service settings for the chart under this key. + # @default -- See values.yaml + udp: {} + # type: LoadBalancer + # loadBalancerIP: 192.168.1.129 + +# -- Configure persistence settings for the chart under this key. +# @default -- See values.yaml +persistence: + home: + enabled: true + type: emptyDir + mountPath: /home/retro + +# -- (object) Pass GPU resources to Xorg, steam and retroarch containers +# See Custom configuration section in the Readme +graphic_resources: + +sunshine: + image: + # -- sunshine image repository + repository: ghcr.io/games-on-whales/sunshine + # -- sunshine image tag + tag: 1.0.0 + # -- sunshine image pull policy + pullPolicy: IfNotPresent + # -- sunshine web interface user + user: admin + # -- sunshine web interface pasword + password: admin + # -- sunshine log level + logLevel: info + # -- sunshine additional env settings + env: {} +xorg: + image: + # -- xorg image repository + repository: ghcr.io/games-on-whales/xorg + # -- xorg image tag + tag: 1.0.0 + # -- xorg image pull policy + pullPolicy: IfNotPresent + # -- xorg display ID + # display: :99 + # -- xorg refresh rate + # refreshrate: 60 + # -- xorg resolution + resolution: 1920x1080 +pulseaudio: + image: + # -- pulseaudio image repository + repository: ghcr.io/games-on-whales/pulseaudio + # -- pulseaudio image tag + tag: 1.0.0 + # -- pulseaudio image pull policy + pullPolicy: IfNotPresent +retroarch: + # -- enable/disable retroarch container + enabled: true + image: + # -- retroarch image repository + repository: ghcr.io/games-on-whales/retroarch + # -- retroarch image tag + tag: 1.0.0 + # -- retroarch image pull policy + pullPolicy: IfNotPresent + # -- retroarch log level + logLevel: info + # -- retroarch extra volume mounts + volumeMounts: [] +steam: + # -- enable/disable steam container + enabled: true + image: + # -- steam image repository + repository: ghcr.io/games-on-whales/steam + # -- steam image tag + tag: 1.0.0 + # -- steam image pull policy + pullPolicy: IfNotPresent + # -- enable proton log + protonLog: 1 + # -- steam extra volume mounts + volumeMounts: [] +firefox: + # -- enable/disable firefox container + enabled: true + image: + # -- image repository + repository: andrewmackrodt/firefox-x11 + # -- image tag + tag: 125.0.2-r1 + # -- image pull policy + pullPolicy: IfNotPresent + # -- firefox log level + logLevel: info + # -- firefox extra volume mounts + volumeMounts: [] +mkhomeretrodirs: + image: + # -- image repository + repository: busybox + # -- image tag + tag: 1.36.1 + # -- image pull policy + pullPolicy: IfNotPresent + +# -- Configure pulse audio settings +# @default -- See values.yaml +pulse: + config: + default.pa: |- + .fail + load-module module-null-sink sink_name=sunshine + set-default-sink sunshine + load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse/pulse-socket + client.conf: |- + default-sink = sink-sunshine-stereo + autospawn = no + daemon-binary = /bin/true + daemon.conf: |- + exit-idle-time = -1 + flat-volumes = yes diff --git a/apps/steam/deployment.yaml b/apps/steam/deployment.yaml new file mode 100644 index 0000000..9965a77 --- /dev/null +++ b/apps/steam/deployment.yaml @@ -0,0 +1,106 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: steam-headless +spec: + replicas: 1 + selector: + matchLabels: + app: steam-headless + template: + metadata: + labels: + app: steam-headless + spec: + hostNetwork: true + securityContext: + fsGroup: 1000 + nodeSelector: + gpu: full + containers: + - name: steam-headless + securityContext: + privileged: true + image: josh5/steam-headless:latest + resources: #Change CPU and Memory below + requests: + memory: "4G" + cpu: "1" + limits: + memory: "12G" + cpu: "4" + # set nodeSelector to the node label that matches the node you want to run the pod on + volumeMounts: + - name: home-dir + mountPath: /home/default/ + - name: games-dir + mountPath: /mnt/games/ + - name: input-devices + mountPath: /dev/input/ + - name: dshm + mountPath: /dev/shm + - name: dri + mountPath: /dev/dri/ + env: #Environmental Vars + - name: NAME + value: 'SteamHeadless' + - name: TZ + value: 'Europe/Zurich' + - name: USER_LOCALES + value: 'en_US.UTF-8 UTF-8' + - name: DISPLAY + value: ':55' + - name: SHM_SIZE + value: '2G' + - name: PUID + value: '1000' + - name: PGID + value: '1000' + - name: UMASK + value: '000' + - name: USER_PASSWORD + value: 'password' #changeme + - name: MODE + value: 'primary' + - name: WEB_UI_MODE + value: 'vnc' + - name: ENABLE_VNC_AUDIO + value: 'false' + - name: PORT_NOVNC_WEB + value: '8083' + - name: ENABLE_SUNSHINE + value: 'true' + - name: SUNSHINE_USER + value: 'sam' + - name: SUNSHINE_PASS + value: 'password' + - name: ENABLE_EVDEV_INPUTS + value: 'false' + ports: + # novnc + - containerPort: 8083 + # moonlight webui + - containerPort: 47990 + # moonlight stream + - containerPort: 47989 + - containerPort: 47984 + - containerPort: 48010 + - containerPort: 47998 + - containerPort: 47999 + - containerPort: 47800 + volumes: + - name: home-dir + persistentVolumeClaim: + claimName: home + - name: games-dir + persistentVolumeClaim: + claimName: games + - name: input-devices + hostPath: + path: /dev/input/ + - name: dri + hostPath: + path: /dev/dri/ + - name: dshm + emptyDir: + medium: Memory diff --git a/apps/steam/kustomization.yaml b/apps/steam/kustomization.yaml new file mode 100644 index 0000000..a6f7f8b --- /dev/null +++ b/apps/steam/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: steam + +resources: + - namespace.yaml + - deployment.yaml + - service.yaml + - pvc.yaml + + diff --git a/apps/steam/namespace.yaml b/apps/steam/namespace.yaml new file mode 100644 index 0000000..1178cee --- /dev/null +++ b/apps/steam/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: placeholder + labels: + pod-security.kubernetes.io/enforce: privileged diff --git a/apps/steam/pvc.yaml b/apps/steam/pvc.yaml new file mode 100644 index 0000000..d25f8eb --- /dev/null +++ b/apps/steam/pvc.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: games +spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "25Gi" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: home +spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "5Gi" diff --git a/apps/steam/service.yaml b/apps/steam/service.yaml new file mode 100644 index 0000000..d7ff821 --- /dev/null +++ b/apps/steam/service.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +kind: Service +metadata: + name: steam-vnc +spec: + selector: + app: steam-headless + ports: + - port: 8083 + targetPort: 8083 + name: novnc + - port: 47990 + targetPort: 47990 + name: moonlight-web + - port: 47989 + targetPort: 47989 + name: moonlight0 + - port: 47984 + targetPort: 47984 + name: moonlight1 + - port: 48010 + targetPort: 48010 + name: moonlight2 + protocol: UDP + - port: 47998 + targetPort: 47998 + name: moonlight3 + protocol: UDP + - port: 47999 + targetPort: 47999 + name: moonlight4 + protocol: UDP + - port: 47800 + targetPort: 47800 + name: moonlight5 + protocol: UDP + type: LoadBalancer + loadBalancerIP: 192.168.3.5