Minikube踩坑实录(血泪记录)!

本文记录了作者在Ubuntu 20.04上使用Minikube时遇到的错误,包括docker用户组问题、初始化失败、kubeadm配置错误等。解决方法包括添加用户到docker组、手动执行kubeadm init、启用kubelet.service等。最终成功启动Minikube集群,但提醒读者注意端口占用和可能需要的额外配置。
摘要由CSDN通过智能技术生成

本文主要介绍作者在执行minikube start时产生的各种错误!

前言

我还记得初次看到在minikube官网上对minikube如此简单明了的安装步骤感到高兴时的心情。特别是经过按照官网的步骤进行下载安装完美成功之后尤其兴奋。
安装:

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

奈何,快乐的时光总是短暂的,直到我遇到了:

minikube start --driver=docker

此命令一出,快乐时光悄然而逝~
首先映入眼帘的错误 便是docker用户组的问题,类似:
The “docker” driver should not be used with root privileges。
还好该错误有响应解决方案提示:

sudo usermod -aG docker $USER && newgrp docker

另一种解决方案:

sudo minikube start --force --driver=docker

噢,忘记了说我电脑类型:
ubuntu20.04
在解决了这个小问题后,我以为事情就应该到此结束,快乐的日子可以回来了,没想到作者还是太天真了,以为官网的介绍三言两语简简单单就完事了,现实也会如此~~
直到我再次执行start命令后,出现的满屏错误信息搞的我头皮发麻,信息太多,贴一些关键信息算了:
初始化失败错误:

initialization failed, will try again: wait: /bin/bash -c “sudo env PATH=/var/lib/minikube/binaries/v1.22.1:$PATH kubeadm init --config /var/tmp/minikube/kubeadm.yaml --ignore-preflight-errors=DirAvailable–etc-kubernetes-manifests,DirAvailable–var-lib-minikube,DirAvailable–var-lib-minikube-etcd,FileAvailable–etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable–etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable–etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable–etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,Mem,SystemVerification,FileContent–proc-sys-net-bridge-bridge-nf-call-iptables”: Process exited with status

验证失败:

The system verification failed
[preflight] You can also perform this action in beforehand using ‘kubeadm config images pull’
stderr:
[WARNING SystemVerification]: failed to parse kernel config: unable to load kernel module: “configs”, output: “modprobe: FATAL: Module configs not found in directory /lib/modules/5.11.0-27-generic\n”, err: exit status 1
[WARNING Service-Kubelet]: kubelet service is not enabled, please run ‘systemctl enable kubelet.service’
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4: output: Error response from daemon: manifest for registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4 not found: manifest unknown: manifest unknown
, error: exit status 1

开启 cluster 时出错:

wait: /bin/bash -c “sudo env PATH=/var/lib/minikube/binaries/v1.22.1:$PATH kubeadm init --config /var/tmp/minikube/kubeadm.yaml --ignore-preflight-errors=DirAvailable–etc-kubernetes-manifests,DirAvailable–var-lib-minikube,DirAvailable–var-lib-minikube-etcd,FileAvailable–etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable–etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable–etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable–etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,Mem,SystemVerification,FileContent–proc-sys-net-bridge-bridge-nf-call-iptables”: Process exited with status 1

主要是这几类,其它零零散散的就不贴了,现在说下原因及解决办法。
最新版本的minikube官网没有介绍安装时的前置条件,也许有但是我没找到(2021-9-9),之前晚上看到有些博客的教程上面会说在安装minikube的时候,会自动帮我们安装如:kubectl等一些工具,实际上我这里没有,是根据错误信息自己安装的,所以在安装minikube之前可以提前安装如下工具包(但是也不排除是我系统的问题,导致这些安装失败,这些都是通过snap安装):
1.kubectl
2.kubeadm
3.kubelet

话说回来,当遇到这么多的问题,只能是一个一个解决了,由于第一个提示的问题是初始化失败,所以后面的一些问题可能是初始化失败而引起的(后面证明,我这里的这些确实是。)

根据提示,作者发现初始化失败是由于执行那一长串的命令失败的:

