⚙️
Minikube on M1 Mac without Docker
0. Prerequisite
- Install Homebrew.
- Minimum knowledge of Docker and Podman is preferred.
FYI:
Minikube on M1 Mac with Docker
PC Info
- Information on the PC used is as follows.
OS: macOS Monterey(v12.6)
Device: MacBook Pro (13-inch, M1, 2020)
Chip: Apple M1
Memory: 16GB
1. Check Homebrew version
% which brew
/opt/homebrew/bin/brew
% brew -v
Homebrew 3.6.2
Homebrew/homebrew-core (git revision 7cb0fad3396; last commit 2022-09-19)
%
2. Install podman with Homebrew on macOS
% brew install podman
% brew install podman-desktop
% brew list | grep podman
podman
podman-desktop
%
% which podman
/opt/homebrew/bin/podman
% podman -v
podman version 4.2.1
%
3. Initialize and start the virtual machine for Podman
- Podman on MacOS and Windows requires a virtual machine.
-
podman machine init
command initializes a new Linux virtual machine where containers are run. -
podman machine start
command starts a Linux virtual machine where containers are run.
% podman machine init --cpus 4 --memory 8192 --rootful
Extracting compressed file
Image resized.
Machine init complete
To start your machine run:
podman machine start
%
% podman machine start
Starting machine "podman-machine-default"
...
...
Machine "podman-machine-default" started successfully
%
% podman machine ls
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default qemu 3 minutes ago Currently running 4 8.59GB 107.4GB
%
ERROR: RSRC_INSUFFICIENT_CORES
- If the number of CPUs is
less than 2
, the following error occurs.
% podman machine ls
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default* qemu 12 minutes ago Currently running 1 2.147GB 107.4GB
%
% minikube start --driver=podman
😄 minikube v1.27.0 on Darwin 12.6 (arm64)
❗ Kubernetes 1.25.0 has a known issue with resolv.conf. minikube is using a workaround that should work for most use cases.
❗ For more information, see: https://github.com/kubernetes/kubernetes/issues/112135
✨ Using the podman (experimental) driver based on user configuration
⛔ Exiting due to RSRC_INSUFFICIENT_CORES: Requested cpu count 2 is greater than the available cpus of 1
%
4. Install kubectl with Homebrew on macOS
FYI:
% brew install kubectl
...
...
% which kubectl
/opt/homebrew/bin/kubectl
%
5. Install minikube with Homebrew on macOS
FYI:
% brew install minikube
...
...
% which minikube
/opt/homebrew/bin/minikube
% minikube version
minikube version: v1.27.0
commit: 4243041b7a72319b9be7842a7d34b6767bbdac2b
%
If the Docker Service has not been started beforehand, an error will occur when executing the command.
6. minikube start with podman driver
- If the virtual machine for podman is not running, an error occurs when executing the
minikube start
command.
FYI:
% minikube start --driver=podman
😄 minikube v1.27.0 on Darwin 12.6 (arm64)
❗ Kubernetes 1.25.0 has a known issue with resolv.conf. minikube is using a workaround that should work for most use cases.
❗ For more information, see: https://github.com/kubernetes/kubernetes/issues/112135
✨ Using the podman (experimental) driver based on user configuration
📌 Using Podman driver with root privileges
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
E1002 04:11:17.167893 13357 cache.go:203] Error downloading kic artifacts: not yet implemented, see issue #8426
🔥 Creating podman container (CPUs=2, Memory=4000MB) ...
🐳 Preparing Kubernetes v1.25.0 on Docker 20.10.17 ...E1002 04:13:08.392703 13357 start.go:129] Unable to get host IP: RoutableHostIPFromInside is currently only implemented for linux
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
%
% kubectl version --output=yaml
clientVersion:
buildDate: "2022-09-14T19:40:59Z"
compiler: gc
gitCommit: e4d4e1ab7cf1bf15273ef97303551b279f0920a9
gitTreeState: clean
gitVersion: v1.25.1
goVersion: go1.19.1
major: "1"
minor: "25"
platform: darwin/arm64
kustomizeVersion: v4.5.7
serverVersion:
buildDate: "2022-08-23T17:38:15Z"
compiler: gc
gitCommit: a866cbe2e5bbaa01cfd5e969aa3e033f3282a8a2
gitTreeState: clean
gitVersion: v1.25.0
goVersion: go1.19
major: "1"
minor: "25"
platform: linux/arm64
%
% kubectl get namespace
NAME STATUS AGE
default Active 113s
kube-node-lease Active 115s
kube-public Active 115s
kube-system Active 115s
%
% kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 13m v1.25.0
%
% kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-bp4bs 1/1 Running 0 12m
kube-system etcd-minikube 1/1 Running 0 13m
kube-system kube-apiserver-minikube 1/1 Running 0 13m
kube-system kube-controller-manager-minikube 1/1 Running 0 13m
kube-system kube-proxy-brggr 1/1 Running 0 12m
kube-system kube-scheduler-minikube 1/1 Running 0 13m
kube-system storage-provisioner 1/1 Running 1 (12m ago) 13m
%
% kubectl get services -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 13m
%
% podman machine ls
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default qemu 32 minutes ago Currently running 4 8.59GB 107.4GB
% podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be9a848a2099 gcr.io/k8s-minikube/kicbase:v0.0.34 28 minutes ago Up 28 minutes ago 0.0.0.0:44209->22/tcp, 0.0.0.0:34525->2376/tcp, 0.0.0.0:45215->5000/tcp, 0.0.0.0:33109->8443/tcp, 0.0.0.0:39931->32443/tcp minikube
% podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be9a848a2099 gcr.io/k8s-minikube/kicbase:v0.0.34 29 minutes ago Up 29 minutes ago 0.0.0.0:44209->22/tcp, 0.0.0.0:34525->2376/tcp, 0.0.0.0:45215->5000/tcp, 0.0.0.0:33109->8443/tcp, 0.0.0.0:39931->32443/tcp minikube
%
Screenshot
7. Run a particular image on the minikube cluster
% kubectl run nginx --image=nginx --restart=Never
pod/nginx created
%
% kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 11s
%
% kubectl exec -it nginx -- /bin/bash
root@nginx:/#
root@nginx:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 100G 4.2G 96G 5% /
tmpfs 64M 0 64M 0% /dev
/dev/vda4 100G 4.2G 96G 5% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 7.8G 12K 7.8G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 3.9G 0 3.9G 0% /proc/acpi
tmpfs 3.9G 0 3.9G 0% /proc/scsi
tmpfs 3.9G 0 3.9G 0% /sys/firmware
root@nginx:/#
root@nginx:/# curl -sS http://localhost | grep title
<title>Welcome to nginx!</title>
root@nginx:/#
root@nginx:/# exit
exit
%
Discussion