87 lines
3.3 KiB
Markdown
87 lines
3.3 KiB
Markdown
# Device exposure
|
|
|
|
For [Jellyfin Hardware Acceleration](https://jellyfin.org/docs/general/administration/hardware-acceleration/), following instructions [here](https://github.com/kubernetes/kubernetes/issues/7890#issuecomment-766088805) (originally from [here](https://old.reddit.com/r/jellyfin/comments/i2r4h9/how_to_enable_hardware_acceleration_with_docker/)), I used [smarter-device-manager](https://gitlab.com/arm-research/smarter/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.
|
|
|
|
```yaml
|
|
# 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](https://github.com/k3s-io/k3s/issues/2664#issuecomment-742013918)
|
|
|
|
This also required the [Device Plugin Feature Gate](https://github.com/k3s-io/k3s/discussions/4596) to be enabled.
|
|
|
|
Further useful links:
|
|
* [Reddit thread](https://old.reddit.com/r/jellyfin/comments/y7i3uc/trouble_with_quicksync_trancoding_on_new_11th_gen/)
|
|
* [Enabling iGPU](https://community.hetzner.com/tutorials/howto-enable-igpu)
|
|
|
|
---
|
|
|
|
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.
|
|
|