Skip to main content

Running ocp on M1 machines

With the release of CRC 2.4.1 it was possible to run on Apple’s latest offering of M1-based machines. However, the support was limited to podman preset. Numerous times we received requests if it would be possible to instead offer an OpenShift that would run on these machines. This has changed with the recently released crc 2.7.1. This blog post will describe the challenges we had to overcome when we decided to add that support.

Background

CRC is a tool that manages the lifecycle of a virtual machine and allows you to run an OpenShift cluster or podman containers on a laptop or local workstation. It can be used on a macOS, Windows or Linux machine. It runs its OpenShift cluster/podman runtime using a disk image built in advance and packaged in what we call a bundle. On each platform, we try to use native hypervisors, such as KVM on Linux, Hyper-V on Windows, and using the virtualization framework on macOS.

Issue of running OCP on M1

Openshift container platform (OCP) uses Red Hat Core OS (RHCOS) which is based on latest RHEL-8 which is compiled for a 64K page size, but Apple M1 processor uses 4K or a maximum size of 16K page sizes link.

How it works

After we provision the Openshift cluster we replaced the RHEL-8 kernel packages to RHEL-9 which doesn’t have issue to boot on Apple M1 machines. Using this kernel it is possible to workaround this issue, and we are able to run the created disk image on M1.

$ rpm -qa | grep kernel
kernel-5.14.0-70.13.1.el9_0.aarch64
kernel-core-5.14.0-70.13.1.el9_0.aarch64
kernel-modules-extra-5.14.0-70.13.1.el9_0.aarch64
kernel-modules-5.14.0-70.13.1.el9_0.aarch64

Where we’re at

Once RHCOS switches to RHEL-9, we don’t need to replace the kernel bits manually and this workaround can be removed.

As usual, we’d like to get as much feedback as possible on all this work!