K8s本地PersistentVolume异常:本地文件未同步及存储位置疑问
本地PersistentVolume挂载异常问题排查
背景
在树莓派(RPi)上为K8s Pod配置本地PersistentVolume,期望复用节点上的/home/pi/data目录存储文件,但部署后出现异常,以下是完整配置与问题详情。
部署配置文件
文件1:StorageClass配置
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
文件2:PersistentVolume配置
apiVersion: v1 kind: PersistentVolume metadata: name: pv-volume spec: storageClassName: local-storage capacity: storage: 5Gi accessModes: - ReadWriteOnce local: path: “/home/pi/data” # 注意此处使用了中文双引号 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - pi
文件3:PersistentVolumeClaim配置
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pv-claim spec: storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 3Gi
文件4:Deployment配置
apiVersion: apps/v1 kind: Deployment metadata: name: test-deployment labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - name: test image: [some_image] ports: - containerPort: 80 volumeMounts: - name: pv-storage mountPath: "/mnt" volumes: - name: pv-storage persistentVolumeClaim: claimName: pv-claim
异常现象与疑问
异常现象
- RPi本地
/home/pi/data目录中的test.txt文件未出现在Pod的/mnt目录中; - 在Pod的
/mnt目录创建文件后,删除并重建Pod,文件仍存在,但RPi的/home/pi/data目录中无任何新增内容。
疑问
- 为何RPi本地的
test.txt文件未同步到Pod的挂载目录? - 既然持久化功能生效,那么文件实际存储在何处?
问题分析与解答
问题1:为何RPi本地的test.txt未同步到Pod挂载目录?
核心原因是PersistentVolume配置中的路径使用了中文双引号:在PV的local.path字段里,配置的是“/home/pi/data”(中文引号),而非英文双引号包裹的"/home/pi/data"。YAML会将包含中文引号的内容完整当作路径字符串,导致K8s尝试挂载的是一个名为“/home/pi/data”的错误路径(而非预期的/home/pi/data)。这个错误路径和你准备的目录完全无关,所以本地的test.txt不会同步到Pod的/mnt目录中。
问题2:文件实际存储在何处?
文件实际存储在树莓派节点上的错误路径目录中。你可以在RPi上执行以下命令查找该目录:
find / -type d -name "*home*pi*data"
执行后会找到一个包含中文引号的异常目录,你在Pod中创建的文件就存储在这个目录里。
内容的提问来源于stack exchange,提问作者Tricker Macedonia
相关产品推荐
相关产品推荐

