Multi Architecture

this part is evolving quickly during development of version 2 so it may be slightly inaccurate.

Since version 2, Camel K is publishing an ARM64 architecture beside the default AMD64 architecture. You can build your particular architecture from source as well, following the guidelines in Local development.

Install Camel K ARM64 operator

From version 2.3 onward, the ARM64 architecture is published beside the AMD64 in a Docker manifest. Your platform should be able to pick up the platform target architecture accordingly using the usual installation procedure.

The logs should indicate the architecture at the start of the operator pod:

{"level":"info","ts":"2023-12-19T16:40:31Z","logger":"camel-k.cmd","msg":"Go Version: go1.21.0"}
{"level":"info","ts":"2023-12-19T16:40:31Z","logger":"camel-k.cmd","msg":"Go OS/Arch: linux/arm64"}
{"level":"info","ts":"2023-12-19T16:40:31Z","logger":"camel-k.cmd","msg":"Camel K Operator Version: 2.1.0"}

Example

The operator will by default build integrations for the same platform it is running on. It is however also possible to explicitly define the set of target platforms integrations should be built for. You can use builder.platforms trait option to control this behavior.

you can set the property at IntegrationPlatform level to have it for all Integrations.

Send the integration to the kamel operator to build, publish and run it

kamel run hello.yaml -t builder.platforms=linux/arm64 -t builder.platforms=linux/amd64

You should observe base image in the logs of the operator pod:

...
{"level":"info","ts":"2023-12-19T17:10:05Z","logger":"camel-k","msg":"spectrum - 2023/12/19 17:10:05 Pulling base image eclipse-temurin:17@sha256:bbc153da9e6041c65f0d4cdc7ef03eec174c9a74c8852c838582b579081c99c1 (insecure=false)..."}
...
you may need to start a new platform image from scratch disabling incremental image in order to avoid using a base image which was built against a different set of platforms.