设置kubernetes hostpath,但文件不会显示在容器中

时间:2017-09-04 07:49:48

标签: kubernetes

我是kubernets的新手(约3天)。我尝试设置一个主机路径来与pod共享文件,我在设置后跟随他的指南Configure a Pod to Use a PersistentVolume for Storage。我检查了pv,pvc,pod的状态,结果如下。

enter image description here

这是pv,pvc,pod的配置文件。

kind: PersistentVolume
apiVersion: v1
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data"

PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

POD:

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:

  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
       claimName: task-pv-claim

  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
      - mountPath: "/usr/share/nginx/html"
        name: task-pv-storage

有些人可以提供线索吗?任何建议,欢迎指导如何调试此类问题。

3 个答案:

答案 0 :(得分:3)

MINIKUBE 专用

在 minikube for Mac 上运行本地集群时,我遇到了同样的错误。

Minikube 实际上创建了一个 VM,然后在其上运行您的容器。因此,hostPath 实际上是指该 VM 内的路径,而不是您本地计算机上的路径。这就是为什么所有挂载都显示为空文件夹的原因。

解决方案:

将您的本地路径映射到同名的 minikube 虚拟机。这样你就可以在你的 kubernetes Manifests 中引用它。

minikube mount <source directory>:<target directory>

在这种情况下:

minikube mount /tmp/data:/tmp/data

这应该可以解决问题。

来源:https://minikube.sigs.k8s.io/docs/handbook/mount/

答案 1 :(得分:0)

您是否首先在/tmp/data放置了本地文件?

答案 2 :(得分:0)

我想我明白了。 HostPath仅适用于单节点集群。我的群集有2个节点。所以PV使用的物理存储在另一台计算机上。

当我第一次浏览文档时,我不注意这个:

“您需要一个只有一个节点的Kubernetes集群”