The unexpected failure to install Minikube on my Raspberry PI 3

The developer life is not always unicorns and rainbows, we might have great ideas, any absurd experiments we may think of and document, but some other times we have to face the reality, take the hit on the chin and move ahead and silently accept. This is one of those cases where I faced the unexpected failure to install minikube on my Raspberry PI 3 model B (I was not expecting my Rasby to be so old).

Everything started great! from the idea of having Minikube on my Raspberry so that I can remotely monitor and manage using rancher (the article writing on this is on the way). So I started fresh from my beautifully aged Raspberry PI 3 model B (installed a fresh 64bit version of Raspbian) and followed these steps:

Enable the Linux kernel features:

edit /boot/cmdline.txt by adding at the end of the line (NO NEWLINE)

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Install docker:

$> curl -fsSL https://get.docker.com -o get-docker.sh

$> sudo sh get-docker.sh
# Executing docker install script, commit: 66474034547a96caa0a25be56051ff8b726a1b28
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings
+ sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
+ sh -c chmod a+r /etc/apt/keyrings/docker.gpg
+ sh -c echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bullseye stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null

+ sh -c docker version
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:46:41 2023
 OS/Arch:           linux/arm64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:46:41 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.18
  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

Add the user to the docker group and reboot

$> sudo usermod -aG docker d3
$> sudo reboot now

After the reboot verified that docker ps was working as expected

d3@d3host:~ $ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Download Minikube

$> curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64

and Install

$> sudo install minikube-linux-arm64 /usr/local/bin/minikube

I was already tasting the victory! So I decided to run

$> sudo minikube start --vm-driver=none
😄  minikube v1.29.0 on Raspbian 11.6 (arm64)
✨  Using the none driver based on user configuration

❌  Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.26.1 requires conntrack to be installed in root's path

Ok, first notice

$> sudo apt-get install conntrack
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
The following NEW packages will be installed:
  conntrack
0 upgraded, 1 newly installed, 0 to remove and 19 not upgraded.
Need to get 32.4 kB of archives.
After this operation, 100 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main arm64 conntrack arm64 1:1.4.6-2 [32.4 kB]
Fetched 32.4 kB in 0s (212 kB/s)
Selecting previously unselected package conntrack.
(Reading database ... 99222 files and directories currently installed.)
Preparing to unpack .../conntrack_1%3a1.4.6-2_arm64.deb ...
Unpacking conntrack (1:1.4.6-2) ...
Setting up conntrack (1:1.4.6-2) ...
Processing triggers for man-db (2.9.4-2) ...

Re-run!

$> sudo minikube start --vm-driver=none
😄  minikube v1.29.0 on Raspbian 11.6 (arm64)
✨  Using the none driver based on user configuration

⛔  Exiting due to RSRC_INSUFFICIENT_SYS_MEMORY: System only has 909MiB available, less than the required 1800MiB for Kubernetes

I then hardly realized that my Rasby3 needs to get back on the shelf and I should upgrade my hardware by buying a younger one.

Good bye Rasby we had a lot of fun

ps: I will repeat those steps on a Raspberry PI 4

d3

d3 is an experienced Software Engineer/Developer/Architect/Thinker with a demonstrated history of working in the information technology and services industry. Really passionate about technology, programming languages and problem solving. He doesn't like too much the self celebration and prefers to use that time doing something useful ...i.e. coding

You may also like...