【问题标题】:minikube does not start on ubuntu 20.04 LTS. Exiting due to GUEST_PROVISIONminikube 无法在 ubuntu 20.04 LTS 上启动。由于 GUEST_PROVISION 退出
【发布时间】:2021-03-31 11:16:03
【问题描述】:

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

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

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

  1. 安装docker
  2. 将我的用户添加到 docker 组,否则 minkube 启动将失败,因为 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 中使用无根模式,我尝试使用以下方式启动 minikube sudo(这样 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 pruneminikube delete,然后再运行minikube start --driver=docker 吗?
  • 谢谢@mario...这似乎可行;至少我现在可以克服它之前卡住的点。关键可能是docker system prune,这是我之前几次没有尝试过的唯一东西。为了让我学习,您能否详细说明已清理哪些垃圾导致 minkube 无法正常启动?...如果您将其作为答案发布,我将投票支持它,因为它解决了最初的问题。
  • 好的,我将其发布为答案。至于详细解释究竟是什么阻止了您的 minikube 实例启动,我担心这是不可能的,因为它在每种情况下都可能是不同的事情,并且一旦它已经清理完毕无法再调试具体原因了。但让我更新我的答案,并至少提供一个一般性的解释。
  • 检查 docker 日志我看到了这个:[ERROR] Failed to start minikube scheduled stop.... 但是kubectl get all -A 正在显示所有内容并正在运行...我会深入研究它,但一切似乎都在工作。跨度>
  • 您是否在 docker logs 中验证了此条目的确切日期和时间?我只是想知道它是否与之前不成功的 Minikube 容器配置无关。

标签: docker kubernetes minikube


【解决方案1】:

解决办法:

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

docker system prune

然后:

minikube delete

最后:

minikube start --driver=docker

这应该会有所帮助。

说明:

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

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

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

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

根据确切的错误信息判断:

❌  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 数据并删除对不存在文件的损坏引用。上面的消息很清楚的解释了什么是不能做的,即 docker 不能将copy 一个public ssh key 到目标minikube:/home/docker/.ssh/authorized_keys 作为源文件/tmp/tmpf-memory-asset544814591,它试图复制它来自,根本不存在。所以说发生了什么其实很简单,但要知道为什么会发生,可能需要深入了解Docker和Minikube 内部结构,并逐步分析使用--driver=docker 时如何配置Minikube 实例。

您可以尝试分析您的 docker 日志,这很好,但我严重怀疑您会在那里找到不存在的临时文件 /tmp/tmpf-memory-asset544814591 被引用的确切原因,或者为什么它没有被引用不存在。

【讨论】:

  • ... 原来我没有足够的声望 :-(... 等到 15 岁我会回来投票。
  • 非常感谢您详细说明答案...感谢您的提示,我现在在 minikube“集群”中创建了第一个对象。
【解决方案2】:

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

运行以下命令修复此问题

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

sudo groupadd docker

  1. 将用户添加到 docker 组

sudo usermod -aG docker [用户]

  1. 激活对组的更改

newgrp 码头工人

  1. 启动 minikube 集群

minikube 启动

【讨论】:

  • 并不总是正确的答案。请注意原帖的第 2 步,详细步骤已完成:准确地说,该步骤是您声称将解决问题的方法,但当时显然没有解决我的问题。我会坚持下面马里奥的回答。
【解决方案3】:

minikube start --force --driver=docker 为我修复了它

【讨论】:

    【解决方案4】:

    这对我有用 minikube start --driver=docker --container-runtime=containerd

    【讨论】:

      【解决方案5】:

      如果您使用已安装 docker 和 minikube 的 Linux 桌面操作系统,只需运行

      sudo usermod -aG docker $USER
      

      然后重新启动您的计算机。 它对我有用。

      【讨论】:

        【解决方案6】:

        当我尝试在 Ubuntu 20.04 system 上安装 Minikube 时遇到了同样的问题。

        “docker system prune”对我的情况没有帮助,但我发现问题的原因是 /var 安装了 nosuid 选项,我不得不删除它并重新安装 /var .然后 minikube 集群初始化工作。

        我可能太无知了,但我没有发现该信息是必需的。

        【讨论】:

          【解决方案7】:

          重新启动我的 mac 帮助了我。

          我之前遇到了以下错误:

          ❌  Exiting due to DRV DOCKER NOT RUNNING: Found docker, but the docker service isn't running. Try restarting the docker service.
          

          【讨论】:

            【解决方案8】:

            sudo apt-get 更新

            sudo apt-get install docker-ce docker-ce-cli containerd.io

            sudo systemctl 启用泊坞窗

            systemctl 状态泊坞窗

            sudo systemctl 启动/停止泊坞窗

            sudo groupadd docker

            sudo usermod -aG docker user_name --- 将用户添加到 docker 组。

            newgrp docker -- 激活 grp

            minikube start 或 minikube start --driver=docker ---启动 minikube

            【讨论】:

              猜你喜欢
              • 2021-04-14
              • 1970-01-01
              • 1970-01-01
              • 2021-03-06
              • 2021-08-18
              • 2021-03-19
              • 2020-08-10
              • 1970-01-01
              • 2020-12-17
              相关资源
              最近更新 更多