Skip to content

Document GPU node groups on Talos workers: kernelModules, per-node-group schematicID, and the Blackwell open-modules requirement #643

Description

@mattia-eleuteri

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions