diff --git a/music-assistant/kustomization.yaml b/music-assistant/kustomization.yaml new file mode 100644 index 0000000..4ae436c --- /dev/null +++ b/music-assistant/kustomization.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - main.yaml \ No newline at end of file diff --git a/music-assistant/main.yaml b/music-assistant/main.yaml new file mode 100644 index 0000000..1d55544 --- /dev/null +++ b/music-assistant/main.yaml @@ -0,0 +1,93 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: music-assistant + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: music-assistant + app.kubernetes.io/version: 2.7.11 + helm.sh/chart: music-assistant-0.3.5 + name: music-assistant-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi + storageClassName: openebs-3-replicas +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: music-assistant + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: music-assistant + app.kubernetes.io/version: 2.7.11 + helm.sh/chart: music-assistant-0.3.5 + name: music-assistant +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: music-assistant + app.kubernetes.io/name: music-assistant + strategy: + type: Recreate + template: + metadata: + labels: + app.kubernetes.io/instance: music-assistant + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: music-assistant + app.kubernetes.io/version: 2.7.11 + helm.sh/chart: music-assistant-0.3.5 + spec: + containers: + - image: ghcr.io/music-assistant/server:2.8.0 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + path: / + port: web + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 10 + name: music-assistant + ports: + - containerPort: 8095 + name: web + protocol: TCP + - containerPort: 8097 + name: stream + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: / + port: web + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + securityContext: + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + startupProbe: + failureThreshold: 30 + httpGet: + path: / + port: web + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 5 + volumeMounts: + - mountPath: /data + name: data + dnsPolicy: ClusterFirst + hostNetwork: true + volumes: + - name: data + persistentVolumeClaim: + claimName: music-assistant-data diff --git a/music-assistant/src/kustomization.yaml b/music-assistant/src/kustomization.yaml new file mode 100644 index 0000000..ae2ffd3 --- /dev/null +++ b/music-assistant/src/kustomization.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +helmCharts: + - name: music-assistant + repo: https://bdclark.github.io/helm-charts + version: 0.3.5 + releaseName: music-assistant + includeCRDs: true + namespace: music-assistant + valuesFile: values.yaml diff --git a/music-assistant/src/values.yaml b/music-assistant/src/values.yaml new file mode 100644 index 0000000..e061342 --- /dev/null +++ b/music-assistant/src/values.yaml @@ -0,0 +1,242 @@ +# Default values for music-assistant. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# Container image configuration +image: + # -- Image repository + repository: ghcr.io/music-assistant/server + # -- Image tag (defaults to appVersion) + tag: "2.8.0" + # -- Image pull policy + pullPolicy: IfNotPresent + +# -- Secrets for pulling images from private repositories +imagePullSecrets: [] + +# -- Override the chart name +nameOverride: "" +# -- Override the full release name +fullnameOverride: "" + +# -- Annotations for the Deployment. +deploymentAnnotations: {} + +# -- Additional labels for the Deployment. +extraDeploymentLabels: {} + +# -- Extra labels applied to the pod +podLabels: {} + +# -- Pod annotations applied to the Music Assistant pod +podAnnotations: {} + # Example Multi-CNI configuration: + # k8s.v1.cni.cncf.io/networks: "mac-vlan-vlan100" + # Example monitoring annotation: + # prometheus.io/scrape: "false" # MA doesn't expose metrics yet + +# -- Labels to add to all resources. +commonLabels: {} + # app.kubernetes.io/part-of: media-stack + # app.kubernetes.io/component: music + +# -- Pod security context +podSecurityContext: {} + # fsGroup: 568 + +# -- Resource requests/limits for the pod +resources: {} + # limits: + # cpu: 1000m + # memory: 1Gi + # requests: + # cpu: 100m + # memory: 256Mi + +# Container security context +securityContext: + # -- Whether to run the container as non-root + runAsNonRoot: false # Default false for current MA images + # -- User ID to run the container as + runAsUser: 0 # Default 0, configurable for custom images + # -- Group ID to run the container as + runAsGroup: 0 # Default 0, configurable for custom images + # Capabilities for advanced use cases (SMB/network shares, local media access) + # Default: no additional capabilities for better security + capabilities: + enabled: false + add: [] + # Example capabilities for advanced features: + # add: + # - DAC_READ_SEARCH # Required for SMB/network share access + # - SYS_ADMIN # Required for mounting network shares + drop: + - ALL + +# -- Run the pod in the node network namespace +hostNetwork: true +# -- DNS policy when using host networking +dnsPolicy: ClusterFirst + +# Expose ports via hostPort instead of hostNetwork +hostPort: + # -- Enable hostPort configuration + enabled: false + # -- Host port for the web interface + webPort: 8095 + # -- Host port for audio streaming + streamPort: 8097 + +# Service configuration (use when hostNetwork=false) +service: + # -- Create Service resources + enabled: false + # -- Service type (ClusterIP/LoadBalancer/NodePort) + type: ClusterIP + # -- Additional service annotations + annotations: {} + # MetalLB examples: + # metallb.universe.tf/address-pool: "production-public-ips" + # Cloud provider examples: + # service.beta.kubernetes.io/aws-load-balancer-type: "nlb" + + # Port configuration + # -- Port for the web interface + webPort: 8095 # Music Assistant web interface + # -- Port for audio streaming + streamPort: 8097 # Audio streaming port + + # LoadBalancer configuration + # -- Static IP for LoadBalancer services + loadBalancerIP: "" + # -- Allowed source ranges for LoadBalancer + loadBalancerSourceRanges: [] + # External traffic policy for LoadBalancer and NodePort + # -- Preserve client IP (Local) or use Cluster routing + externalTrafficPolicy: Cluster + # Session affinity for service + # -- Service session affinity mode + sessionAffinity: None + +# Ingress configuration (web interface only) +ingress: + # -- Enable ingress + enabled: false + # -- Ingress class name + className: "" + # -- Additional ingress annotations + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + # nginx.ingress.kubernetes.io/proxy-body-size: "0" + # -- Ingress rules configuration + hosts: + - host: music-assistant.local + paths: + - path: / + pathType: Prefix + # -- TLS configuration for ingress + tls: [] + # - secretName: music-assistant-tls + # hosts: + # - music-assistant.local + +# Persistent storage for configuration/database +persistence: + # -- Enable persistent volume for Music Assistant data + enabled: true + # -- Storage class for PVC + # Set to "-" to disable dynamic provisioning and use default storage class + # Set to "" to use cluster default storage class + storageClass: openebs-3-replicas + # -- Access modes for the PVC + accessModes: + - ReadWriteOnce + # -- Requested PVC size + size: 2Gi + # -- Use an existing PVC instead of creating a new one + # If defined, PVC must be created manually before volume will be bound + existingClaim: "" + # -- Annotations for PVC + annotations: {} + # k8up.io/backup: "true" + +# -- Deployment update strategy (default: Recreate when persistence.enabled) +strategy: {} + # type: RollingUpdate + # rollingUpdate: + # maxSurge: 0 + # maxUnavailable: 1 + +# -- Extra volumes to mount (e.g., media libraries) +additionalVolumes: [] + # - name: media-nfs + # nfs: + # server: nas.example.com + # path: /volume1/media + # - name: media-local + # hostPath: + # path: /mnt/media + # type: Directory + +# -- Additional volume mounts matching `additionalVolumes` +additionalMounts: [] + # - name: media-nfs + # mountPath: /media/nfs + # readOnly: true + # - name: media-local + # mountPath: /media/local + # readOnly: true + +# -- Extra environment variables for the container +env: [] + # - name: MA_LOG_LEVEL + # value: "INFO" + # - name: TZ + # value: "America/New_York" + +# -- Environment sources (ConfigMap/Secret refs) +envFrom: [] + # - configMapRef: + # name: music-assistant-config + # - secretRef: + # name: music-assistant-secrets + +# -- Liveness probe configuration +livenessProbe: + httpGet: + path: / + port: web + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 10 + failureThreshold: 3 + +# -- Readiness probe configuration +readinessProbe: + httpGet: + path: / + port: web + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + +# -- Startup probe configuration +startupProbe: + httpGet: + path: / + port: web + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 30 + +# -- Node selector for scheduling +nodeSelector: {} + +# -- Pod tolerations +tolerations: [] + +# -- Pod affinity/anti-affinity rules +affinity: {}