Skip to content

Commit aed208d

Browse files
LudeamarkmandelRobert Bailey
authored
sdk arm64 images (agones-dev#2521)
* Build both arm64 and amd64 sdk img Co-authored-by: Mark Mandel <markmandel@google.com> Co-authored-by: Robert Bailey <robertbailey@google.com>
1 parent f9c333d commit aed208d

4 files changed

Lines changed: 52 additions & 41 deletions

File tree

‎build/Makefile‎

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,11 @@ controller_tag = $(REGISTRY)/agones-controller:$(VERSION)
102102
sidecar_tag = $(REGISTRY)/agones-sdk:$(VERSION)
103103

104104
ifeq ($(WITH_WINDOWS), 1)
105-
sidecar_linux_amd64_tag = $(sidecar_tag)-linux_amd64
105+
sidecar_linux_amd64_tag = $(REGISTRY)/agones-sdk:$(VERSION)-linux-amd64
106+
sidecar_linux_arm64_tag = $(REGISTRY)/agones-sdk:$(VERSION)-linux-arm64
106107
else
107-
sidecar_linux_amd64_tag = $(sidecar_tag)
108+
sidecar_linux_amd64_tag = $(REGISTRY)/agones-sdk:$(VERSION)-amd64
109+
sidecar_linux_arm64_tag = $(REGISTRY)/agones-sdk:$(VERSION)-arm64
108110
endif
109111

110112
ping_tag = $(REGISTRY)/agones-ping:$(VERSION)
@@ -230,9 +232,6 @@ build: build-images build-sdks
230232

231233
# build the docker images
232234
build-images: build-controller-image build-agones-sdk-image build-ping-image build-allocator-image
233-
ifeq ($(WITH_WINDOWS), 1)
234-
build-images: build-agones-sdk-image-windows
235-
endif
236235

237236
# package the current agones helm chart
238237
build-chart: RELEASE_VERSION ?= $(base_version)
@@ -360,7 +359,6 @@ uninstall: $(ensure-build-image)
360359
$(DOCKER_RUN) \
361360
helm uninstall agones --namespace=agones-system
362361

363-
364362
# Build a static binary for the gameserver controller
365363
ifeq ($(WITH_ARM64), 1)
366364
build-controller-binary: $(ensure-build-image) build-controller-binary-linux-amd64 build-controller-binary-linux-arm64
@@ -428,34 +426,28 @@ build-agones-sdk-binary-windows: $(ensure-build-image)
428426
-o $(go_build_base_path)/cmd/sdk-server/bin/sdk-server.windows.amd64.exe $(go_rebuild_flags) $(go_version_flags) $(agones_package)/cmd/sdk-server
429427

430428
ensure-windows-buildx:
431-
# TODO: Remove `--use` and specify `--builder` for each buildx command once Docker 19.03.13 is available.
432-
# `--use` sets the global default buildx context to $(BUILDX_WINDOWS_BUILDER).
433-
#
434-
# Windows image builds must be directed to a specific buildx context.
435-
# The default context does not support building cross platform images.
436-
-DOCKER_CLI_EXPERIMENTAL=enabled docker buildx create --name=$(BUILDX_WINDOWS_BUILDER) --use
429+
-docker buildx create --name=$(BUILDX_WINDOWS_BUILDER)
437430

438431
# Build the image for the gameserver sidecar and SDK binaries
439-
build-agones-sdk-image: $(ensure-build-image) build-agones-sdk-binary build-licenses build-required-src-dist
432+
build-agones-sdk-image: $(ensure-build-image) build-agones-sdk-binary build-licenses build-required-src-dist build-agones-sdk-image-amd64
433+
ifeq ($(WITH_ARM64), 1)
434+
build-agones-sdk-image: build-agones-sdk-image-arm64
435+
endif
436+
ifeq ($(WITH_WINDOWS), 1)
437+
build-agones-sdk-image: build-agones-sdk-image-windows
438+
endif
439+
440+
build-agones-sdk-image-amd64: $(ensure-build-image) build-agones-sdk-binary
440441
docker build $(agones_path)/cmd/sdk-server/ --tag=$(sidecar_linux_amd64_tag) $(DOCKER_BUILD_ARGS)
442+
build-agones-sdk-image-arm64: $(ensure-build-image) build-agones-sdk-binary
443+
docker buildx build --platform linux/arm64 --build-arg ARCH=arm64 $(agones_path)/cmd/sdk-server/ --tag=$(sidecar_linux_arm64_tag) $(DOCKER_BUILD_ARGS)
441444

445+
build-agones-sdk-image-windows: build-agones-sdk-binary
442446
build-agones-sdk-image-windows: $(foreach winver, $(WINDOWS_VERSIONS), build-agones-sdk-image-windows-$(winver))
443447

444448
# Build the image for the gameserver sidecar and SDK binaries
445449
build-agones-sdk-image-windows-%: $(ensure-build-image) build-agones-sdk-binary build-licenses build-required-src-dist ensure-windows-buildx
446-
# TODO: Use `--builder $(BUILDX_WINDOWS_BUILDER)` later once Docker 19.03.13 is the build target. Cloud Build has 19.03.08 https://cloud.google.com/cloud-build/release-notes
447-
DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build --platform windows/amd64 -f $(agones_path)/cmd/sdk-server/Dockerfile.windows --tag=$(sidecar_tag)-windows_amd64-$* --build-arg WINDOWS_VERSION=$* $(DOCKER_BUILD_ARGS) $(agones_path)/cmd/sdk-server/ $(WINDOWS_DOCKER_PUSH_ARGS)
448-
449-
# Build sidecar image only
450-
build-agones-sdk-server-image: $(ensure-build-image) build-agones-sdk-binary-linux build-licenses build-required-src-dist
451-
docker build $(agones_path)/cmd/sdk-server/ --tag=$(sidecar_linux_amd64_tag) $(DOCKER_BUILD_ARGS)
452-
453-
build-agones-sdk-server-image-windows: $(foreach winver, $(WINDOWS_VERSIONS), build-agones-sdk-server-image-windows-$(winver))
454-
455-
# Build sidecar image only
456-
build-agones-sdk-server-image-windows-%: $(ensure-build-image) build-agones-sdk-binary-linux build-licenses build-required-src-dist ensure-windows-buildx
457-
# TODO: Use `--builder $(BUILDX_WINDOWS_BUILDER)` later once Docker 19.03.13 is the build target. Cloud Build has 19.03.08 https://cloud.google.com/cloud-build/release-notes
458-
DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build $(agones_path)/cmd/sdk-server/ -f $(agones_path)/cmd/sdk-server/Dockerfile.windows --platform windows/amd64 --tag=$(sidecar_tag)-windows_amd64-$* --build-arg WINDOWS_VERSION=$* $(DOCKER_BUILD_ARGS) $(WINDOWS_DOCKER_PUSH_ARGS)
450+
docker buildx build --platform windows/amd64 --builder $(BUILDX_WINDOWS_BUILDER) -f $(agones_path)/cmd/sdk-server/Dockerfile.windows --tag=$(sidecar_tag)-windows_amd64-$* --build-arg WINDOWS_VERSION=$* $(DOCKER_BUILD_ARGS) $(agones_path)/cmd/sdk-server/ $(WINDOWS_DOCKER_PUSH_ARGS)
459451

460452
# Build a static binary for the ping service
461453
build-ping-binary: $(ensure-build-image)
@@ -495,23 +487,37 @@ push-allocator-image: $(ensure-build-image)
495487
build-allocator-image: $(ensure-build-image) build-allocator-binary build-licenses build-required-src-dist
496488
docker build $(agones_path)/cmd/allocator/ --tag=$(allocator_tag) $(DOCKER_BUILD_ARGS)
497489

490+
# build list of images to include in the manifest for the sidecar image.
491+
push_manifest = $(sidecar_linux_amd64_tag)
498492
ifeq ($(WITH_WINDOWS), 1)
493+
push_manifest += $(foreach windows_version, $(WINDOWS_VERSIONS), $(sidecar_tag)-windows_amd64-$(windows_version))
494+
endif
495+
ifeq ($(WITH_ARM64), 1)
496+
push_manifest += $(sidecar_linux_arm64_tag)
497+
endif
498+
499499
# push the gameservers sidecar image
500-
push-agones-sdk-image: push-agones-sdk-linux-image
500+
push-agones-sdk-image: push-agones-sdk-linux-image-amd64
501+
ifeq ($(WITH_WINDOWS), 1)
502+
push-agones-sdk-image: push-agones-sdk-windows
503+
endif
504+
ifeq ($(WITH_ARM64), 1)
505+
push-agones-sdk-image: push-agones-sdk-linux-image-arm64
506+
endif
501507
# Ensure that the sidecar manifest is removed before creating a new one.
502508
-DOCKER_CLI_EXPERIMENTAL=enabled docker manifest rm $(sidecar_tag)
509+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create $(sidecar_tag) $(push_manifest)
510+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push $(sidecar_tag)
511+
512+
push-agones-sdk-windows:
503513
# Using docker buildx with foreign OSes is a bit awkward. Since the layers but not the tag
504514
# was cached we have to rebuild the image (which should be fast since it's cached).
505515
$(MAKE) WINDOWS_DOCKER_PUSH_ARGS=--push build-agones-sdk-image-windows
506-
# Agones should start using the -linux_amd64 suffix for Linux images. This allows multi-arch support in the future.
507-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create $(sidecar_tag) $(sidecar_linux_amd64_tag) $(foreach windows_version, $(WINDOWS_VERSIONS), $(sidecar_tag)-windows_amd64-$(windows_version))
508-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push $(sidecar_tag)
509-
else
510-
push-agones-sdk-image: push-agones-sdk-linux-image
511-
endif
512516

513-
# push the gameservers sidecar image
514-
push-agones-sdk-linux-image: $(ensure-build-image)
517+
push-agones-sdk-linux-image-arm64: $(ensure-build-image)
518+
$(MAKE) DOCKER_BUILD_ARGS=--push build-agones-sdk-image-arm64
519+
520+
push-agones-sdk-linux-image-amd64: $(ensure-build-image)
515521
docker push $(sidecar_linux_amd64_tag)
516522

517523
# Generate the Embedded CRD openapi

‎build/includes/build-image.mk‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ build-build-image:
2929
clean-build-image:
3030
docker rmi $(build_tag)
3131

32+
ensure-arm-builder:
33+
docker run --privileged --rm tonistiigi/binfmt:qemu-v6.2.0 --install arm64
34+
3235
ensure-build-config:
3336
-mkdir -p $(kubeconfig_path)
3437
-mkdir -p $(build_path)/.gocache
@@ -39,6 +42,9 @@ ensure-build-config:
3942
# create the build image if it doesn't exist
4043
ensure-build-image: ensure-build-config
4144
$(MAKE) ensure-image IMAGE_TAG=$(build_tag) BUILD_TARGET=build-build-image
45+
ifeq ($(WITH_ARM64), 1)
46+
ensure-build-image: ensure-arm-builder
47+
endif
4248

4349
# attempt to pull the image, if it exists and rename it to the local tag
4450
# exit's clean if it doesn't exist, so can be used on CI

‎cloudbuild.yaml‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ steps:
2222
# Print Docker version
2323
#
2424

25-
- name: "gcr.io/cloud-builders/docker"
25+
- name: "gcr.io/cloud-builders/docker:20.10.13"
2626
id: docker-version
2727
args: ["--version"]
2828

@@ -51,7 +51,6 @@ steps:
5151
- '--key=$_CPP_SDK_CONFORMANCE_CACHE_KEY-$( checksum sdks/cpp/cmake/prerequisites.cmake )'
5252
waitFor: ['-']
5353

54-
5554
- name: gcr.io/$PROJECT_ID/restore_cache
5655
id: rust-sdk-build-restore-cache
5756
args:
@@ -64,9 +63,9 @@ steps:
6463
#
6564

6665
- name: "ubuntu"
67-
args: ["bash", "-c", "echo 'FROM gcr.io/cloud-builders/docker\nRUN apt-get install make\nENTRYPOINT [\"/usr/bin/make\"]' > Dockerfile.build"]
66+
args: ["bash", "-c", "echo 'FROM gcr.io/cloud-builders/docker:20.10.13\nRUN apt-get install make\nENTRYPOINT [\"/usr/bin/make\"]' > Dockerfile.build"]
6867
waitFor: ['-']
69-
- name: "gcr.io/cloud-builders/docker"
68+
- name: "gcr.io/cloud-builders/docker:20.10.13"
7069
id: build-make-docker
7170
args: ['build', '-f', 'Dockerfile.build', '-t', 'make-docker', '.'] # we need docker and make to run everything.
7271

‎cmd/sdk-server/Dockerfile‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
# limitations under the License.
1414

1515
FROM alpine:3.14
16-
16+
ARG ARCH=amd64
1717
RUN apk --update add ca-certificates && \
1818
adduser -D -u 1000 agones
1919

20-
COPY --chown=agones:agones ./bin/sdk-server.linux.amd64 /home/agones/sdk-server
20+
COPY --chown=agones:agones ./bin/sdk-server.linux.$ARCH /home/agones/sdk-server
2121
COPY --chown=agones:agones ./bin/LICENSES ./bin/dependencies-src.tgz /home/agones/
2222

2323
USER 1000

0 commit comments

Comments
 (0)