Jellyfin 上 K8s 前,先把镜像、PVC 和权限排一遍

简介: 本文记录Jellyfin从Docker Compose迁移至K8s测试环境的典型问题排查:镜像拉取慢、PVC未绑定致媒体目录为空、容器用户权限不足、路径配置错误等。强调K8s中“宿主机→PV→PVC→volumeMount→容器路径”的分层模型,须逐层验证,避免误判。

最近把一个媒体服务从单机 Docker Compose 迁到 K8s 测试环境。服务本身不复杂,但迁移过程中踩到几个很典型的问题:

  • 镜像拉取慢。
  • Pod 启动后媒体目录为空。
  • PVC 挂载正常,但容器用户读不到文件。
  • 页面能打开,但扫描不到媒体库。

这篇只记录排查过程。

目标结构

单机 Compose 里通常是:

volumes:
  - /data/media/movies:/data/movies:ro

迁到 K8s 后,路径关系变成:

宿主机/存储系统 → PV → PVC → Pod volumeMount → 容器内路径

所以不能只问“目录在不在”,还要看 PVC 有没有正确挂进容器。

镜像预检

先不急着 apply Deployment,先确认节点能拉镜像:

kubectl get nodes
kubectl run image-check --image=<team-registry>/jellyfin:latest --restart=Never --command -- sleep 3600
kubectl describe pod image-check
kubectl delete pod image-check

如果这里已经 ImagePullBackOff,就先处理镜像仓库、DNS、代理或节点网络。

不要把镜像拉取失败误判成应用配置问题。

PVC 是否绑定

看 PVC:

kubectl get pvc
kubectl describe pvc media-pvc

状态必须是 Bound

如果 PVC 没绑定,Pod 即使创建了,也不可能正常读取媒体目录。

Pod 里看挂载路径

Deployment 示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jellyfin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jellyfin
  template:
    metadata:
      labels:
        app: jellyfin
    spec:
      containers:
        - name: jellyfin
          image: <team-registry>/jellyfin:latest
          ports:
            - containerPort: 8096
          volumeMounts:
            - name: media
              mountPath: /data/movies
              readOnly: true
            - name: config
              mountPath: /config
      volumes:
        - name: media
          persistentVolumeClaim:
            claimName: media-pvc
        - name: config
          persistentVolumeClaim:
            claimName: jellyfin-config-pvc

进入 Pod:

kubectl exec -it deploy/jellyfin -- sh
ls -lah /data
ls -lah /data/movies

如果 /data/movies 为空,要回到 PV/PVC 和 StorageClass 排查。

应用后台填写容器内路径

K8s 里也一样。Jellyfin 后台应该填写:

/data/movies

而不是节点上的真实路径,也不是存储系统里的路径。

应用只认识容器内路径。

权限排查

如果容器内能看到目录,但应用读不到,继续看权限:

kubectl exec -it deploy/jellyfin -- id
kubectl exec -it deploy/jellyfin -- ls -lah /data/movies

必要时通过 securityContext 指定用户:

securityContext:
  runAsUser: 1000
  runAsGroup: 1000
  fsGroup: 1000

不同存储插件对 fsGroup 的支持不完全一样,实际要结合 StorageClass 验证。

Service 和 Ingress 放到后面

如果媒体库为空,先别急着排 Ingress。

我的顺序是:

  1. 镜像能否拉取。
  2. Pod 是否 Running。
  3. PVC 是否 Bound。
  4. 容器内是否看到 /data/movies
  5. 容器用户是否能读文件。
  6. Jellyfin 后台是否填写容器内路径。
  7. 最后再看 Service / Ingress。

Ingress 主要影响页面访问,不是媒体库扫描的第一嫌疑。

小结

Jellyfin 从 Docker Compose 迁到 K8s,最容易错的不是 YAML 语法,而是路径模型变了。

Compose 里是宿主机路径挂到容器路径。
K8s 里是 PV/PVC 再挂到容器路径。

应用最终看到的仍然只有容器内路径。

所以排查时别跳层:先镜像,再 PVC,再 volumeMount,再权限,最后才是应用和 Ingress。

相关文章
|
15天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23511 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
人工智能 BI 持续交付
Claude Code 深度适配 DeepSeek V4-Pro 实测:全场景通关与真实体验报告
在 AI 编程工具日趋主流的今天,Claude Code 凭借强大的任务执行、工具调用与工程化能力,成为开发者与自动化运维的核心效率工具。但随着原生模型账号稳定性问题频发,寻找一套兼容、稳定、能力在线的替代方案变得尤为重要。DeepSeek V4-Pro 作为新一代高性能大模型,提供了完整兼容 Claude 协议的 API 接口,只需简单配置即可无缝驱动 Claude Code,且在任务执行、工具调用、复杂流程处理上表现极为稳定。
1233 3
|
8天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2267 4
|
2天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
825 7
|
19天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
5854 22
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
20天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
7022 16
|
2天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
708 0