【问题标题】:Unable to start minikube on Mac M1 with docker无法使用 docker 在 Mac M1 上启动 minikube
【发布时间】:2022-01-06 15:20:07
【问题描述】:

在使用自制软件 (brew install minikube) 安装 minikube 后,我尝试在 Mac M1 (macOs Monterey V12.0.1) 上启动 minikube,但运行 minikube start 后出现错误。

日志中的错误是这个:

????  initialization failed, will try again: wait: /bin/bash -c "sudo env PATH="/var/lib/minikube/binaries/v1.22.3:$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
stdout:
[init] Using Kubernetes version: v1.22.3
[preflight] Running pre-flight checks

stderr:
    [WARNING Swap]: running with swap on is not supported. Please disable swap
    [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': exit status 255
[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 starting cluster: wait: /bin/bash -c "sudo env PATH="/var/lib/minikube/binaries/v1.22.3:$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
stdout:
[init] Using Kubernetes version: v1.22.3
[preflight] Running pre-flight checks

stderr:
    [WARNING Swap]: running with swap on is not supported. Please disable swap
    [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': exit status 255
[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


╭───────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│    ????  If the above advice does not help, please let us know:                             │
│    ????  https://github.com/kubernetes/minikube/issues/new/choose                           │
│                                                                                           │
│    Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────╯

❌  Exiting due to GUEST_START: wait: /bin/bash -c "sudo env PATH="/var/lib/minikube/binaries/v1.22.3:$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
stdout:
[init] Using Kubernetes version: v1.22.3
[preflight] Running pre-flight checks

stderr:
    [WARNING Swap]: running with swap on is not supported. Please disable swap
    [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': exit status 255
[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


╭───────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│    ????  If the above advice does not help, please let us know:                             │
│    ????  https://github.com/kubernetes/minikube/issues/new/choose                           │
│                                                                                           │
│    Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────╯

我尝试通过运行 sysctl enable kubelet.service 来启用 kubelet.service,但没有改变任何东西。我还安装了 kubeclt 版本 1.22

【问题讨论】:

    标签: macos docker kubernetes


    【解决方案1】:

    我能够找到解决问题的方法,但我不确定主要问题是什么,似乎与用户主目录中 .minikube 文件夹中的旧配置有关。

    要修复它,首先我必须在 docker desktop 中启用 Kubernetes,然后我必须停止并删除 minikube 集群,最后删除该目录。然后再次运行命令就成功了。

    修复:

    $ minikube stop
    $ minikube delete
    $ rm -rf ~/.minikube/
    $ minikube start
    
    ?  minikube v1.24.0 on Darwin 12.0.1 (arm64)
    ✨  Automatically selected the docker driver
    ?  Starting control plane node minikube in cluster minikube
    ?  Pulling base image ...
    ?  Creating docker container (CPUs=2, Memory=1988MB) ...
        > kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
        > kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
        > kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
        > kubeadm: 40.50 MiB / 40.50 MiB [-------------] 100.00% 29.75 MiB p/s 1.6s
        > kubectl: 41.44 MiB / 41.44 MiB [-------------] 100.00% 21.39 MiB p/s 2.1s
        > kubelet: 107.26 MiB / 107.26 MiB [-----------] 100.00% 27.70 MiB p/s 4.1s
    
        ▪ 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
    

    【讨论】:

      【解决方案2】:

      首先 Mac 机器默认启用交换。您必须禁用交换,然后重试启动 minikube

      在 MacBook 中禁用交换的步骤:

      • 1.禁用 SIP:

      • 先关闭 MacBook,

      • 按住 Command (⌘) 和 R,然后启动 MacBook。 (对于基于 M1 芯片的 MacBook,按住电源按钮直到看到“正在加载启动选项”)。 您应该会看到一个 macOS 实用程序窗口。

      • 从实用程序菜单中,选择“终端”,然后运行csrutil disable,屏幕应该会显示一条消息,说明 SIP 已被禁用。

      • 从  菜单中,按重新启动以重新启动 MacBook。

      • 2。禁用交换

      • 打开macbook终端

      • 查看系统管理内存的当前模式,在终端输入sysctl -a vm.compressor_mode

      • 默认模式为4,表示压缩内存,使用swap。要禁用交换,我们应该将模式从 4 更改为 2,这意味着只压缩内存。

      • 修改vm.compressor_mode,输入sudo nvram boot-args="vm_compressor=2"。在重新启动之前不会更改模式。 -重启

      同样,任何运行没有交换文件的计算机的人都应仔细监控内存使用情况以避免内核崩溃!

      • 3。 Minikube 开始:

      $ minikube stop
      $ minikube delete
      $ rm -rf ~/.minikube/
      $ minikube start

      【讨论】:

        猜你喜欢
        • 2019-10-23
        • 2022-08-18
        • 2023-02-20
        • 2021-11-01
        • 2020-04-22
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 2022-12-30
        相关资源
        最近更新 更多