Aktivera hårdvaruacceleration för Jellyfin på Talos Linux (med Onedr0p Cluster-Template)
I min homelab-resa har jag använt Kubernetes för allt från att köra Jellyfin-mediaservrar till hemautomation och mer därtill. Kärnan i min setup är ett Kubernetes-kluster som körs på Talos Linux, hanterad deklarativt via Flux CD. Jag har använt det fantastiska onedr0p cluster-template, en GitOps-driven, allt-i-ett färdig mall som utnyttjar Talos.
Nyligen stötte jag på en vanlig utmaning: att aktivera hårdvaruacceleration för Jellyfin som körs på noder med Intel integrerade GPU:er (iGPU). Denna funktion minskar dramatiskt CPU-användningen under medietranskodning. Efter en del experimenterande och lärande lyckades jag aktivera iGPU-acceleration genom systemextensions som tillhandahålls av Talos nya “System Extensions”-funktion.
I den här guiden delar jag allt jag lärt mig, uppdelat i tydliga steg så att du kan följa med smidigt, även om du är ny med Talos eller onedr0p cluster-template.
Vad du kommer att lära dig i denna guide
- Bygga en anpassad Talos-installationsavbildning via Talos Image Factory
- Integrera Talos systemextensions (specifikt i915 för Intel iGPU:er)
- Deklarativt hantera Talos-noder med onedr0p cluster-template
- Konfigurera Jellyfin för hårdvaruaccelererad transkodning
- Validera och felsöka din installation
Förutsättningar
- Ett fungerande Talos Linux-kluster
- Noder utrustade med Intel iGPU:er (t.ex. UHD 630 på Dell OptiPlex Micro)
- Jellyfin distribuerat i Kubernetes (gärna via Flux)
- Grundläggande kunskap om onedr0p cluster-template workflow
Steg-för-steg guide
Viktigt meddelande om uppgradering av Talos
Denna guide täcker också scenariot att uppgradera Talos Linux från en äldre version (som 1.9.5) till en nyare version (som 1.10.0). Alla stegen nedan kommer smidigt att vägleda dig genom uppgraderingsprocessen samtidigt som du aktiverar hårdvaruacceleration.
Steg 1: Bygga en anpassad Talos-installationsavbildning (via Talos Image Factory)
Gå till den officiella Talos Image Factory för att bygga en skräddarsydd installationsavbildning:
- Välj önskad ny Talos-version att uppgradera till (t.ex. från 1.9.5 till 1.10.0) eller använd samma version som dina noder kör om du inte vill uppgradera.
- Under System Extensions, välj:
- siderolabs/i915 (GPU-drivrutin)
- siderolabs/intel-ucode (valfri men rekommenderad mikrokoduppdatering)
- Klicka på "Create" och kopiera det schematiska ID du fick.
Fabriken ger en bild-URL som liknar:
factory.talos.dev/installer/<ditt-schematic-id>:v1.10.0
Steg 2: Integrera den anpassade installationsavbildningen med onedr0p cluster-template
Uppdatera din nodes.yaml
-fil med det schematiska ID du genererade:
nodes:
- name: talos-1
address: <din-ip-adress>
controller: true
disk: <din-disk>
mac_addr: <din-mac-adress>
schematic_id: <ditt-schematic-id> # Uppdatera med det nya schematiska ID från Talos Image Factory
- name: talos-2
address: <din-ip-adress>
controller: true
disk: <din-disk>
mac_addr: <din-mac-adress>
schematic_id: <ditt-schematic-id>
- name: talos-3
address: <din-ip-adress>
controller: true
disk: <din-disk>
mac_addr: <din-mac-adress>
schematic_id: <ditt-schematic-id>
Commit:a och pusha dina ändringar.
Steg 3: Generera om klusterkonfigurationerna
task configure
task talos:generate-config
Se till att installationsavbildnings-URL:en är korrekt uppdaterad i talos/clusterconfig/talconfig.yaml
:
nodes:
- hostname: 'talos-1'
# ...
talosImageURL: factory.talos.dev/installer/4b3cd373a192c8469e859b7a0cfbed3ecc3577c4a2d346a37b0aeff9cd17cdb0 # Här bör du se din nya bild-URL
- hostname: 'talos-2'
# ...
Steg 4: Rulla ut uppgraderingen (nod för nod så att inget kraschar)
Detta steg utför även själva Talos-versionuppgraderingen (t.ex. från 1.9.5 till 1.10.0) och säkerställer att dina noder kör önskad version av Talos efter slutförandet.
Säkert uppgradera dina noder en i taget (börja med kontrollnoder om du har flera):
kubectl drain talos-1 --ignore-daemonsets --delete-emptydir-data # Töm noden från alla arbetsbelastningar
task talos:upgrade-node IP=<IP> # Uppgradera noden, detta kommer att använda den nya bilden
talosctl health -n <IP> # Kontrollera hälsan, du bör se "Healthy"-status och ett felmeddelande som säger åt oss att uncordon noden
kubectl uncordon talos-1 # Uncordon noden så att den kan ta emot arbetsbelastningar igen
Upprepa för varje kontroll- och arbetsnod.
Steg 5: Verifiera iGPU-drivrutiner på Talos-noder
När noden är uppgraderad och omstartad, bekräfta att allt laddats korrekt:
talosctl -n <IP> get extensions | grep i915 # Ska visa "running"
talosctl -n <IP> ls /dev/dri # renderD128 ska synas
Testa VA-API-kapaciteter direkt från Talos-noden:
talosctl -n <IP> containers exec -- \
vainfo --display drm --device /dev/dri/renderD128
Du bör se H.264 och HEVC-kapabiliteter med drivrutinen iHD.
Obs
Om du stöter på problem med vainfo
-kommandot, se till att du har nödvändiga paket installerade. Du kan installera dem i containern:
apt-get install vainfo
Steg 6: Konfigurera Jellyfin för hårdvaruacceleration
I Jellyfins webbgränssnitt:
Admin Dashboard > Playback > Transcoding
Konfigurera enligt följande:
Alternativ | Rekommenderad inställning |
---|---|
Hårdvaruacceleration | VA API / Intel QSV |
Enhet | /dev/dri/renderD128 |
Aktivera hårdvaruavkodning | H.264, HEVC (H.265), VP9 |
Aktivera hårdvarukodning | ✅ |
HEVC-kodning | Valfritt (beroende på klienter) |
Tillåt 10-bitars HEVC | ❌ |
VPP Tone-mapping | ❌ |
Tillfällig mapp för transkodningar | /cache/transcodes |
Max antal samtidiga transkodningar | 2 |
Steg 7: Testa Jellyfins hårdvaruacceleration
Spela upp en 4K HEVC-fil från en enhet som tvingar fram transkodning (t.ex. Safari på iOS). I Jellyfins Dashboard > Activity bör du se:
- VAAPI (hw) eller QSV (hw) för både avkodning och kodning.
- CPU-användningen bör vara betydligt lägre (< 15%).
Kontrollera FFmpeg-loggar live vid behov:
kubectl logs <jellyfin-pod> -f | grep ffmpeg
Felsökning
Vanliga problem och lösningar
- Saknas
/dev/dri/renderD128
: Se till att Talos-noden korrekt laddade siderolabs/i915 och omstartades efter uppgraderingen. vainfo
-fel i Jellyfin-container: Installera VA-API-bibliotek:apt update && apt install -y intel-media-va-driver-non-free
- “Software” istället för “(hw)” i Jellyfin: Dubbelkolla Jellyfin-inställningarna och codec-valen enligt ovan.
- Problem med att uppgradera Talos-versioner (t.ex. schemafel i talhelper): Se till att din version av talhelper är uppdaterad och kompatibel med den nya Talos-schemaspecifikationen.
Avslutande tankar och lärdomar
Att använda Talos systemextensions för att möjliggöra iGPU-transkodning var en utmaning i början, främst på grund av att förstå Talos Image Factory och hur extensions fungerar deklarativt. Men med onedr0p cluster-templates strukturerade arbetsflöde blev integrationen betydligt enklare.
Nu, med Jellyfin som smidigt transkodar med hårdvaruacceleration, är CPU-användningen dramatiskt reducerad, vilket ger en bättre streamingupplevelse och svalare hårdvara. Denna erfarenhet löste inte bara ett praktiskt behov utan gav också värdefulla insikter om deklarativ hantering av systemextensions inom Talos-ekosystemet.
Lycka till med ditt homelab-projekt, Philip Rutberg 🚀