Kubernetes 持久卷 : MountPath directory created but empty

标签 kubernetes kubernetes-pod persistent-volumes persistent-volume-claims

我有 2 个 pod,一个将文件写入持久卷,另一个负责读取这些文件以进行一些计算。

第一个 pod 成功写入文件,当我使用 print(os.listdir(persistent_volume_path)) 显示持久卷的内容时,我得到了所有预期的文件。但是,第二个 Pod 上的相同命令显示一个空目录。 (mountPath 目录 /data 已创建,但为空。)

这是 TFJob yaml 文件:

apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
  name: pod1
  namespace: my-namespace
spec:
  cleanPodPolicy: None
  tfReplicaSpecs:
    Worker:
      replicas: 1
      restartPolicy: Never
      template:
        spec:
          containers:
            - name: tensorflow
              image: my-image:latest
              imagePullPolicy: Always
              command:
                - "python"
                - "./program1.py"
                - "--data_path=./dataset.csv"
                - "--persistent_volume_path=/data"
              volumeMounts:
                - mountPath: "/data"
                  name: my-pv
          volumes:
            - name: my-pv
              persistentVolumeClaim:
                claimName: my-pvc

(第二个 Pod 分别为 pod2 和 program2.py)

这是卷配置:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
  namespace: my-namespace
  labels:
    type: local
    app: tfjob
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
  namespace: my-namespace
  labels:
    type: local
    app: tfjob
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data"

有人知道问题到底出在哪里以及如何解决吗?

最佳答案

当两个 Pod 应使用 access mode 访问共享持久卷时ReadWriteOnce,同时 - 那么两个 Pod 必须在同一节点上运行,因为使用此访问模式一次只能将卷安装在一个节点上。

为了实现这一点,需要某种形式的 Pod Affinity必须应用,以便将它们调度到同一节点。

关于Kubernetes 持久卷 : MountPath directory created but empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68928824/

相关文章:

Kubernetes 在部署容器中运行 shell 命令

kubernetes - K8的mongodb容器无法使用EBS卷安装

docker - 将Hospath添加到Kubernetes Statefulset

amazon-web-services - Kubernetes 无法在 AWS-EBS 上创建 PersistentVolumeClaim

docker - 我无法启动 minikube

kubernetes - 通过服务器域访问kubernetes服务

kubernetes - Kubernetes API server 如何在一个节点上启动一个新调度的 pod?

kubernetes - 创建PersistentVolumes以覆盖具有许多磁盘的许多节点

bash - kubectl:如何在不明确指定 pod 名称的情况下显示 pod 日志?

kubernetes - --audit-policy-file标志上没有此类文件或目录错误