Saltar a contenido

Mover la iGPU de lebron a kyrie

Procedimiento manual (requiere root en Proxmox luka). Forma parte de la migración de Frigate; ver ADR 0006.

Desde 2026-10-31 el passthrough está en Terraform (var.k3s_node_hostpci → hostpci0: mapping=igpu para kyrie). El resource mapping PCI igpu (Datacenter → Resource Mappings, path 0000:00:02.0) se crea a mano una vez. Este runbook queda para el movimiento inicial entre VMs y para recuperar estado si se toca a mano; un apply revertirá cualquier cambio manual del hostpci de kyrie.

Downtime: durante el cambio se paran lebron (Home Assistant, Mosquitto, InfluxDB, Zigbee2MQTT y el resto de servicios) y kyrie (workloads del clúster). Planifica una ventana.

Antes de empezar

  • Ventana acordada: se para lebron (HA, Mosquitto, InfluxDB, Zigbee2MQTT…).
  • Acceso root a Proxmox: UI (https://192.168.1.10:8006 → Shell) o SSH.
  • Comprobar el dispositivo en el host:
lspci -nn | grep -i "VGA.*Intel"
# Esperado: 00:02.0 VGA compatible controller [0300]: Intel Corporation
# TigerLake-LP GT2 [Iris Xe Graphics] [8086:9a49]

1. Quitar la iGPU de lebron

KEY=$(qm config 100 | sed -n 's/^\(hostpci[0-9]*\):.*/\1/p')
echo "$KEY"
qm shutdown 100 --timeout 180
# esperar hasta: qm status 100 → status: stopped
qm set 100 --delete "$KEY"
qm config 100 | grep hostpci        # debe estar vacío
qm start 100

2. Añadirla a kyrie

Antes de parar kyrie, cordonear el nodo y esperar a que Longhorn y los pods estén sanos:

kubectl cordon kyrie
kubectl get nodes,pods -A -o wide   # esperar a que todo esté Running/Healthy
qm shutdown 9002 --timeout 180
# esperar hasta: qm status 9002 → status: stopped
qm set 9002 --hostpci0 0000:00:02.0
qm start 9002

Sin x-vga: la iGPU se usa para cómputo (OpenVINO/VAAPI), no como consola.

3. Instalar el driver y verificar en kyrie

Las imágenes cloud de Ubuntu no traen linux-modules-extra, que es donde vive el driver i915; sin él el PCI aparece pero no se crea /dev/dri. Lo gestiona el rol Ansible igpu (k3s/ansible/roles/igpu): instala linux-modules-extra-{{ ansible_kernel }} + linux-image-generic, carga i915 y espera a /dev/dri/renderD128. Se aplica al mergear (ansible-apply) o a mano:

cd k3s/ansible
ansible-playbook playbooks/site.yml --tags igpu --limit kyrie

Verificar:

ssh ubuntu@192.168.20.11 'ls -l /dev/dri && lspci -nn | grep -i vga'
# Esperado: card0, renderD128 e Intel Iris Xe
kubectl uncordon kyrie

Rollback

qm shutdown 9002 --timeout 180
# esperar hasta: qm status 9002 → status: stopped
qm set 9002 --delete hostpci0
qm start 9002
qm shutdown 100 --timeout 180
# esperar hasta: qm status 100 → status: stopped
qm set 100 --hostpci0 0000:00:02.0
qm start 100

Para volver al Frigate legacy, además del cambio de PCI:

  1. Escalar el Deployment de Frigate a 0 (o borrar la Application frigate de Argo CD).
  2. Restaurar el bloque del servicio en portainer-compose/hass/monitoring/docker-compose.yml desde el historial de git de ese repo (se retiró al cerrar la migración).
  3. Arrancar el contenedor legacy.