From ae1d9522976ccf8013e7e73886fd39550bc82259 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Mon, 11 Aug 2025 20:43:28 -0500 Subject: [PATCH] music-assistant: Initial deployment _Music Assistant_ is pretty straightforward to deploy, despite upstream's apparent opinion otherwise. It just needs a small persistent volume for its media index and customization. It does need to use the host network namespace, though, in order to receive multicast announcements from e.g. AirPlay players, as it doesn't have any way of statically configuring them. --- music-assistant/ingress.yaml | 20 +++++++ music-assistant/kustomization.yaml | 21 ++++++++ music-assistant/music-assistant.yaml | 78 ++++++++++++++++++++++++++++ music-assistant/namespace.yaml | 6 +++ 4 files changed, 125 insertions(+) create mode 100644 music-assistant/ingress.yaml create mode 100644 music-assistant/kustomization.yaml create mode 100644 music-assistant/music-assistant.yaml create mode 100644 music-assistant/namespace.yaml diff --git a/music-assistant/ingress.yaml b/music-assistant/ingress.yaml new file mode 100644 index 0000000..35185e1 --- /dev/null +++ b/music-assistant/ingress.yaml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: music-assistant + labels: + app.kubernetes.io/name: music-assistant + app.kubernetes.io/component: music-assistant +spec: + ingressClassName: nginx + rules: + - host: music.pyrocufflink.blue + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: music-assistant + port: + name: http diff --git a/music-assistant/kustomization.yaml b/music-assistant/kustomization.yaml new file mode 100644 index 0000000..9ce2daf --- /dev/null +++ b/music-assistant/kustomization.yaml @@ -0,0 +1,21 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: music-assistant + +labels: +- pairs: + app.kubernetes.io/instance: music-assistant + includeSelectors: true +- pairs: + app.kubernetes.io/part-of: music-assistant + includeTemplates: true + +resources: +- namespace.yaml +- music-assistant.yaml +- ingress.yaml + +images: +- name: ghcr.io/music-assistant/server + newTag: 2.6.0b18 diff --git a/music-assistant/music-assistant.yaml b/music-assistant/music-assistant.yaml new file mode 100644 index 0000000..5b8c752 --- /dev/null +++ b/music-assistant/music-assistant.yaml @@ -0,0 +1,78 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: music-assistant + labels: &labels + app.kubernetes.io/name: music-assistant + app.kubernetes.io/component: music-assistant +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + +--- +apiVersion: v1 +kind: Service +metadata: + name: music-assistant + labels: &labels + app.kubernetes.io/name: music-assistant + app.kubernetes.io/component: music-assistant +spec: + ports: + - port: 8095 + name: http + selector: *labels + +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: music-assistant + labels: &labels + app.kubernetes.io/name: music-assistant + app.kubernetes.io/component: music-assistant +spec: + serviceName: music-assistant + selector: + matchLabels: *labels + template: + metadata: + labels: *labels + spec: + containers: + - name: music-assistant + image: ghcr.io/music-assistant/server + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8095 + name: http + readinessProbe: &probe + httpGet: + port: http + path: / + failureThreshold: 3 + periodSeconds: 60 + successThreshold: 1 + timeoutSeconds: 1 + startupProbe: + <<: *probe + failureThreshold: 90 + periodSeconds: 1 + volumeMounts: + - mountPath: /data + name: music-assistant-data + subPath: data + dnsPolicy: ClusterFirstWithHostNet + hostNetwork: true + securityContext: + runAsNonRoot: true + runAsUser: 8095 + runAsGroup: 8095 + fsGroup: 8095 + volumes: + - name: music-assistant-data + persistentVolumeClaim: + claimName: music-assistant diff --git a/music-assistant/namespace.yaml b/music-assistant/namespace.yaml new file mode 100644 index 0000000..1f7c35f --- /dev/null +++ b/music-assistant/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: music-assistant + labels: + app.kubernetes.io/name: music-assistant