Minikube安装的主机文件夹不起作用

时间:2019-08-08 11:24:04

标签: docker ubuntu kubernetes devops kubernetes-pod

我正在将ubuntu 18与minikube和虚拟盒配合使用,并尝试挂载主机的目录,以获取pod所需的输入数据。

我发现minikube在挂载主机目录时遇到问题,但是默认情况下,根据您的OS和vm驱动程序,有default挂载的目录

我在豆荚上找不到这些。他们根本不在那。

我尝试创建一个持久卷,它可以工作,我可以在仪表板上看到它,但是无法将其安装到吊舱,我使用了这个Yaml来创建该卷

{
  "kind": "PersistentVolume",
  "apiVersion": "v1",
  "metadata": {
    "name": "pv0003",
    "selfLink": "/api/v1/persistentvolumes/pv0001",
    "uid": "28038976-9ee4-414d-8478-b312a24a6b94",
    "resourceVersion": "2030",
    "creationTimestamp": "2019-08-08T10:48:23Z",
    "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"PersistentVolume\",\"metadata\":{\"annotations\":{},\"name\":\"pv0001\"},\"spec\":{\"accessModes\":[\"ReadWriteOnce\"],\"capacity\":{\"storage\":\"5Gi\"},\"hostPath\":{\"path\":\"/data/pv0001/\"}}}\n"
    },
    "finalizers": [
      "kubernetes.io/pv-protection"
    ]
  },
  "spec": {
    "capacity": {
      "storage": "6Gi"
    },
    "hostPath": {
      "path": "/user/data",
      "type": ""
    },
    "accessModes": [
      "ReadWriteOnce"
    ],
    "persistentVolumeReclaimPolicy": "Retain",
    "volumeMode": "Filesystem"
  },
  "status": {
    "phase": "Available"
  }
}

然后使用此Yaml创建作业。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi31
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["sleep"]
        args: ["300"]
        volumeMounts:
        - mountPath: /data
          name: pv0003
      volumes:
        - name: pv0003
          hostPath:
            path: /user/data
      restartPolicy: Never
  backoffLimit: 1

我还尝试根据所谓的默认安装路径创建卷,但没有成功。

我尝试将批量声明添加到职位创建yaml中,仍然一无所获。

当我安装驱动器并在作业创建yaml文件中创建驱动器时,这些作业可以看到其他作业创建的数据,但是对于主机来说是不可见的,而主机的数据对他们也不可见。

我正在从主要用户运行minikube,并检查了仪表板中的日志,没有得到任何权限错误

是否可以在不设置NFS的情况下将数据获取到此minikube中?我正在尝试将其用于MVP,整个想法是为了使其变得简单...

1 个答案:

答案 0 :(得分:1)

这不是一件容易的事,因为minikube在Virtualbox中创建的VM内运行时,这就是为什么使用hostPath会看到该VM的文件系统而不是PC的原因。

我真的建议您使用minikube mount命令-您可以找到说明there

来自文档:

  

建议使用minikube mount / path / to / dir / to / mount:/ vm-mount-path   将目录挂载到minikube的方法,以便可以在   您本地的Kubernetes集群。

因此,您之后可以在minikube Kubernetes中共享主机的文件。

编辑:

下面是逐步测试日志的方法:

➜  ~ minikube start
* minikube v1.3.0 on Ubuntu 19.04
* Tip: Use 'minikube start -p <name>' to create a new cluster, or 'minikube delete' to delete this one.
* Starting existing virtualbox VM for "minikube" ...
* Waiting for the host to be provisioned ...
* Preparing Kubernetes v1.15.2 on Docker 18.09.6 ...
* Relaunching Kubernetes using kubeadm ... 
* Waiting for: apiserver proxy etcd scheduler controller dns
* Done! kubectl is now configured to use "minikube"
➜  ~ mkdir -p /tmp/test-dir
➜  ~ echo "test-string" > /tmp/test-dir/test-file
➜  ~ minikube mount /tmp/test-dir:/test-dir
* Mounting host path /tmp/test-dir into VM as /test-dir ...
  - Mount type:   <no value>
  - User ID:      docker
  - Group ID:     docker
  - Version:      9p2000.L
  - Message Size: 262144
  - Permissions:  755 (-rwxr-xr-x)
  - Options:      map[]
* Userspace file server: ufs starting
* Successfully mounted /tmp/test-dir to /test-dir

* NOTE: This process must stay alive for the mount to be accessible ...

现在打开另一个控制台:

➜  ~ minikube ssh
                         _             _            
            _         _ ( )           ( )           
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __  
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$ cat /test-dir/test-file 
test-string

编辑2:

示例job.yml

apiVersion: batch/v1
kind: Job
metadata:
  name: test
spec:
  template:
    spec:
      containers:
      - name: test
        image: ubuntu
        command: ["cat", "/testing/test-file"]
        volumeMounts:
        - name: test-volume
          mountPath: /testing
      volumes:
      - name: test-volume
        hostPath:
          path: /test-dir
      restartPolicy: Never
  backoffLimit: 4