Saltar a contenido

ADR 0006 — iGPU de Frigate: pasar la Iris Xe de lebron a kyrie

  • Estado: aceptado
  • Fecha: 2026-10-30

Contexto

Frigate se para en lebron el 2026-10-29 por falta de recursos y se migra al clúster k3s (Fase 4). La detección usa OpenVINO sobre la iGPU Intel Iris Xe, que está pasada por PCI a la VM lebron. kyrie (VM 9002 del pool k8s-homelab) no la ve.

AGENTS prohíbe modificar las VMs legacy. Además, el provider bpg/proxmox gestiona hostpci mediante id, pero ese parámetro no es compatible con api_token (exige usuario y contraseña root). El token del repo está limitado al pool k8s-homelab y no puede ver lebron.

Decisión

Mover la iGPU manualmente de lebron a kyrie con una excepción expresa del propietario del repo, autorizada para esta migración:

  1. Parar lebron (VM 100), quitarle el dispositivo PCI y arrancarla.
  2. Parar kyrie (VM 9002), añadir 0000:00:02.0 (sin x-vga) y arrancarla.
  3. Verificar /dev/dri en kyrie.

En el momento de esta decisión Terraform no gestionaba hostpci (el token no podía leer el inventario PCI del nodo). El procedimiento manual está en docs/runbooks/frigate-igpu.md.

Actualización (2026-10-31): hostpci pasa a gestionarse con Terraform (var.k3s_node_hostpci → bloque hostpci del módulo k3s-node) usando un resource mapping de Proxmox (igpu), porque los dispositivos PCI no mapeados solo los puede configurar root (error real con id: «only root can set 'hostpci0' config for non-mapped devices»). El mapping se crea a mano y el token lo lee con Sys.Audit en / (rol k8s-homelab-audit); VM.Config.HWType en el rol del pool permite escribir hostpci. El movimiento inicial de lebron a kyrie fue manual, como se describe arriba.

Consecuencias

  • Excepción puntual a la regla de no tocar lebron; queda registrada aquí.
  • Parada breve de Home Assistant, Mosquitto, InfluxDB y el resto de servicios de lebron durante el cambio.
  • La iGPU deja de estar disponible para cualquier otra VM.
  • El driver i915 no viene en la imagen cloud: el rol Ansible igpu instala linux-modules-extra + linux-image-generic y carga el módulo. Sin ese rol, el PCI aparece en la VM pero no se crea /dev/dri.
  • Desde 2026-10-31 hostpci está en el estado de Terraform: un apply lo mantiene y un cambio manual se revertiría. Requiere Sys.Audit en / y VM.Config.HWType en el pool.
  • Rollback: devolver el PCI a lebron, descomentar el bloque del servicio (está comentado en portainer-compose) y arrancarlo.

Alternativas descartadas

  • Detección en CPU: pierde la aceleración del detector y del reconocimiento facial, y el objetivo es reducir el consumo respecto a lebron.
  • Gestionar hostpci con Terraform: descartada inicialmente porque exigía ampliar el ámbito del token. Revisada el 2026-10-31: se hace con api_token añadiendo Sys.Audit en / (rol mínimo k8s-homelab-audit), VM.Config.HWType al rol del pool y un resource mapping PCI creado a mano, sin credenciales root en el provider.