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

Job Pod写入PVC的数据在主Deployment Pod中无法访问

问题:Job写入PVC的数据在Deployment中无法访问

我有一个执行bash脚本的Job Pod,脚本运行后会将数据写入PVC,但主Deployment Pod里看不到这些数据。Deployment和Job使用的是同一个支持Read Write Many模式的PVC。我已经尝试更换PVC和工作目录,但问题仍然存在。

Deployment配置

apiVersion: apps/v1 
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: magento-service
  template:
    metadata:
      labels:
        app: magento-service
    spec:
      containers:
        - name: magento
          image: adobemagento2/magento473
          ports:
            - containerPort: 80
            - containerPort: 9000
          envFrom:
           - configMapRef:
               name: mag-config
          volumeMounts:
            - name: web
              mountPath: "/var/www/html/pub/media"

      volumes:
        - name: web
          persistentVolumeClaim:
            claimName: magento-pvc
      imagePullSecrets:
        - name: regcred

Job配置

apiVersion: batch/v1 
kind: Job
metadata:
  name: example-job
spec:
  template:
    metadata:
      name: example-job
    spec:
      containers:
      - name: example-container
        image: adobemagento2/magento473
        command: ["sh", "-c", "bin/install.sh"]
        envFrom:
         - configMapRef:
             name: mag-config
        volumeMounts:
        - name: web
          mountPath: "/var/www/html/pub/media"

      restartPolicy: Never
      imagePullSecrets:
        - name: regcred
      volumes:
      - name: web
        persistentVolumeClaim:
          claimName: magento-pvc

Dockerfile配置

FROM php:8.2.12-fpm@sha256:2aa938b6d62f7415e9c84d867d9ceed18ef8ec3cf3944d389e088c93f9678a84 
ENV DOC_ROOT /var/www/html
ENV COMPOSER_HOME=/tmp/composer
WORKDIR /var/www/html
#ENV MAGENTO_VERSION 2.4.6-p3

RUN apt-get update && apt-get install -y --no-install-recommends gnupg \
    netcat-openbsd \
    nginx \
    sudo \
    libicu-dev \
    libfreetype6-dev \
    libjpeg-dev \
    libpng-dev \
    libsodium-dev \
    libxml2-dev \
    libxslt-dev \
    libzip-dev \
    rsync \
    supervisor \
    unzip \
    cron \
    default-mysql-client \
    git \
    gnupg \
    gzip \
    libbz2-dev \
    libfreetype6-dev \
    libicu-dev \
    libjpeg62-turbo-dev \
    libmagickwand-dev \
    libmcrypt-dev \
    libonig-dev \
    libpng-dev \
    libsodium-dev \
    libssh2-1-dev \
    libwebp-dev \
    libxslt1-dev \
    libzip-dev \
    lsof \
    mailutils \
    msmtp \
    procps \
    vim \
    zip \
  && rm -rf /var/lib/apt/lists/*

RUN pecl install apcu-5.1.22

RUN docker-php-ext-configure \
    gd --with-freetype --with-jpeg --with-webp \
  && docker-php-ext-install \
    bcmath \
    bz2 \
    calendar \
    exif \
    gd \
    gettext \
    intl \
    mbstring \
    mysqli \
    opcache \
    pcntl \
    pdo_mysql \
    soap \
    sockets \
    sodium \
    sysvmsg \
    sysvsem \
    sysvshm \
    xsl \
    zip 

RUN mkdir -p /var/run && \
    chown -R www-data:www-data /var/run

COPY  magento /etc/cron.d/cronjob
COPY  sslcript.sh /usr/local/bin
RUN chmod +x /usr/local/bin/sslcript.sh
RUN chown www-data:www-data /etc/cron.d/cronjob
RUN chmod 0644 /etc/cron.d/cronjob
RUN crontab /etc/cron.d/cronjob
RUN touch /var/log/cron.log

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

RUN echo "memory_limit=1G" >> /usr/local/etc/php/conf.d/zz-memory-limit-php.ini
RUN echo "apc.enable=1" >> /usr/local/etc/php/conf.d/zz-apcu.ini
RUN echo "apc.enable_cli=1" >> /usr/local/etc/php/conf.d/zz-apcu.ini
RUN echo "opcache.memory_consumption=512MB" >> /usr/local/etc/php/conf.d/zz-opcache.conf
RUN echo "opcache.max_accelerated_files=60000" >> /usr/local/etc/php/conf.d/zz-opcache.conf
RUN echo "opcache.consistency_checks=0" >> /usr/local/etc/php/conf.d/zz-opcache.conf
RUN echo "opcache.validate_timestamps=0" >> /usr/local/etc/php/conf.d/zz-opcache.conf
RUN echo "opcache.enable_cli=1" >> /usr/local/etc/php/conf.d/zz-opcache.conf

RUN mkdir -p /var/lib/nginx/{body,fastcgi} && \
    chown -R www-data:www-data /var/lib/nginx

RUN touch /run/nginx.pid && \
    chown www-data:www-data /run/nginx.pid
RUN chown www-data:www-data /var/log/nginx/error.log
RUN chown www-data:www-data /var/log/nginx/access.log

COPY etc/nginx /etc/nginx

ARG COMPOSER_AUTH

COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer
COPY --chown=www-data magento .
RUN cd /var/www/html  && composer install 

COPY --chown=www-data bin bin

ENV MAGE_MODE=developer
EXPOSE 80

CMD service cron start && service nginx start && php-fpm

排查与解决步骤

  • 验证PVC访问模式:确认PVC绑定的PV确实是ReadWriteMany(RWM)模式,部分存储类可能声明支持RWM但实际未正确配置(比如NFS需要正确共享,CephFS需要集群支持)。执行命令查看PV详情:
    kubectl describe pv <pv-name>
    
  • 检查文件权限与属主:Job和Deployment的容器可能以不同用户身份运行,导致写入的文件无法被对方读取。
    1. 进入Job Pod查看文件权限:
      kubectl exec -it <job-pod-name> -- ls -l /var/www/html/pub/media
      
    2. 进入Deployment Pod查看当前运行用户:
      kubectl exec -it <deployment-pod-name> -- whoami
      
    解决办法:在Job的command中添加权限修正步骤,比如脚本执行完后运行chown -R www-data:www-data /var/www/html/pub/media,或者确保两个容器都以相同用户(比如www-data)运行。
  • 修正挂载路径转义问题:你的配置中挂载路径使用了转义字符"\/var\/www\/html\/pub\/media",建议改为正常的/var/www/html/pub/media,避免转义导致路径解析异常。
  • 验证Job写入结果:确认Job的bin/install.sh脚本确实执行完成并写入了数据,查看Job日志:
    kubectl logs <job-pod-name>
    
  • 刷新Deployment挂载:部分存储系统存在缓存延迟,可重启Deployment Pod强制刷新挂载:
    kubectl rollout restart deployment example-deployment
    
  • 检查Pod调度节点:如果存储是节点本地的伪RWM实现(比如hostPath),Job和Deployment调度到不同节点会导致无法共享数据。查看Pod所在节点:
    kubectl get pods -o wide
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:05:56