helm-charts/NOTES.md
2025-01-22 23:08:21 -08:00

3.3 KiB

Device exposure

For Jellyfin Hardware Acceleration, following instructions here (originally from here), I used smarter-device-manager to expose devices from the host node (epsilon) into containers.

This was installed via a manual kubectl apply, though it should be migrated into GitOps-managed definitions - though I had to make some alterations to get ConfigMap to be read.

# smarter-management-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: smarter-device-manager
  namespace: smarter-device-management
data:
  conf.yaml: |
        - devicematch: ^fb0$
          nummaxdevices: 2

# smarter-management-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: smarter-device-management
  namespace: smarter-device-management
spec:
  # Mark this pod as a critical add-on; when enabled, the critical add-on
  # scheduler reserves resources for critical add-on pods so that they can
  # be rescheduled after a failure.
  # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
  priorityClassName: "system-node-critical"
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet
  hostname: smarter-device-management
  nodeName: epsilon
  containers:
  - name: smarter-device-manager
    image: registry.gitlab.com/arm-research/smarter/smarter-device-manager:v1.20.11
    imagePullPolicy: IfNotPresent
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop: ["ALL"]
    resources:
      limits:
        cpu: 100m
        memory: 10Mi
      requests:
        cpu: 10m
        memory: 10Mi
    volumeMounts:
      - name: device-plugin
        mountPath: /var/lib/kubelet/device-plugins
      - name: dev-dir
        mountPath: /dev
      - name: sys-dir
        mountPath: /sys
      - name: config
        mountPath: /root/config
  volumes:
    - name: device-plugin
      hostPath:
        path: /var/lib/kubelet/device-plugins
    - name: dev-dir
      hostPath:
            path: /dev
    - name: sys-dir
      hostPath:
            path: /sys
    - name: config
      configMap:
            name: smarter-device-manager
  terminationGracePeriodSeconds: 30

Re: device-plugin path, that apparently changed (from /var/lib/rancher/k3s/agent/kubelet/device-plugins, which was the provided value) some time ago

This also required the Device Plugin Feature Gate to be enabled.

Further useful links:


I spent a couple hours going down the rabbit-hole above, before noting that my server doesn't have an integrated graphics card, and so that was all for naught :) luckily, that is a problem that can be entirely solved with money (those are rare!) - a suitable card should arrive over the weekend and the hacking can continue.