You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes部署报错:无法找到指定Python文件,需PV加载可更新文件

问题:Kubernetes Deployment启动报错,无法找到Python文件

创建Kubernetes Deployment时遇到报错:

python: can't open file '/home/validator_scheduler/validator_rq_scheduler.py': [Errno 2] No such file or directory

需求是让Python文件从Persistent Volume加载,且该卷支持版本控制或手动更新。以下是相关配置文件:

Dockerfile

FROM python

WORKDIR /home/validator_scheduler

COPY requirements.txt .

RUN apt-get update && apt-get install -y dnsutils

RUN pip install --no-cache-dir -r requirements.txt

COPY . /home/validator_scheduler

CMD ["python" , "validator_rq_scheduler.py"]

文件夹结构

monitoring-system
  validator_scheduler
    validator_rq_scheduler.py

Deployment清单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: validator-rq-scheduler-deployment
  labels:
    app: validator-rq-scheduler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: validator-rq-scheduler
  template:
    metadata:
      labels:
        app: validator-rq-scheduler
    spec:
      containers:
        - name: validator-rq-scheduler
          image: BLABLACOMPANY/monitoring-system:validator-rq-scheduler
          workingDir: /home/validator_scheduler
          volumeMounts:
            - name: validator-scheduler
              mountPath: /home/validator_scheduler
          env:
            - name: REDIS_URL
              valueFrom:
                secretKeyRef:
                  name: app-secrets
                  key: REDIS_URL
      volumes:
        - name: validator-scheduler
          persistentVolumeClaim:
            claimName: validator-scheduler-pvc
      imagePullSecrets:
        - name: docker-registry-secret

PVC清单

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: validator-scheduler-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

排查与解决方案

核心问题

你把Persistent Volume直接挂载到了容器的/home/validator_scheduler目录,这会完全覆盖镜像中原有的该目录内容。而你的PV里并没有预先放入validator_rq_scheduler.py文件,容器启动自然找不到该文件。另外,Dockerfile把代码打包进镜像的逻辑,和你想从PV加载代码的需求冲突。

分步解决

1. 调整PV挂载路径

不要挂载整个工作目录,改成挂载到子目录,避免覆盖镜像里的依赖和配置。修改Deployment的volumeMounts:

volumeMounts:
  - name: validator-scheduler
    mountPath: /home/validator_scheduler/app

2. 修改Dockerfile适配PV加载逻辑

去掉复制本地代码到镜像的步骤,让CMD从PV挂载的目录启动脚本:

FROM python

WORKDIR /home/validator_scheduler

COPY requirements.txt .

RUN apt-get update && apt-get install -y dnsutils

RUN pip install --no-cache-dir -r requirements.txt

# 不再复制本地代码
CMD ["python" , "/home/validator_scheduler/app/validator_rq_scheduler.py"]

3. 将代码上传到Persistent Volume

把validator_rq_scheduler.py放到PV对应的存储中:

  • 如果是HostPath类型PV,直接在节点的对应目录创建文件;
  • 云存储或PVC可以用临时Pod上传:
    apiVersion: v1
    kind: Pod
    metadata:
      name: pv-uploader
    spec:
      containers:
        - name: uploader
          image: busybox
          command: ["sleep", "3600"]
          volumeMounts:
            - name: validator-scheduler
              mountPath: /data
      volumes:
        - name: validator-scheduler
          persistentVolumeClaim:
            claimName: validator-scheduler-pvc
    
    创建Pod后执行kubectl cp validator_rq_scheduler.py pv-uploader:/data/,完成后删除临时Pod。

4. 代码更新方案

  • 手动更新:重复上传文件步骤,然后执行kubectl rollout restart deployment/validator-rq-scheduler-deployment重启Pod;
  • 版本控制自动更新:用GitSync工具或自定义Sidecar容器,定期从Git仓库拉取代码到PV目录。

内容的提问来源于stack exchange,提问作者SikkPythons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:31:09