1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-26 05:14:13 +01:00

Enable Multi-Arch Container Image Builds

Previous to this change official descheduler container images only
supported the AMD64 hardware architecture. This change enables
building official descheduler container images for multiple
architectures.

The initially supported architectures are AMD64 and ARM64.
This commit is contained in:
Sean Malloy
2020-12-03 00:06:22 -06:00
parent 7bcd562ff5
commit bf91e6790e
3 changed files with 29 additions and 5 deletions

View File

@@ -15,8 +15,9 @@ FROM golang:1.15.2
WORKDIR /go/src/sigs.k8s.io/descheduler WORKDIR /go/src/sigs.k8s.io/descheduler
COPY . . COPY . .
ARG ARCH
ARG VERSION ARG VERSION
RUN VERSION=${VERSION} make RUN VERSION=${VERSION} make build.$ARCH
FROM scratch FROM scratch

View File

@@ -18,6 +18,7 @@
VERSION?=v$(shell date +%Y%m%d)-$(shell git describe --tags --match "v*") VERSION?=v$(shell date +%Y%m%d)-$(shell git describe --tags --match "v*")
BUILD=$(shell date +%FT%T%z) BUILD=$(shell date +%FT%T%z)
LDFLAG_LOCATION=sigs.k8s.io/descheduler/cmd/descheduler/app LDFLAG_LOCATION=sigs.k8s.io/descheduler/cmd/descheduler/app
ARCHS = amd64 arm64
LDFLAGS=-ldflags "-X ${LDFLAG_LOCATION}.version=${VERSION} -X ${LDFLAG_LOCATION}.buildDate=${BUILD}" LDFLAGS=-ldflags "-X ${LDFLAG_LOCATION}.version=${VERSION} -X ${LDFLAG_LOCATION}.buildDate=${BUILD}"
@@ -47,18 +48,40 @@ all: build
build: build:
CGO_ENABLED=0 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler CGO_ENABLED=0 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler
build.amd64:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler
build.arm64:
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ${LDFLAGS} -o _output/bin/descheduler sigs.k8s.io/descheduler/cmd/descheduler
dev-image: build dev-image: build
docker build -f Dockerfile.dev -t $(IMAGE) . docker build -f Dockerfile.dev -t $(IMAGE) .
image: image:
docker build --build-arg VERSION="$(VERSION)" -t $(IMAGE) . docker build --build-arg VERSION="$(VERSION)" --build-arg ARCH="amd64" -t $(IMAGE) .
push-container-to-gcloud: image image.amd64:
docker build --build-arg VERSION="$(VERSION)" --build-arg ARCH="amd64" -t $(IMAGE)-amd64 .
image.arm64:
docker build --build-arg VERSION="$(VERSION)" --build-arg ARCH="arm64" -t $(IMAGE)-arm64 .
push: image
gcloud auth configure-docker gcloud auth configure-docker
docker tag $(IMAGE) $(IMAGE_GCLOUD) docker tag $(IMAGE) $(IMAGE_GCLOUD)
docker push $(IMAGE_GCLOUD) docker push $(IMAGE_GCLOUD)
push: push-container-to-gcloud push-all: image.amd64 image.arm64
gcloud auth configure-docker
for arch in $(ARCHS); do \
docker tag $(IMAGE)-$${arch} $(IMAGE_GCLOUD)-$${arch} ;\
docker push $(IMAGE_GCLOUD)-$${arch} ;\
done
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create $(IMAGE_GCLOUD) $(addprefix --amend $(IMAGE_GCLOUD)-, $(ARCHS))
for arch in $(ARCHS); do \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest annotate --arch $${arch} $(IMAGE_GCLOUD) $(IMAGE_GCLOUD)-$${arch} ;\
done
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push $(IMAGE_GCLOUD) ;\
clean: clean:
rm -rf _output rm -rf _output

View File

@@ -14,7 +14,7 @@ steps:
- VERSION=$_GIT_TAG - VERSION=$_GIT_TAG
- BASE_REF=$_PULL_BASE_REF - BASE_REF=$_PULL_BASE_REF
args: args:
- push - push-all
substitutions: substitutions:
# _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and # _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and
# can be used as a substitution # can be used as a substitution