使用 Kubernetes hostPath 设置但文件未显示在容器中

sco*_*ang 5 kubernetes

我正在尝试设置hostPath在 Pod 之间共享文件。

我正在遵循本指南配置 Pod 以使用持久卷进行存储

这是 的配置文件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"
Run Code Online (Sandbox Code Playgroud)

PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
Run Code Online (Sandbox Code Playgroud)

荚:

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
Run Code Online (Sandbox Code Playgroud)

我正在向/tmp/data和 添加一个文件,但在容器中看不到它。

当我检查 的状态时pv,pvc,pod,结果如下:

在此输入图像描述

有人可以告诉我为什么我看不到该文件吗?欢迎任何有关如何调试此类问题的建议或命令。

Anc*_*nav 14

MINIKUBE 特定

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

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

解决方案:

使用相同的名称将本地路径映射到 minikube 的虚拟机。这样您就可以按照 kubernetes 清单中的方式引用它。

minikube mount <source directory>:<target directory>
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

minikube mount /tmp/data:/tmp/data
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。

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


sco*_*ang 2

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

当我第一次浏览文档时,我没有注意到这一点:

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