我有 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/