在尝试于特定的系统环境下安装 minikube 的过程中,真可谓是充满了重重波折。在此,我将整个安装过程详细地记录下来,希望能够为那些遇到类似问题的朋友们提供一些有价值的参考。我的系统环境是在 pve 中通过 Lxc 虚拟出来的 ubuntu 22.04 系统。
按照官方文档 minikube start | minikube (k8s.io) 的指引进行操作,在这个过程中,可能需要进行一些特殊的网络设置(相信大家都明白,这里可能需要借助所谓的 “魔法” 才能顺利进行下去)。
首先,执行命令 curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64。原本满心期待着这个过程能够顺利进行,然而,结果却令人大失所望,系统中竟然没有 curl。那好吧,只能先安装 curl。于是,执行 apt install curl,没想到这一步又报错了。经过一番艰难的摸索,我终于发现,先执行 apt update,然后再进行 curl 的安装,就可以顺利完成了。
接着,执行 install minikube-linux-amd64 /usr/local/bin/minikube。这个命令执行得异常迅速,而且没有任何输出内容。当时,我就觉得十分奇怪,按照常理来说,不应该如此之快就完成了。后来,经过一番思考才明白,原来真正的一系列安装和配置动作是在执行 minikube start 的时候才会开始。
随后,执行 minikube start。果不其然,报错了。提示信息显示不能使用 root 用户运行。于是,我加上了 --driver = none 参数再次进行尝试,结果又提示缺少 conntrack。没办法,只能先执行 apt install conntrack。幸运的是,这个安装过程还算比较顺利。
然而,新的问题又接踵而至。这次提示缺少 crictl。这个软件似乎不能直接通过 apt install 来进行安装。于是,我前往 https://github.com/kubernetes-sigs/cri-tools/releases 下载了 crictl-v1.31.0-linux-amd64.tar.gz。下载完成后,需要将其解压到 /usr/local/bin 目录下。这里有两种方法,一种是可以使用 ssh 直接将在 windows 上解压后的 crictl 文件放到这个目录,另一种是使用命令 sudo tar zxvf crictl-v1.31.0-linux-amd64.tar.gz -C /usr/local/bin。可能还需要给它添加执行权限,即执行 chmod +x /usr/local/bin/crictl。完成这些操作后,执行 crictl --version 进行测试。
这时候,我又突然想到,好像还需要安装一个 kubectl。按照如下步骤进行安装:
首先执行 curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl";
然后执行 chmod +x./kubectl;
最后执行 sudo mv./kubectl/usr/local/bin/kubectl。
安装完成后,执行 kubectl version --client 进行测试。
接着,再次执行 minikube start --vm-driver = none --image-repository = registry.cn-hangzhou.aliyuncs.com/google_containers。结果,又提示缺少 cri-dockerd。我只好前往 Releases・Mirantis/cri-dockerd (github.com) 下载 cri-dockerd-0.3.14.amd64.tgz,然后将其放在 /usr/local/bin 目录下。
本以为这次能够顺利进行了,没想到又提示缺少 containernetworking-plugins。于是,又去 Releases・containernetworking/plugins (github.com) 下载 cni-plugins-linux-amd64-v1.5.1.tgz。按照官方文档 FAQ | minikube (k8s.io) 的指示进行操作:
首先设置 CNI_PLUGIN_VERSION = "<version_here>";
接着设置 CNI_PLUGIN_TAR = "cni-plugins-linux-amd64-$CNI_PLUGIN_VERSION.tgz"(如果不是在 amd64 架构上,需要更改架构名称);
再设置 CNI_PLUGIN_INSTALL_DIR = "/opt/cni/bin"。
然后执行 curl -LO "https://github.com/containernetworking/plugins/releases/download/ CNI_PLUGIN_TAR";
接着执行 sudo mkdir -p " CNI_PLUGIN_TAR" -C " CNI_PLUGIN_TAR"。
我将解压后的文件放到了新建的 /opt/cni/bin 目录下。
然后再次运行 minikube start,结果又报错了:X Exiting due to RT_DOCKER_MISSING_CRI_DOCKER_NONE: sudo systemctl enable cri-docker.socket: exit status 1。
经过一番艰苦的查找资料,终于找到了解决方法。首先,创建 cri-docker.service 配置文件,使用 vi /lib/systemd/system/cri-docker.service 命令,然后复制以下内容:
[Unit]
Description = CRI Interface for Docker Application Container Engine
Documentation = https://docs.mirantis.com
After = network-online.target firewalld.service docker.service
Wants = network-online.target
Requires = cri-docker.socket
[Service]
Type = notify
ExecStart = /usr/bin/cri-dockerd --network-plugin = cni --pod-infra-container-image = registry.aliyuncs.com/google_containers/pause:3.7
ExecReload = /bin/kill -s HUP $MAINPID
TimeoutSec = 0
RestartSec = 2
Restart = always
StartLimitBurst = 3
StartLimitInterval = 60s
LimitNOFILE = infinity
LimitNPROC = infinity
LimitCORE = infinity
TasksMax = infinity
Delegate = yes
KillMode = process
[Install]
WantedBy = multi-user.target
接着,创建 cri-docker.socket 配置文件,使用 vi /lib/systemd/system/cri-docker.socket 命令,并复制以下内容:
[Unit]
Description = CRI Docker Socket for the API
PartOf = cri-docker.service
[Socket]
ListenStream = %t/cri-dockerd.sock
SocketMode = 0660
SocketUser = root
SocketGroup = docker
[Install]
WantedBy = sockets.target
完成配置文件创建后,启动相关服务:
systemctl daemon-reload
systemctl start docker.service
systemctl enable cri-docker
systemctl status docker.service
最后再次执行 minikube start --image-mirror-country = cn --driver = none。在这里,我发现了一个奇怪的现象,使用了 “魔法” 后,使用 --image-mirror-country = cn 或者上面的阿里云镜像都特别慢,反而直接去掉这个参数速度会快一些。
但是,问题还是没有完全解决,运行 kubectl get po -A 时仍然报错。
过了一夜,我开始怀疑是不是不能在 LXC 这种环境中安装 minikube 呢?于是,我又尝试在完整的 ubuntu server 中进行安装。安装过程和在 LXC 环境中差不多,也遇到了一些问题,其中有一次报错 Exiting due to NOT_FOUND_DOCKERD:,并且有 Suggestion: 提示信息:The none driver with Kubernetes v1.24 + and the docker container-runtime requires dockerd.。我当时就很疑惑,因为执行 docker --version 是有输出的,显示 Docker version 24.0.5, build ced0996。经过仔细排查,最终确定是没有安装 docker(因为这个 ubuntu 虚拟机是从别的地方备份还原的,之前看到有 docker 版本信息就以为安装过了)。这里要注意,这个 dockerd 是 docker 的守护进程 Docker daemon,我起初还以为是另一个软件呢。于是执行 apt install docker.io 安装 docker,然后启动 docker 服务:systemctl start docker,并查看其状态 systemctl status docker。
在ubuntu系统环境下安装 Minikube 的波折历程分享
本文来自投稿,不代表本站立场,如若转载,请注明出处: