K8s hostPath挂载Pod后仅显示单个文件,新增文件无法同步
问题原因及解决方案
核心问题:Pod被调度到了非文件所在节点
hostPath卷挂载的是Pod运行所在节点的本地目录,而非固定指向主节点目录。如果你的K8s集群包含多个节点,且Deployment未指定调度规则,K8s可能会将Pod调度到其他节点,这些节点的/home/user/vids/目录中并没有你后续新增的视频文件,因此重启Pod后依然看不到新增内容。
排查步骤
确认Pod运行的节点:
kubectl get pods -o wide查看输出的
NODE列,确认该节点是否为你存放视频文件的主节点。验证节点目录内容:
如果Pod不在主节点,登录到Pod所在节点,检查/home/user/vids/目录下的文件,会发现这里只有初始的sample-vid-1.mp4,没有后续新增文件。
解决方法
给Deployment添加节点亲和性规则,强制Pod只能调度到存放视频文件的主节点:
修改deployment.yaml,在spec.template.spec下添加affinity配置:
kind: Deployment metadata: name: app1 namespace: default spec: replicas: 1 selector: matchLabels: app: app1 template: metadata: labels: app: app1 spec: # 添加节点亲和性配置 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - 你的主节点主机名 # 替换为实际主节点的hostname containers: - name: app1 image: userhere/getting-started ports: - containerPort: 80 volumeMounts: - name: video-storage mountPath: /app/video volumes: - name: video-storage hostPath: path: /home/user/vids/
应用更新后的Deployment:
kubectl apply -f deployment.yaml
新创建的Pod会被调度到指定主节点,此时就能看到所有新增的视频文件。
额外检查项
如果Pod确实在主节点但仍看不到新增文件,检查以下内容:
- 确认新增文件确实被放入主节点的
/home/user/vids/目录,未放错路径 - 检查目录权限:主节点的
/home/user/vids/需允许容器用户读取,执行ls -ld /home/user/vids/查看权限,确保其他用户有读权限(如权限为755)
内容的提问来源于stack exchange,提问作者that-parikshit
相关产品推荐
相关产品推荐

