OpenShift Job将SFTP数据复制到Persistent Volume启动报错如何解决
问题根因
你遇到的报错不是Volume挂载时机导致的,核心原因是Kubernetescommand字段的执行机制:
command数组如果将整条命令作为单个元素传入,系统不会通过Shell解析命令,会直接将整个字符串当做可执行文件查找,因此触发「no such file or directory」报错。你手动进入Pod执行命令时运行在Shell环境中,所以可以正常执行。
解决方案
修改Job配置中的command字段,显式指定Shell来执行命令,即可解决问题:
- 基础修复方案(直接适配现有命令):
将containers.command修改为如下配置:
command: ["/bin/sh", "-c", "sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no -P 22 -r user@sftp.mydomain.com:/RESSOURCES/* /mnt/myvolume"]
- 增强兼容方案(增加Volume挂载检测,避免极端场景下挂载未就绪问题):
可以在命令前增加挂载目录检测逻辑,确认PV挂载完成后再执行复制操作:
command: ["/bin/sh", "-c", "until [ -d /mnt/myvolume ]; do echo 'wait for volume mount...'; sleep 1; done && sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no -P 22 -r user@sftp.mydomain.com:/RESSOURCES/* /mnt/myvolume"]
修复后完整Job配置
apiVersion: batch/v1 kind: Job metadata: name: job spec: template: spec: containers: - name: init-pv image: w0wka91/ubuntu-sshpass command: ["/bin/sh", "-c", "until [ -d /mnt/myvolume ]; do echo 'wait for volume mount...'; sleep 1; done && sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no -P 22 -r user@sftp.mydomain.com:/RESSOURCES/* /mnt/myvolume"] volumeMounts: - mountPath: /mnt/myvolume name: myvolume envFrom: - secretRef: name: ftp-secrets restartPolicy: Never volumes: - name: myvolume persistentVolumeClaim: claimName: myvolume backoffLimit: 3
内容的提问来源于stack exchange,提问作者w0wka91
相关产品推荐
相关产品推荐

