What is missing
Nothing on the site documents how a GPU node group is meant to work on the Talos workers that Cozystack 1.6.0 introduced for tenant Kubernetes clusters. Two specific gaps, both of which cost real debugging time in a production 1.6.0 environment (upstream cozystack/cozystack#3563):
1. Kernel modules have to be declared. A Talos system extension installs a kernel module but does not load it — that is machine.kernel.modules' job. Until the upstream PR linked below there was no values surface for it at all; now there is one, and it needs documenting on the Kubernetes and Kubernetes Nodes reference pages:
Kubernetes: nodeGroups.<name>.kernelModules
Kubernetes Nodes: kernelModules at the root, next to gpus
The reference tables regenerate from each package's README.md, so the field descriptions arrive on their own for the apps hardcoded in the website Makefile. What does not arrive is the behaviour a prose page has to state: leaving the field unset makes the chart load nvidia, nvidia_uvm, nvidia_drm, nvidia_modeset on any node group holding an nvidia.com/* GPU, a non-empty list replaces that set outright, and an explicit [] opts out entirely. That three-state behaviour is not derivable from a generated parameter table.
2. The Blackwell schematic constraint is documented nowhere, and the failure is silent. On Blackwell (GB202, PCI ID 10de:2bb5) the worker schematic must carry siderolabs/nvidia-open-gpu-kernel-modules-production. With the proprietary siderolabs/nonfree-kmod-nvidia-production extension the module loads cleanly, /dev/nvidia0 appears, and nvidia-smi -L on the host then reports No devices found — no error in dmesg, in the kubelet log, or anywhere else. Neither the Cozystack docs nor the Talos docs mention this, and there is nothing in the observable state to suggest the extension is the problem. This cost us about an hour; a single sentence on the page would have cost nothing.
Related: two debugging notes worth stating wherever the GPU worker path is described, both of which are non-obvious on Talos:
- Check the host first with
chroot /host /usr/local/bin/nvidia-smi -L. Talos has no /bin/sh in the host root, so binaries have to be invoked directly rather than through a shell.
- CDI injection happens at pod admission, so tenant pods started before a node is fixed keep their old (GPU-less) environment and must be recreated.
Where it belongs
content/en/docs/next/ — the reference pages for the two apps, plus whichever GPU/node-group prose page is the right home for the schematic constraint. #561 already asks for GPU passthrough documentation for tenant Kubernetes clusters, but it predates the Talos worker rollover and covers the gpu=on auto-label and NvLinkDisable default rather than anything above; the kernel-module surface and the Blackwell extension constraint are new ground. Merge this into #561 if a maintainer prefers to keep the GPU documentation in one place.
Worth considering for backport to the released v1.6 documentation directory as well: the Blackwell constraint applies to 1.6.0 as shipped, independently of the upstream PR, since it is a property of the extension rather than of the chart.
Upstream
The kernel-modules values surface: see the linked upstream PR. Acknowledged by Aleksei Sviridkin (@lexfrei) as an undocumented behaviour. Filed as the downstream follow-up required by the upstream PR checklist.
What is missing
Nothing on the site documents how a GPU node group is meant to work on the Talos workers that Cozystack 1.6.0 introduced for tenant Kubernetes clusters. Two specific gaps, both of which cost real debugging time in a production 1.6.0 environment (upstream cozystack/cozystack#3563):
1. Kernel modules have to be declared. A Talos system extension installs a kernel module but does not load it — that is
machine.kernel.modules' job. Until the upstream PR linked below there was no values surface for it at all; now there is one, and it needs documenting on theKubernetesandKubernetes Nodesreference pages:Kubernetes:nodeGroups.<name>.kernelModulesKubernetes Nodes:kernelModulesat the root, next togpusThe reference tables regenerate from each package's
README.md, so the field descriptions arrive on their own for the apps hardcoded in the websiteMakefile. What does not arrive is the behaviour a prose page has to state: leaving the field unset makes the chart loadnvidia,nvidia_uvm,nvidia_drm,nvidia_modeseton any node group holding annvidia.com/*GPU, a non-empty list replaces that set outright, and an explicit[]opts out entirely. That three-state behaviour is not derivable from a generated parameter table.2. The Blackwell schematic constraint is documented nowhere, and the failure is silent. On Blackwell (GB202, PCI ID
10de:2bb5) the worker schematic must carrysiderolabs/nvidia-open-gpu-kernel-modules-production. With the proprietarysiderolabs/nonfree-kmod-nvidia-productionextension the module loads cleanly,/dev/nvidia0appears, andnvidia-smi -Lon the host then reportsNo devices found— no error in dmesg, in the kubelet log, or anywhere else. Neither the Cozystack docs nor the Talos docs mention this, and there is nothing in the observable state to suggest the extension is the problem. This cost us about an hour; a single sentence on the page would have cost nothing.Related: two debugging notes worth stating wherever the GPU worker path is described, both of which are non-obvious on Talos:
chroot /host /usr/local/bin/nvidia-smi -L. Talos has no/bin/shin the host root, so binaries have to be invoked directly rather than through a shell.Where it belongs
content/en/docs/next/— the reference pages for the two apps, plus whichever GPU/node-group prose page is the right home for the schematic constraint. #561 already asks for GPU passthrough documentation for tenant Kubernetes clusters, but it predates the Talos worker rollover and covers thegpu=onauto-label andNvLinkDisabledefault rather than anything above; the kernel-module surface and the Blackwell extension constraint are new ground. Merge this into #561 if a maintainer prefers to keep the GPU documentation in one place.Worth considering for backport to the released
v1.6documentation directory as well: the Blackwell constraint applies to 1.6.0 as shipped, independently of the upstream PR, since it is a property of the extension rather than of the chart.Upstream
The kernel-modules values surface: see the linked upstream PR. Acknowledged by Aleksei Sviridkin (@lexfrei) as an undocumented behaviour. Filed as the downstream follow-up required by the upstream PR checklist.