minikube不能在ubuntu20.04LTS上启动。由于GUEST_PROVISION退出

我正在尝试使用 docker 驱动程序在安装了 ubuntu 桌面 20.04 LTS 的 VM 中设置 minikube。

我遵循了此处的步骤,并考虑了 docker 驱动程序的限制(此处报告),这与运行时安全选项有关。当我尝试启动 minikube 时,我得到的错误是:无法启动主机:创建主机:创建:创建:准备 kic ssh:复制 pub 密钥。

这就是我为安装 minikube 的全新 VM 所做的工作。

  1. 安装码头工人
  2. 将我的用户添加到 docker 组,否则 minkube start 将失败,因为 dockerd 以 root 身份运行(即 docker 术语中的 Rootless 模式)。
  3. 安装 kubectl(这不是必需的,但我选择了这个而不是 minikube 中的嵌入式 kubectl)
  4. 安装 minikube

当我启动 minikube 时,这就是我得到的:

ubuntuDesktop:~$ minikube start
  minikube v1.16.0 on Ubuntu 20.04
?  Using the docker driver based on user configuration
  Starting control plane node minikube in cluster minikube
  Creating docker container (CPUs=2, Memory=4500MB) ...
?  Stopping node "minikube"  ...
  Powering off "minikube" via SSH ...
  Deleting "minikube" in docker ...
  StartHost failed, but will try again: creating host: create: creating: prepare kic ssh: copying pub key: docker copy /tmp/tmpf-memory-asset051825440 into minikube:/home/docker/.ssh/authorized_keys, output: lstat /tmp/tmpf-memory-asset051825440: no such file or directory
: exit status 1
  Creating docker container (CPUs=2, Memory=4500MB) ...
  Failed to start docker container. Running "minikube delete" may fix it: creating host: create: creating: prepare kic ssh: copying pub key: docker copy /tmp/tmpf-memory-asset544814591 into minikube:/home/docker/.ssh/authorized_keys, output: lstat /tmp/tmpf-memory-asset544814591: no such file or directory
: exit status 1

?  Exiting due to GUEST_PROVISION: Failed to start host: creating host: create: creating: prepare kic ssh: copying pub key: docker copy /tmp/tmpf-memory-asset544814591 into minikube:/home/docker/.ssh/authorized_keys, output: lstat /tmp/tmpf-memory-asset544814591: no such file or directory
: exit status 1

  If the above advice does not help, please let us know: 
  https://github.com/kubernetes/minikube/issues/new/choose

我怀疑该错误与 docker 驱动程序的安全设置问题有关,但这似乎就像一条狗在追尾巴:如果我不在 docker 中使用 rootless 模式并且我尝试使用 sudo 启动 minikube(所以该 docker 也可以使用特权用户启动),然后我得到了这个:

ubuntuDesktop:~$ sudo minikube start
[sudo] password for alberto: 
  minikube v1.16.0 on Ubuntu 20.04
?  Automatically selected the docker driver. Other choices: virtualbox, none
  The "docker" driver should not be used with root privileges.
  If you are running minikube within a VM, consider using --driver=none:
    https://minikube.sigs.k8s.io/docs/reference/drivers/none/

?  Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.

所以,或者我遗漏了什么,或者 minikube 根本无法与 docker 驱动程序一起使用,我对此表示怀疑。

这是我的环境信息:

ubuntuDesktop:~$ docker version
Client:
 Version:           19.03.11
 API version:       1.40
 Go version:        go1.13.12
 Git commit:        dd360c7
 Built:             Mon Jun  8 20:23:26 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.11
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.12
  Git commit:       77e06fd
  Built:            Mon Jun  8 20:24:59 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

ubuntuDesktop:~$ minikube version
minikube version: v1.16.0
commit: 9f1e482427589ff8451c4723b6ba53bb9742fbb1-dirty

如果有人在 ubuntu 20.04 上使用 minikube 并且可以共享版本和驱动程序,我将不胜感激。使用 minikube 和 docker 站点中的信息,我不知道还需要检查什么才能使其正常工作。

回答

解决方案:

正如我在评论中提到的,您可能只需要运行:

docker system prune

然后:

minikube delete

最后:

minikube start --driver=docker

这应该有帮助。

解释:

尽管正如我在评论中已经提到的那样,很难说在您的特定情况下是什么问题,但这种情况可能是由于之前尝试运行您的Minikube实例不成功而导致的

当使用不同的驱动程序并且它作为虚拟机运行时,有时也会发生这种情况,基本上删除这样的虚拟机可能会有所帮助。平时跑步minikube delete && minikube start就够了。

在这种情况下,当--driver=docker被使用时,您的Minikube实例被配置为您的docker运行时中的容器,但除了容器本身之外,还配置了网络或存储等其他内容。

docker system prune命令删除所有未使用的容器、网络、图像(悬空和未引用)以及可选的卷。所以我们可以肯定地说它是上述之一。

从确切的错误消息来看:

?  Exiting due to GUEST_PROVISION: Failed to start host: creating host: create: creating: prepare kic ssh: copying pub key: docker copy /tmp/tmpf-memory-asset544814591 into minikube:/home/docker/.ssh/authorized_keys, output: lstat /tmp/tmpf-memory-asset544814591: no such file or directory
: exit status 1

我想这可能只是清除一些cached对您有帮助的数据并删除对不存在文件的损坏引用。上述消息解释很清楚什么不能做,也就是码头工人不能copypublic ssh key到目的地minikube:/home/docker/.ssh/authorized_keys作为源文件/tmp/tmpf-memory-asset544814591,它试图将其从复制,根本不存在。因此,这实际上是非常简单的说什么happend但要能告诉为什么它的发生可能需要潜水都深一点泊坞窗Minikube内部和分析如何一步一步Minikube实例正在使用时供应--driver=docker

您可以尝试分析您的docker日志,这是一个很好的观点,但我严重怀疑您是否会在那里找到/tmp/tmpf-memory-asset544814591引用不存在的临时文件或它不存在的确切原因。


回答

问题是 docker驱动程序不应以 root 权限使用。默认情况下,docker 守护进程始终以 root 用户身份运行。要不以 root 用户身份运行 docker 守护进程,请创建一个名为 docker 的 Unix 组并向其中添加用户。当 Docker 守护进程启动时,它会创建一个可由 docker 组成员访问的 Unix 套接字。

运行以下命令来解决这个问题

  1. 如果不存在则创建 docker 组

须藤组添加泊坞窗

  1. 将用户添加到 docker 组

sudo usermod -aG docker [用户]

  1. 激活对组的更改

新组泊坞窗

  1. 启动 minikube 集群

minikube 启动


以上是minikube不能在ubuntu20.04LTS上启动。由于GUEST_PROVISION退出的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>