Skip to content

门泊吴船亦已谋

基于 WSL2 安装 minikube

体验 k8s 比较省事的一个的方法就是直接装 minikube 单机部署。 为了更省事,可以考虑直接在 WSL2 中操作。 省事个锤子,这是折磨。 本文将使用 Podman 作为 minikube 的驱动,而非 Docker。

现在安装 WSL2 已经非常方便了,直接在微软商店下载即可。 本文本来使用的是 Debian 11,然后因为踩坑踩到心态炸了最后换成了 Ubuntu 20.04。 另外注意,Ubuntu 不要升级,否则会跟 Debian 11 一样直接爆炸,不要问我为什么会知道。

更新软件包

直接更新系统中所有的软件包,这个好习惯可以避免许多陈年老坑。 但是这也会带来更多的新坑。

$ sudo apt update
$ sudo apt upgrade

准备工作

安装一些基础软件包,如果你没有的话。

$ sudo apt install curl ca-certificates

安装 Podman

Podman 的安装比 Docker 方便很多,如果系统是 Debian 11 或者 Ubuntu 20.10,那么直接一行命令就好了。

$ sudo apt install podman

但是如果你的 Ubuntu 版本跟我一样为 20.04,那么就要参考官方文档添加 Kubic 仓库的软件源。

安装 minikube

也很方便,直接下载二进制可执行文件扔进 /usr/local/bin 里就行了。

如果你可以科学上网,那么直接使用官网提供的这两行命令。

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube

或者可以使用阿里云团队构建的版本。

$ curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

至于为什么这两段命令明明可以统一成同一种写法然而并没有,是因为我是直接照搬相应文档中的原文。

然后如果系统是 Debian 11,那就还有一件很重要的事情。 截至发文,官方提供的最新的正式版还有一点问题,参考这个 issue。 这个问题在本文发文的五天前才刚刚被解决。 也就是说 v1.23.2 这个版本是不能用的。 于是我直接下载 beta 版结果遇到了其他问题最后我选择放弃并换成了 Ubuntu。

创建 /lib/modules 目录

WSL2 里的这个目录默认是空的。但是有的发行版(比如 Debian)可能根本没有这个目录,然后就会报一些奇奇怪怪的错误。

如果没有的话那就手动建一个。

sudo mkdir /lib/modules

修改 sudoers

有一个莫名其妙的问题是,minikube 本身不需要 sudo 权限,Podman 也可以不需要,但是奇怪的是启动 minikube 的时候会去跑 rootfull 的 Podman。 我看到有人提了这个 issue,应该还需要一段时间解决。 官方文档则是建议修改 /etc/sudoerspodman 命令配置 sudo 免密。 于是我不想深究这个问题,我决定直接配置所有的命令都 sudo 免密。

于是打开 /etc/sudoers,找到 sudo 的用户组并配置免密。 大致如下:

%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

修改 Podman 配置

目前 minikube 只支持使用 rootfull 的 Podman。 于是我们先直接偷一份 Podman 提供的默认配置文件拷贝到 rootfull 模式的配置目录下。

$ sudo cp /usr/share/containers/containers.conf /etc/containers/containers.conf

然后因为 WSL2 的环境比较离谱,它没有 systemd。 所以我们需要修改这个配置文件中的一些内容:

  • cgroup_manager 设置为 cgroupfs
  • events_logger 设置为 file

修改 iptables

Debian 10 之后就把 iptables 改为了 nftables。 但是无论是 Docker 还是 Podman 暂时都不支持 nftables。 这个问题在 Ubuntu 上也同样存在。 因此我们先使用旧版的 iptables。

$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
$ sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

启动 minikube

接下来就很简单了,直接启动 minikube。 很舒服的是 minikube 支持配置镜像。 于是我们直接使用阿里云镜像。

$ minikube start --image-mirror-country cn --registry-mirror=<aliyun-registry-mirror>

其中的 --registry-mirror 参数你需要指定为你自己的阿里云镜像加速器地址,参考阿里云镜像服务

删库跑路

如果你在安装的过程遇到更离谱的问题,或者新版本有所不同,那么你可能很需要知道怎么把这些垃圾全部删除并恢复原状。

卸载 minikube

删除所有的容器,以及下载下来的 Docker 镜像。

$ minikube delete --all --purge

删除 minikube 的可执行文件。

$ sudo rm /usr/local/bin/minikube

卸载 Podman

$ sudo apt purge podman