arm64 controller - #549
Closed
cyanidium wants to merge 1 commit into
Closed
Conversation
yansun1996
self-requested a review
May 10, 2026 02:20
Member
|
Hi @cyanidium , thanks for the PR, really appreciate the contribution, this commit needs to go through internal review and CI test on our side, will get back to you once we decide to move forward with this change. |
Builds the controller/manager container for both amd64 and arm64, in a single multi-platform image. This allows control plane nodes running arm64/aarch64 CPUs to be able to manage clusters with AMD GPUs. Not changes: - Build host still has to be amd64/x86_64 - GPU node still has to be amd64/x86_64 - e2e still only tests amd64/x86_64 Benefits: - Heterogeneous/multi-arch clusters do not need dedicated amd64/x86_64 control plane nodes just to control AMD GPU scheduling. Resolves ROCm#331
cyanidium
force-pushed
the
feat/multi-arch
branch
from
July 21, 2026 23:57
0203903 to
70bedc3
Compare
Contributor
Author
|
Rebased on v1.5.1 |
6 tasks
Member
1 task
yansun1996
added a commit
to yansun1996/gpu-operator-rocm
that referenced
this pull request
Aug 4, 2026
Reconcile the arm64 (ROCm#549) and ppc64le (ROCm#565) multi-arch approaches into one configurable build for the controller manager image. The Dockerfile now cross-compiles a single manager binary driven by TARGETARCH (default amd64) with TARGETOS (default linux), instead of building both amd64 and arm64 binaries unconditionally. - Makefile `manager` target builds one binary honoring GOOS/GOARCH. - `docker-build` builds a single arch selected by ARCH (default amd64), passing TARGETARCH/TARGETOS as build args. - `docker-build-multiarch` retains the buildx multi-platform push path. - Dockerfile ARGs default to amd64/linux so a plain `docker build` produces an amd64 image with no extra flags. Co-Authored-By: Claude <noreply@anthropic.com>
yansun1996
added a commit
to yansun1996/gpu-operator-rocm
that referenced
this pull request
Aug 4, 2026
…gurable Unify the arm64 (ROCm#549) and ppc64le (ROCm#565) multi-arch work into a single configurable build for both the controller manager and utils container images. docker-build and docker-build-utils now run `docker buildx build --platform "$(PLATFORM)"` with PLATFORM defaulting to linux/amd64 (unchanged default behavior). Set PLATFORM to a single platform (e.g. linux/arm64) or a comma-separated list (linux/amd64,linux/arm64) for a multi-arch build. buildx auto-populates TARGETOS/TARGETARCH per platform, which drive the Go cross-compile, the kubectl download, and the utils container's oc/kubectl client download. The Dockerfile and utils Dockerfile TARGETARCH/TARGETOS ARGs intentionally carry no default: a default suppresses buildx's per-platform value and would pin every build to that arch. bundle build is left as upstream (amd64, no changes). Adds a developer-guide section documenting the PLATFORM builds and the QEMU/buildx prerequisites for cross-arch builds. Co-Authored-By: Claude <noreply@anthropic.com>
yansun1996
added a commit
to yansun1996/gpu-operator-rocm
that referenced
this pull request
Aug 4, 2026
…gurable Unify the arm64 (ROCm#549) and ppc64le (ROCm#565) multi-arch work into a single configurable build for both the controller manager and utils container images. docker-build and docker-build-utils run `$(CONTAINER_ENGINE) buildx build --platform "$(PLATFORM)" $(BUILDX_OUTPUT)`, defaulting to PLATFORM=linux/amd64 and BUILDX_OUTPUT=--load (single amd64 image loaded locally, unchanged default). Set PLATFORM to a single platform (linux/arm64) or a comma-separated list; for a multi-arch list set BUILDX_OUTPUT=--push (a multi-platform result cannot be --load-ed into the local store). Works with docker buildx and podman 4.0+. buildx auto-populates TARGETOS/TARGETARCH per platform, which drive the Go cross-compile, the kubectl download, and the utils container's oc/kubectl client download. Dockerfile.build gains qemu-user-static + libc6-arm64-cross for cross-arch runtime stages. bundle build is left as upstream (amd64, no changes). Adds a developer-guide section documenting PLATFORM/BUILDX_OUTPUT and the QEMU prerequisite. Co-Authored-By: Claude <noreply@anthropic.com>
yansun1996
added a commit
to yansun1996/gpu-operator-rocm
that referenced
this pull request
Aug 4, 2026
…gurable Unify the arm64 (ROCm#549) and ppc64le (ROCm#565) multi-arch work into a single configurable build for both the controller manager and utils container images. docker-build and docker-build-utils run `$(CONTAINER_ENGINE) buildx build --platform "$(PLATFORM)"`, defaulting to PLATFORM=linux/amd64. A single-platform build auto-loads into the local image store. Set PLATFORM to a single platform (linux/arm64) or a comma-separated list; a multi-platform list must be pushed via a direct `buildx --push`. Works with docker buildx and podman 4.0+. buildx auto-populates TARGETOS/TARGETARCH per platform, driving the Go cross-compile, the kubectl download, and the utils container's oc/kubectl client download. Dockerfile.build gains qemu-user-static + libc6-arm64-cross for cross-arch runtime stages. bundle build is left as upstream (amd64). Adds a developer-guide section. Co-Authored-By: Claude <noreply@anthropic.com>
spraveenio
pushed a commit
that referenced
this pull request
Aug 6, 2026
…4le) (#623) * feat: arm64 controller Builds the controller/manager container for both amd64 and arm64, in a single multi-platform image. This allows control plane nodes running arm64/aarch64 CPUs to be able to manage clusters with AMD GPUs. Not changes: - Build host still has to be amd64/x86_64 - GPU node still has to be amd64/x86_64 - e2e still only tests amd64/x86_64 Benefits: - Heterogeneous/multi-arch clusters do not need dedicated amd64/x86_64 control plane nodes just to control AMD GPU scheduling. Resolves #331 * Build AMD GPU operator images for ppc64le Signed-off-by: Amulyam24 <amulmek1@in.ibm.com> * build: make controller manager and utils images buildx PLATFORM-configurable Unify the arm64 (#549) and ppc64le (#565) multi-arch work into a single configurable build for both the controller manager and utils container images. docker-build and docker-build-utils run `$(CONTAINER_ENGINE) buildx build --platform "$(PLATFORM)"`, defaulting to PLATFORM=linux/amd64. A single-platform build auto-loads into the local image store. Set PLATFORM to a single platform (linux/arm64) or a comma-separated list; a multi-platform list must be pushed via a direct `buildx --push`. Works with docker buildx and podman 4.0+. buildx auto-populates TARGETOS/TARGETARCH per platform, driving the Go cross-compile, the kubectl download, and the utils container's oc/kubectl client download. Dockerfile.build gains qemu-user-static + libc6-arm64-cross for cross-arch runtime stages. bundle build is left as upstream (amd64). Adds a developer-guide section. Co-Authored-By: Claude <noreply@anthropic.com> --------- Signed-off-by: Amulyam24 <amulmek1@in.ibm.com> Co-authored-by: Martin Rowe <martin.p.rowe@gmail.com> Co-authored-by: Amulyam24 <amulmek1@in.ibm.com> Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
This allows control plane nodes running arm64/aarch64 CPUs to be able to manage clusters with AMD GPUs. Heterogeneous/multi-arch clusters do not need dedicated amd64/x86_64 control plane nodes just to control AMD GPU scheduling.
Technical Details
Builds the controller/manager container for both amd64 and arm64, in a single multi-platform image.
Not changed:
Resolves #331
Test Plan
Tested working with a cluster like this:
Helm values:
Test Result
gpu-operatorpod schedules correctly and runs on the arm64/aarch64 control plane nodes.workflowpod schedules and runs correctly on an amd64/x86_64 worker node. GPU resources are available to pods that request them.Submission Checklist