在 Mac 上使用 minikube 和 Podman 运行 Kubernetes
背景
原因是这几天想在本地测 eBPF,需要一个 Kubernetes 集群。 发现 minikube 用的人比较多,所以就试了一下。 没有使用 Docker for Mac
的原因就是讨厌这个项目。
我的环境
- 我的电脑:
MacBook Pro (14-inch, 2021)
,Ventura 13.2
,M1 Max (ARM64,aarch64)
Podman
更详细的 文档
安装 Podman
bash
brew install podman
查看版本信息
bash
podman version
# 输出结果
Client: Podman Engine
Version: 4.4.2
API Version: 4.4.2
Go Version: go1.20.1
Git Commit: 74afe26887f814d1c39925a1624851ef3590e79c
Built: Thu Feb 23 23:59:21 2023
OS/Arch: darwin/arm64
Server: Podman Engine
Version: 4.4.1
API Version: 4.4.1
Go Version: go1.19.5
Built: Thu Feb 9 18:57:43 2023
OS/Arch: linux/arm64
运行 Podman Machine
bash
# 初始化 Podman Machine 的虚拟机环境
podman machine init --cpus 2 --memory 4096 --disk-size 4
# 启动虚拟机环境
podman machine start
# 查看虚拟机列表
podman machine list
# 输出结果
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default* qemu 10 hours ago Currently running 2 4.295GB 42.95GB
Hello World
在这里 我使用 hello-world
镜像测一下 Podman 是否能正常使用。
bash
podman run hello-world
# 输出结果
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Project: https://github.com/containers/podman
Website: https://podman.io
Documents: https://docs.podman.io
Twitter: @Podman_io
minikube
更详细的 文档
安装 minikube
bash
brew install minikube
查看版本信息
bash
minikube version
# 输出结果
minikube version: v1.29.0
commit: ddac20b4b34a9c8c857fc602203b6ba2679794d3
创建 Kubernetes 集群
- 我在
Mac
上安装使用minikube
默认安装kubernetes version
为1.26.1
会失败 原因是阿里云没有同步该版本(2022-03-01 )。 minikube v1.29.0
默认使用kicbase: v0.0.37
,这个镜像阿里云也没有同步 所以我使用了kicbase: v0.0.36
。- 如果网络上没有问题。可以直接用国外的镜像和源。这样可以直接使用最新版本的镜像。
国内
如果网络差点意思就使用国内的源
bash
minikube start \
--driver=podman \
--container-runtime=containerd \
--image-mirror-country=cn \
--kubernetes-version=1.26.0 \
--base-image=registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.36
国外
如果网络畅通无阻
bash
minikube start \
--driver=podman \
--container-runtime=containerd
输出结果
bash
😄 minikube v1.29.0 on Darwin 13.2 (arm64)
✨ Using the podman (experimental) driver based on user configuration
✅ Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
📌 Using rootless Podman driver
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
> registry.cn-hangzhou.aliyun...: 347.52 MiB / 347.52 MiB 100.00% 4.64 Mi
E0301 21:08:02.911942 24959 cache.go:188] Error downloading kic artifacts: not yet implemented, see issue #8426
🔥 Creating podman container (CPUs=2, Memory=3851MB) ...
📦 Preparing Kubernetes v1.26.0 on containerd 1.6.9 ...
> kubectl.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubeadm.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubelet.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubectl: 44.31 MiB / 44.31 MiB [--------------] 100.00% 3.79 MiB p/s 12s
> kubelet: 111.34 MiB / 111.34 MiB [------------] 100.00% 6.62 MiB p/s 17s
> kubeadm: 43.31 MiB / 43.31 MiB [--------------] 100.00% 2.52 MiB p/s 17s
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔗 Configuring CNI (Container Networking Interface) ...
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
🔎 Verifying Kubernetes components...
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
查看集群状态
bash
# 使用 Mac 环境下的 kubectl 查看集群状态
# 可以使用 brew install kubectl 安装 kubectl
kubectl get nodes
# 输出结果
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 4m17s v1.26.0
# 使用 minikube kubectl 查看集群状态
minikube kubectl -- get nodes -A
# 输出结果
> kubectl.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubectl: 50.78 MiB / 50.78 MiB [------------] 100.00% 33.50 MiB p/s 1.7s
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 77m v1.26.0
删除集群
bash
minikube delete --all --purge
# 如果本地还管理其他集群,不要执行该操作。
rm -rf ~/.kube
rm -rf ~/.minikube
重启集群
如果 Mac 关机 重启后重新执行该命令即可。
bash
podman machine start
minikube start \
--driver=podman \
--container-runtime=containerd \
--image-mirror-country=cn \
--kubernetes-version=1.26.0 \
--base-image=registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.36
输出结果
bash
😄 minikube v1.29.0 on Darwin 13.2.1 (arm64)
🆕 Kubernetes 1.26.1 is now available. If you would like to upgrade, specify: --kubernetes-version=v1.26.1
✨ Using the podman (experimental) driver based on existing profile
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
E0302 19:52:38.602523 2690 cache.go:188] Error downloading kic artifacts: not yet implemented, see issue #8426
🔄 Restarting existing podman container for "minikube" ...
📦 Preparing Kubernetes v1.26.0 on containerd 1.6.9 ...
🔗 Configuring CNI (Container Networking Interface) ...
🔎 Verifying Kubernetes components...
▪ Using image docker.io/kubernetesui/dashboard:v2.7.0
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
▪ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
💡 Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
🌟 Enabled addons: storage-provisioner, default-storageclass, dashboard
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default