首页 > 解决方案 > minikube + 主机路径

问题描述

我拼命尝试应用一个简单的 pod 规范,但没有任何运气,即使有这个先前的答案:Mount local directory into pod in minikube

yaml 文件:

apiVersion: v1
kind: Pod
metadata:
  name: hostpath-pod
spec:
  containers:
    - image: httpd
      name: hostpath-pod
      volumeMounts:
        - mountPath: /data
          name: test-volume
  volumes:
    - name: test-volume
      hostPath:
        # directory location on host
        path: /tmp/data/

我用以下方式启动了 minikube 集群:minikube start --mount-string="/tmp:/tmp" --mount并且有 3 个文件/tmp/data

ls /tmp/data/
file2.txt file3.txt hello

但是,这就是我这样做时得到的kubectl describe pods

Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  2m26s                default-scheduler  Successfully assigned default/hostpath-pod to minikube
  Normal   Pulled     113s                 kubelet, minikube  Successfully pulled image "httpd" in 32.404370125s
  Normal   Pulled     108s                 kubelet, minikube  Successfully pulled image "httpd" in 3.99427232s
  Normal   Pulled     85s                  kubelet, minikube  Successfully pulled image "httpd" in 3.906807762s
  Normal   Pulling    58s (x4 over 2m25s)  kubelet, minikube  Pulling image "httpd"
  Normal   Created    54s (x4 over 112s)   kubelet, minikube  Created container hostpath-pod
  Normal   Pulled     54s                  kubelet, minikube  Successfully pulled image "httpd" in 4.364295872s
  Warning  Failed     53s (x4 over 112s)   kubelet, minikube  Error: failed to start container "hostpath-pod": Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/tmp/data" to rootfs at "/data" caused: stat /tmp/data: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
  Warning  BackOff    14s (x6 over 103s)   kubelet, minikube  Back-off restarting failed container

不知道我在这里做错了什么。如果它有帮助,我正在使用 minikube 版本v1.23.2,这是我启动 minikube 时的输出:

  minikube v1.23.2 on Darwin 11.5.2
    ▪ KUBECONFIG=/Users/sachinthaka/.kube/config-ds-dev:/Users/sachinthaka/.kube/config-ds-prod:/Users/sachinthaka/.kube/config-ds-dev-cn:/Users/sachinthaka/.kube/config-ds-prod-cn
✨  Using the hyperkit driver based on existing profile
  Starting control plane node minikube in cluster minikube
  Restarting existing hyperkit VM for "minikube" ...
❗  This VM 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/
  Preparing Kubernetes v1.22.2 on Docker 20.10.8 ...
  Verifying Kubernetes components...
  Creating mount /tmp:/tmp ...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
  Enabled addons: storage-provisioner, default-storageclass

❗  /usr/local/bin/kubectl is version 1.18.0, which may have incompatibilites with Kubernetes 1.22.2.
    ▪ Want kubectl v1.22.2? Try 'minikube kubectl -- get pods -A'
  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

有什么我可以尝试的吗?:'(

更新 1

标签: kuberneteskubectlminikube

解决方案


OP说,这个问题解决了:

在 minikube 中从 /tmp/ 更改为不同的文件夹有帮助。与 MacOs 相关 出于某种原因 minikube 不喜欢/tmp/

这个问题的解释: 你不能挂载/tmp/tmp. 问题不在于 macOS,而在于您的操作方式。我试图以多种方式重现这个问题。我使用了一个 docker,得到了一个非常有趣的错误:

docker: Error response from daemon: Duplicate mount point: /tmp.

这个错误清楚地表明了问题所在。如果您将目录安装在其他地方,一切都应该工作(已确认):

我是否理解正确,当您将挂载点更改为不同的文件夹时,它是否有效?

那是对的。由于某种原因 minikube 不喜欢/tmp/

我知道在我的情况下您使用的是 hyperkit 而不是 docker,但唯一的区别在于您在屏幕上看到的消息。在码头工人的情况下,这是非常清楚的。


推荐阅读