From 4a2c67e0451a12126f7af0e7a875b24cbfdaf448 Mon Sep 17 00:00:00 2001 From: nbykov0 <166552198+nbykov0@users.noreply.github.com> Date: Mon, 12 May 2025 02:38:13 +0300 Subject: [PATCH] apps/kubernetes: multiarch support Signed-off-by: nbykov0 <166552198+nbykov0@users.noreply.github.com> --- packages/apps/kubernetes/Makefile | 16 ++++++++++---- .../images/cluster-autoscaler/Dockerfile | 13 +++++++++-- .../images/kubevirt-cloud-provider/Dockerfile | 9 ++++++-- .../images/kubevirt-csi-driver/Dockerfile | 5 +++++ .../images/ubuntu-container-disk/Dockerfile | 22 +++++++++++-------- 5 files changed, 48 insertions(+), 17 deletions(-) diff --git a/packages/apps/kubernetes/Makefile b/packages/apps/kubernetes/Makefile index 45b97f69..10898e65 100644 --- a/packages/apps/kubernetes/Makefile +++ b/packages/apps/kubernetes/Makefile @@ -14,8 +14,10 @@ generate: image: image-ubuntu-container-disk image-kubevirt-cloud-provider image-kubevirt-csi-driver image-cluster-autoscaler image-ubuntu-container-disk: - docker buildx build --platform linux/amd64 --build-arg ARCH=amd64 images/ubuntu-container-disk \ + docker buildx build images/ubuntu-container-disk \ --provenance false \ + --builder=$(BUILDER) \ + --platform=$(PLATFORM) \ --build-arg KUBERNETES_VERSION=${KUBERNETES_VERSION} \ --tag $(REGISTRY)/ubuntu-container-disk:$(call settag,$(KUBERNETES_VERSION)) \ --tag $(REGISTRY)/ubuntu-container-disk:$(call settag,$(KUBERNETES_VERSION)-$(TAG)) \ @@ -30,8 +32,10 @@ image-ubuntu-container-disk: rm -f images/ubuntu-container-disk.json image-kubevirt-cloud-provider: - docker buildx build --platform linux/amd64 --build-arg ARCH=amd64 images/kubevirt-cloud-provider \ + docker buildx build images/kubevirt-cloud-provider \ --provenance false \ + --builder=$(BUILDER) \ + --platform=$(PLATFORM) \ --tag $(REGISTRY)/kubevirt-cloud-provider:$(call settag,$(KUBERNETES_PKG_TAG)) \ --tag $(REGISTRY)/kubevirt-cloud-provider:$(call settag,$(KUBERNETES_PKG_TAG)-$(TAG)) \ --cache-from type=registry,ref=$(REGISTRY)/kubevirt-cloud-provider:latest \ @@ -45,8 +49,10 @@ image-kubevirt-cloud-provider: rm -f images/kubevirt-cloud-provider.json image-kubevirt-csi-driver: - docker buildx build --platform linux/amd64 --build-arg ARCH=amd64 images/kubevirt-csi-driver \ + docker buildx build images/kubevirt-csi-driver \ --provenance false \ + --builder=$(BUILDER) \ + --platform=$(PLATFORM) \ --tag $(REGISTRY)/kubevirt-csi-driver:$(call settag,$(KUBERNETES_PKG_TAG)) \ --tag $(REGISTRY)/kubevirt-csi-driver:$(call settag,$(KUBERNETES_PKG_TAG)-$(TAG)) \ --cache-from type=registry,ref=$(REGISTRY)/kubevirt-csi-driver:latest \ @@ -61,8 +67,10 @@ image-kubevirt-csi-driver: image-cluster-autoscaler: - docker buildx build --platform linux/amd64 --build-arg ARCH=amd64 images/cluster-autoscaler \ + docker buildx build images/cluster-autoscaler \ --provenance false \ + --builder=$(BUILDER) \ + --platform=$(PLATFORM) \ --tag $(REGISTRY)/cluster-autoscaler:$(call settag,$(KUBERNETES_PKG_TAG)) \ --tag $(REGISTRY)/cluster-autoscaler:$(call settag,$(KUBERNETES_PKG_TAG)-$(TAG)) \ --cache-from type=registry,ref=$(REGISTRY)/cluster-autoscaler:latest \ diff --git a/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile b/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile index 17a5e501..7f9ff896 100644 --- a/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile +++ b/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile @@ -1,7 +1,14 @@ # Source: https://raw.githubusercontent.com/kubernetes/autoscaler/refs/heads/master/cluster-autoscaler/Dockerfile.amd64 ARG builder_image=docker.io/library/golang:1.23.4 -ARG BASEIMAGE=gcr.io/distroless/static:nonroot-amd64 +ARG BASEIMAGE=gcr.io/distroless/static:nonroot-${TARGETARCH} + FROM ${builder_image} AS builder + +ARG TARGETOS +ARG TARGETARCH +ENV GOOS=$TARGETOS +ENV GOARCH=$TARGETARCH + RUN git clone https://github.com/kubernetes/autoscaler /src/autoscaler \ && cd /src/autoscaler/cluster-autoscaler \ && git checkout cluster-autoscaler-1.32.0 @@ -14,6 +21,8 @@ RUN make build FROM $BASEIMAGE LABEL maintainer="Marcin Wielgus " -COPY --from=builder /src/autoscaler/cluster-autoscaler/cluster-autoscaler-amd64 /cluster-autoscaler +ARG TARGETARCH + +COPY --from=builder /src/autoscaler/cluster-autoscaler/cluster-autoscaler-${TARGETARCH} /cluster-autoscaler WORKDIR / CMD ["/cluster-autoscaler"] diff --git a/packages/apps/kubernetes/images/kubevirt-cloud-provider/Dockerfile b/packages/apps/kubernetes/images/kubevirt-cloud-provider/Dockerfile index 97760bd7..0e2c3a2f 100644 --- a/packages/apps/kubernetes/images/kubevirt-cloud-provider/Dockerfile +++ b/packages/apps/kubernetes/images/kubevirt-cloud-provider/Dockerfile @@ -1,5 +1,10 @@ # Source: https://github.com/kubevirt/cloud-provider-kubevirt/blob/main/build/images/kubevirt-cloud-controller-manager/Dockerfile -FROM --platform=linux/amd64 golang:1.20.6 AS builder +FROM golang:1.20.6 AS builder + +ARG TARGETOS +ARG TARGETARCH +ENV GOOS=$TARGETOS +ENV GOARCH=$TARGETARCH RUN git clone https://github.com/kubevirt/cloud-provider-kubevirt /go/src/kubevirt.io/cloud-provider-kubevirt \ && cd /go/src/kubevirt.io/cloud-provider-kubevirt \ @@ -14,7 +19,7 @@ RUN go get 'k8s.io/endpointslice/util@v0.28' 'k8s.io/apiserver@v0.28' RUN go mod tidy RUN go mod vendor -RUN CGO_ENABLED=0 GOOS=linux go build -mod=vendor -ldflags="-s -w" -o bin/kubevirt-cloud-controller-manager ./cmd/kubevirt-cloud-controller-manager +RUN CGO_ENABLED=0 go build -mod=vendor -ldflags="-s -w" -o bin/kubevirt-cloud-controller-manager ./cmd/kubevirt-cloud-controller-manager FROM registry.access.redhat.com/ubi9/ubi-micro COPY --from=builder /go/src/kubevirt.io/cloud-provider-kubevirt/bin/kubevirt-cloud-controller-manager /bin/kubevirt-cloud-controller-manager diff --git a/packages/apps/kubernetes/images/kubevirt-csi-driver/Dockerfile b/packages/apps/kubernetes/images/kubevirt-csi-driver/Dockerfile index b53c7b3d..27dda789 100644 --- a/packages/apps/kubernetes/images/kubevirt-csi-driver/Dockerfile +++ b/packages/apps/kubernetes/images/kubevirt-csi-driver/Dockerfile @@ -5,6 +5,11 @@ RUN git clone https://github.com/kubevirt/csi-driver /src/kubevirt-csi-driver \ && cd /src/kubevirt-csi-driver \ && git checkout 35836e0c8b68d9916d29a838ea60cdd3fc6199cf +ARG TARGETOS +ARG TARGETARCH +ENV GOOS=$TARGETOS +ENV GOARCH=$TARGETARCH + WORKDIR /src/kubevirt-csi-driver RUN make build diff --git a/packages/apps/kubernetes/images/ubuntu-container-disk/Dockerfile b/packages/apps/kubernetes/images/ubuntu-container-disk/Dockerfile index 395adeb0..f5a7d54d 100644 --- a/packages/apps/kubernetes/images/ubuntu-container-disk/Dockerfile +++ b/packages/apps/kubernetes/images/ubuntu-container-disk/Dockerfile @@ -1,5 +1,5 @@ # TODO: Here we use ubuntu:22.04, as guestfish has some network issues running in ubuntu:24.04 -FROM ubuntu:22.04 as guestfish +FROM ubuntu:22.04 AS guestfish ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update \ @@ -8,15 +8,17 @@ RUN apt-get update \ linux-image-generic \ wget \ make \ - bash-completion \ - && apt-get clean + bash-completion WORKDIR /build -FROM guestfish as builder +FROM guestfish AS builder + +ARG TARGETOS +ARG TARGETARCH # noble is a code name for the Ubuntu 24.04 LTS release -RUN wget -O image.img https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img --show-progress --output-file /dev/stdout --progress=dot:giga 2>/dev/null +RUN wget -O image.img https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-${TARGETARCH}.img --show-progress --output-file /dev/stdout --progress=dot:giga 2>/dev/null ARG KUBERNETES_VERSION @@ -29,19 +31,21 @@ RUN qemu-img resize image.img 5G \ && guestfish --remote command "resize2fs /dev/sda1" \ # docker repo && guestfish --remote sh "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" \ - && guestfish --remote sh 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list' \ + && guestfish --remote sh 'echo "deb [signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list' \ # kubernetes repo && guestfish --remote sh "curl -fsSL https://pkgs.k8s.io/core:/stable:/${KUBERNETES_VERSION}/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg" \ && guestfish --remote sh "echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${KUBERNETES_VERSION}/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list" \ + && guestfish --remote command "apt-get check -q" \ # install containerd - && guestfish --remote command "apt-get update -y" \ - && guestfish --remote command "apt-get install -y containerd.io" \ + && guestfish --remote command "apt-get update -q" \ + && guestfish --remote command "apt-get install -yq containerd.io" \ # configure containerd && guestfish --remote command "mkdir -p /etc/containerd" \ && guestfish --remote sh "containerd config default | tee /etc/containerd/config.toml" \ && guestfish --remote command "sed -i '/SystemdCgroup/ s/=.*/= true/' /etc/containerd/config.toml" \ + && guestfish --remote command "containerd config dump >/dev/null" \ # install kubernetes - && guestfish --remote command "apt-get install -y kubelet kubeadm" \ + && guestfish --remote command "apt-get install -yq kubelet kubeadm" \ # clean apt cache && guestfish --remote sh 'apt-get clean && rm -rf /var/lib/apt/lists/*' \ # write system configuration