Building the minikube ISO

Overview

The minikube ISO is booted by each hypervisor to provide a stable minimal Linux environment to start Kubernetes from. It is based on coreboot, uses systemd, and includes all necessary container runtimes and hypervisor guest drivers.

Prerequisites

  • A recent Go distribution (>=1.16)
  • If you are on Windows, you’ll need Docker to be installed.
  • 4GB of RAM
  • Build tools:
  1. sudo apt-get install build-essential gnupg2 p7zip-full git wget cpio python \
  2. unzip bc gcc-multilib automake libtool locales

Additionally, if you are on Fedora, you will need to install glibc-static:

  1. sudo dnf install -y glibc-static

Downloading the source

  1. git clone https://github.com/kubernetes/minikube.git
  2. cd minikube

Building

  1. $ make buildroot-image
  2. $ make out/minikube.iso

The build will occur inside a docker container. If you want to do this on baremetal, replace make out/minikube.iso with IN_DOCKER=1 make out/minikube.iso. The bootable ISO image will be available in out/minikube.iso.

Using a local ISO image

  1. $ ./out/minikube start --iso-url=file://$(pwd)/out/minikube.iso

Modifying buildroot components

To change which Linux userland components are included by the guest VM, use this to modify the buildroot configuration:

  1. cd out/buildroot
  2. make menuconfig
  3. make

To save these configuration changes, execute:

  1. make savedefconfig

The changes will be reflected in the minikube-iso/configs/minikube_defconfig file.

Adding kernel modules

To make kernel configuration changes and save them, execute:

  1. $ make linux-menuconfig

This will open the kernel configuration menu, and then save your changes to our iso directory after they’ve been selected.

Adding third-party packages

To add your own package to the minikube ISO, create a package directory under iso/minikube-iso/package. This directory will require at least 3 files:

<package name>.mk - A Makefile describing how to download the source code and build the program
<package name>.hash - Checksums to verify the downloaded source code
Config.in - buildroot configuration

For a relatively simple example to start with, you may want to reference the podman package.

Continuous Integration Builds

We publish CI builds of minikube, built at every Pull Request. Builds are available at (substitute in the relevant PR number):

We also publish CI builds of minikube-iso, built at every Pull Request that touches deploy/iso/minikube-iso. Builds are available at:

Last modified June 17, 2021: Changed minimum required Go version to 1.16 in docs (51564f8f9)