/bin/bash -c “sudo env PATH=/var/lib/minikube/binaries/v1.22.1:$PATH kubeadm init --config /var/tmp/minikube/kubeadm.yaml --ignore-preflight-errors=DirAvailable–etc-kubernetes-manifests,DirAvailable–var-lib-minikube,DirAvailable–var-lib-minikube-etcd,FileAvailable–etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable–etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable–etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable–etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,Mem,SystemVerification,FileContent–proc-sys-net-bridge-bridge-nf-call-iptables”

所以,我们把它拎出来,单独执行一次,发现它输出如下错误:

unable to read config from “/var/tmp/minikube/kubeadm.yaml” : open /var/tmp/minikube/kubeadm.yaml: no such file or directory
To see the stack trace of this error execute with --v=5 or higher

提示信息为读取不到配置文件,然后我们去对应的地方查找,确实不存在该文件,并且通过上面执行的命令可以看到,该配置是被kubeadm执行的。
可以先看下kubeadm说明:

Usage:
  kubeadm [command]

Available Commands:
  certs       Commands related to handling kubernetes certificates
  completion  Output shell completion code for the specified shell (bash or zsh)
  config      Manage configuration for a kubeadm cluster persisted in a ConfigMap in the cluster
  help        Help about any command
  init        Run this command in order to set up the Kubernetes control plane
  join        Run this on any machine you wish to join an existing cluster
  kubeconfig  Kubeconfig file utilities
  reset       Performs a best effort revert of changes made to this host by 'kubeadm init' or 'kubeadm join'
  token       Manage bootstrap tokens
  upgrade     Upgrade your cluster smoothly to a newer version with this command
  version     Print the version of kubeadm

Flags:
      --add-dir-header           If true, adds the file directory to the header of the log messages
  -h, --help                     help for kubeadm
      --log-file string          If non-empty, use this log file
      --log-file-max-size uint   Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --one-output               If true, only write logs to their native severity level (vs also writing to each lower severity level)
      --rootfs string            [EXPERIMENTAL] The path to the 'real' host root filesystem.
      --skip-headers             If true, avoid header prefixes in the log messages
      --skip-log-headers         If true, avoid headers when opening log files
  -v, --v Level                  number for the log level verbosity

可以看到确实存在一个init命令,那我们来手动执行下看看会发生什么:

sudo kubeadm init

I0909 08:48:40.745365 17135 version.go:254] remote version is much newer: v1.22.1; falling back to: stable-1.21
[init] Using Kubernetes version: v1.21.4
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING FileExisting-socat]: socat not found in system path
[WARNING Service-Kubelet]: kubelet service is not enabled, please run ‘systemctl enable kubelet.service’
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR KubeletVersion]: couldn’t get kubelet version: cannot execute ‘kubelet --version’: executable file not found in $PATH
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...

可以看到其中有一条信息说我们的kubelet.service不可用,那我们来手动执行该命令:

systemctl enable kubelet.service

执行成功:

Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /lib/systemd/system/kubelet.service.

我们再次执行kubeadm init命令:sudo kubeadm init,它提示如下错误信息:

I0909 08:51:05.861751 23766 version.go:254] remote version is much newer: v1.22.1; falling back to: stable-1.21
[init] Using Kubernetes version: v1.21.4
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING FileExisting-socat]: socat not found in system path
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR Port-10250]: Port 10250 is in use
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher

我们着重看error错误,它提示我们有一个10250端口已经被使用,其它并没有致命的错误,所以我猜测可能是之前执行start时残留的,于是可以执行minikube delete命令,然后重新start尝试:

minikube delete
minikube start --driver=docker

minikube start命令任然需要经过一段时间的等待,毕竟谁让我们的墙那么的坚不可摧呢~
若干时间后,提示成功:

😄 Ubuntu 20.04 上的 minikube v1.23.0
✨ 根据用户配置使用 docker 驱动程序
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image …
❗ minikube was unable to download gcr.io/k8s-minikube/kicbase:v0.0.26, but successfully downloaded kicbase/stable:v0.0.26 as a fallback image
🔥 Creating docker container (CPUs=2, Memory=3900MB) …
❗ This container is having trouble accessing https://k8s.gcr.io
💡 To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
🐳 正在 Docker 20.10.8 中准备 Kubernetes v1.22.1…
▪ 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

虽然这些错在现在描述来看,解决方式简简单单,但是在初次接触这个过程中遇到这些的痛苦任然让人记忆深刻。

共勉~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值