July 20, 2025

[Home-K8S] #10 Talos - Kernel Module 추가 (NFS & GPU)

[Home-K8S] #10  Talos - Kernel Module 추가 (NFS & GPU)

k8s는 OS 위에서 프로세스만 격리되어 작동하므로 Kernel 의 기능을 사용합니다.
talos는 root 파일 시스템도 격리되어 읽기 전용으로 되어 있어 드라이버나 모듈의 설치가 안됩니다.

OS 이미지 자체가 드라이버나 모듈이 설치된 상태여야 합니다.

Talos linux extensions

GitHub - siderolabs/extensions: Talos Linux System Extensions
Talos Linux System Extensions. Contribute to siderolabs/extensions development by creating an account on GitHub.

첫번째 방법은 이미지를 직접 생성하는 방법입니다.
github 에서 extensions 받아서 이미지를 직접 만들면 됩니다.

Talos Image Factory

Image Factory

두번째 방법은 Image Factory를 사용하는 방법입니다.
Hardware Type > Talos Version > Architecture HW에 맞게 선택합니다.

사용할 Extensions 을 찾아서 선택합니다. 저는 nfsd 와 gpu 를 위한 nonfree-kmod-nvidia-production, nvidia-container-toolkit-production 를 추가했습니다.

마지막으로 넘어가시면 Schematic Ready 에서 이미지를 다운받습니다.

해당 ISO 이미지를 이용해서 PC를 부팅해 줍니다.

Yaml Config 파일 수정

extensions 가 설치된 이미지를 사용했어도 install 을 할 때에도 해당 이미지를 사용해야 합니다.

Initial Installation 의 이미지 경로를 복사해서 yaml 파일을 수정합니다.
전체 node 의 yaml 을 수정할 필요는 없고 해당하는 node의 이미지와 yaml 만 수정하면됩니다.

machine:
  install:
    disk: /dev/sda
    image: factory.talos.dev/metal-installer/4131063d3ec2201062b0c3ba2ce327482c17a53fa8f3a8cd3f8399fcf1b2ad83:v1.10.5
    wipe: false

GPU 구성

NVIDIA GPU (OSS drivers)
In this guide we’ll follow the procedure to support NVIDIA GPU using OSS drivers on Talos.

위에 나왔듯 yaml 파일에 추가해주면 됩니다.
GPU 의 경우에 opensource 보다는 production 을 고르는 게 더 많은 종류를 지원합니다. 그래서 위에 선택한 대로 선택하는 게 낫습니다.

machine:
  kernel:
    modules:
      - name: nvidia
      - name: nvidia_uvm
      - name: nvidia_drm
      - name: nvidia_modeset
  sysctls:
    net.core.bpf_jit_harden: 1

container toolkit 을 설치하면 containerd 에 nvidia 런타임이 생깁니다.
기존에는 기본 런타임을 사용하다가 특정 Pod 만 nvidia 런타임으로 설정해 줄 수 있습니다.
Docs 에 나온 것처럼 Default 런타임을 nvidia 로 해줄 수 있지만, 저는 필요한 리소스만 설정하는 것을 좋아합니다.

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: nvidia
handler: nvidia

그리고 nvidia-device-plugin 을 nvidia runtime 으로 적용해주면 됩니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: nvidia-device-plugin-ds
    spec:
      runtimeClassName: nvidia          # 런타임 설정
      nodeSelector:                     # gpu 노드 선택
        gpu: nvidia
...

nvidia gpu 가 있는 노드에 label 을 적용해서 daemonset 도 필요한 부분에 적용하면 좋겠죠.

kubectl label nodes gpu-node01 gpu=nvidia

설치 확인

확장과 모듈이 잘 설치가 되었는지 확인하려면 일단 dmesg 로그를 확인해야 합니다.

talosctl 옵션으로 설정된 모듈이 extension 을 찾아서 사용하는데, 오류가 발생하면 계속 로그가 올라옵니다.
(로그가 정말 끝도 없이 올라오는데, 계속 올라오다가 그냥 꺼져버립니다. )

그러고 talosctl get extensions 명령어로 확인합니다.

마무리

그런데 Image Factory를 이용해서 만든 이미지에는 문제가 있습니다.
driver 의 버전을 고를 수가 없어요.

Comments