Skip to main content

Building Multi-Architecture Cluster Images

This article will explain how to use the sealos tool to build cluster images that support multiple architectures (such as amd64 and arm64) and push them to a container image repository.

Step-by-step Instructions

Building the Images

Firstly, we need to build images for both amd64 and arm64 architectures. Using the sealos build command, specify the image tag (including the prefix and version), platform (with the --platform parameter), Dockerfile (with the -f parameter), and context path:

$ sealos build -t $prefix/oci-kubernetes:$version-amd64 --platform linux/amd64   -f Kubefile  .
$ sealos build -t $prefix/oci-kubernetes:$version-arm64 --platform linux/arm64 -f Kubefile .

Here, $prefix represents your image repository address and namespace, and $version is your image version.

Logging into the Container Image Repository

Next, we need to log in to the container image repository so we can push the images later. Use the sealos login command, specify the username, password, and repository domain:

$ sealos login --username $username --password $password $domain

Pushing the Images

Then, we will push the two images we built to the container image repository. Using the sealos push command, specify the image tag:

$ sealos push $prefix/oci-kubernetes:$version-amd64
$ sealos push $prefix/oci-kubernetes:$version-arm64

Creating and Pushing the Image Manifest

Finally, we need to create a manifest that includes these two images and push it to the container image repository. This manifest allows Docker or Kubernetes to automatically select an image that matches the runtime architecture when pulling the image:

$ sealos manifest create $prefix/oci-kubernetes:$version
$ sealos manifest add $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version-amd64
$ sealos manifest add $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version-arm64
$ sealos manifest push --all $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version

With that, the multi-architecture cluster image has been built. In practice, you need to replace $prefix and $version in the commands above according to your container image repository address and namespace, and image version.