sachinruk
sachinruk

Reputation: 9857

minikube + hostPath

I have tried desperately to apply a simple pod specification without any luck, even with this previous answer: Mount local directory into pod in minikube

The yaml file:

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/

I started minikube cluster with: minikube start --mount-string="/tmp:/tmp" --mount and there are 3 files in /tmp/data:

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

However, this is what I get when I do 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

Not sure what I'm doing wrong here. If it helps I'm using minikube version v1.23.2 and this was the output when I started 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

Anything I can try? :'(

Update 1

Upvotes: 2

Views: 1909

Answers (1)

Mikołaj Głodziak
Mikołaj Głodziak

Reputation: 5287

OP has said, that problem is solved:

changing from /tmp/ to a different folder helped in minikube. Something to do with MacOs For some reason minikube doesn't like /tmp/

An explanation of this problem: You cannot mount /tmp to /tmp. The problem isn't with macOS, but with the way you do it. I tried to recreate this problem in several ways. I used a docker and got a very interesting error:

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

This error makes it clear what the problem is. If you mount your catalog elsewhere, everything should work (which was confirmed):

Do I understand correctly, that when you changed the mount point to a different folder, does it work?

that is correct. For some reason minikube doesn't like /tmp/

I know you are using hyperkit instead of docker in my case, but the only difference will be in the message you get on the screen. In the case of the docker, it is very clear.

Upvotes: 1

Related Questions