Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions apps/nvidia-dra-driver-gpu/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
ARG VERSION="v25.12.0"
ARG SOURCE_IMAGE="nvcr.io/nvidia/k8s-dra-driver-gpu"

# =============================================================================
# Builder stage: clone upstream source, apply Talos support patch, build binaries
# =============================================================================
FROM golang:1.26.1-bookworm AS builder

ARG VERSION

RUN mkdir -p /out && \
git clone --depth 1 --branch ${VERSION} \
https://github.com/NVIDIA/k8s-dra-driver-gpu.git /src

WORKDIR /src

# Apply Talos OS support (upstream PR #695):
# - adds /usr/local/glibc/usr/lib to library search paths
# - adds /usr/local/bin to binary search paths
COPY talos-support.patch /src/
RUN patch -p1 < talos-support.patch

# Build kubelet plugin binaries using vendored dependencies
RUN CGO_ENABLED=1 GOOS=linux \
go build -mod=vendor \
-o /out/gpu-kubelet-plugin \
./cmd/gpu-kubelet-plugin/ && \
CGO_ENABLED=1 GOOS=linux \
go build -mod=vendor \
-o /out/compute-domain-kubelet-plugin \
./cmd/compute-domain-kubelet-plugin/

# =============================================================================
# Final stage: official image with patched binaries and prestart script
# =============================================================================
FROM ${SOURCE_IMAGE}:${VERSION}

COPY --from=builder /out/gpu-kubelet-plugin /usr/bin/gpu-kubelet-plugin
COPY --from=builder /out/compute-domain-kubelet-plugin /usr/bin/compute-domain-kubelet-plugin
COPY --from=builder /src/hack/kubelet-plugin-prestart.sh /usr/bin/kubelet-plugin-prestart.sh
46 changes: 46 additions & 0 deletions apps/nvidia-dra-driver-gpu/docker-bake.hcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
target "docker-metadata-action" {}

variable "APP" {
default = "nvidia-dra-driver-gpu"
}

variable "VERSION" {
// renovate: datasource=github-releases depName=NVIDIA/k8s-dra-driver-gpu
default = "v25.12.0"
}

variable "SOURCE" {
default = "https://github.com/NVIDIA/k8s-dra-driver-gpu"
}

variable "SOURCE_IMAGE" {
default = "nvcr.io/nvidia/k8s-dra-driver-gpu"
}

group "default" {
targets = ["image-local"]
}

target "image" {
inherits = ["docker-metadata-action"]
args = {
VERSION = "${VERSION}"
SOURCE_IMAGE = "${SOURCE_IMAGE}"
}
labels = {
"org.opencontainers.image.source" = "${SOURCE}"
}
}

target "image-local" {
inherits = ["image"]
output = ["type=docker"]
tags = ["${APP}:${VERSION}"]
}

target "image-all" {
inherits = ["image"]
platforms = [
"linux/amd64"
]
}
61 changes: 61 additions & 0 deletions apps/nvidia-dra-driver-gpu/talos-support.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
Talos Linux installs NVIDIA libraries via a glibc compatibility layer at
/usr/local/glibc/usr/lib/ and binaries at /usr/local/bin/, which are not
in the standard search paths. Mirrors upstream PR NVIDIA/k8s-dra-driver-gpu#695.

diff --git a/cmd/gpu-kubelet-plugin/root.go b/cmd/gpu-kubelet-plugin/root.go
--- a/cmd/gpu-kubelet-plugin/root.go
+++ b/cmd/gpu-kubelet-plugin/root.go
@@ -34,6 +34,7 @@ func (r root) getDriverLibraryPath() (string, error) {
"/lib64",
"/lib/x86_64-linux-gnu",
"/lib/aarch64-linux-gnu",
+ "/usr/local/glibc/usr/lib",
}

libraryPath, err := r.findFile("libnvidia-ml.so.1", librarySearchPaths...)
@@ -52,6 +53,7 @@ func (r root) getNvidiaSMIPath() (string, error) {
"/usr/sbin",
"/bin",
"/sbin",
+ "/usr/local/bin",
}

binaryPath, err := r.findFile("nvidia-smi", binarySearchPaths...)
diff --git a/cmd/compute-domain-kubelet-plugin/root.go b/cmd/compute-domain-kubelet-plugin/root.go
--- a/cmd/compute-domain-kubelet-plugin/root.go
+++ b/cmd/compute-domain-kubelet-plugin/root.go
@@ -34,6 +34,7 @@ func (r root) getDriverLibraryPath() (string, error) {
"/lib64",
"/lib/x86_64-linux-gnu",
"/lib/aarch64-linux-gnu",
+ "/usr/local/glibc/usr/lib",
}

libraryPath, err := r.findFile("libnvidia-ml.so.1", librarySearchPaths...)
@@ -52,6 +53,7 @@ func (r root) getNvidiaSMIPath() (string, error) {
"/usr/sbin",
"/bin",
"/sbin",
+ "/usr/local/bin",
}

binaryPath, err := r.findFile("nvidia-smi", binarySearchPaths...)
diff --git a/hack/kubelet-plugin-prestart.sh b/hack/kubelet-plugin-prestart.sh
--- a/hack/kubelet-plugin-prestart.sh
+++ b/hack/kubelet-plugin-prestart.sh
@@ -46,7 +46,8 @@ validate_and_exit_on_success () {
/driver-root/usr/bin \
/driver-root/usr/sbin \
/driver-root/bin \
+ /driver-root/usr/local/bin \
/driver-root/sbin \
-maxdepth 1 -type f -name "nvidia-smi" 2> /dev/null | head -n1
)
@@ -60,7 +61,8 @@ validate_and_exit_on_success () {
/driver-root/usr/lib64 \
/driver-root/usr/lib/x86_64-linux-gnu \
/driver-root/usr/lib/aarch64-linux-gnu \
+ /driver-root/usr/local/glibc/usr/lib \
/driver-root/lib64 \
/driver-root/lib/x86_64-linux-gnu \
/driver-root/lib/aarch64-linux-gnu \
Loading