【发布时间】:2021-08-05 10:43:19
【问题描述】:
我有一个 ConfigMap 为我保存一个 shell 脚本:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Chart.Name }}-script
labels:
app: {{ .Chart.Name }}
data:
backup.sh: |
#!/bin/bash
rolling_backup() {
echo "Found at least 3 backups. Starting rolling backup."
...
rolling_backup
fi
然后我尝试将它安装到执行此脚本的 CronJob:
...
containers:
- name: {{ .Chart.Name }}-cronjob
image: busybox
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: ['sh', '-c', 'ls -la /etc/scripts/ && /etc/scripts/backup.sh inp-mongo-main-volume']
volumeMounts:
- name: {{ .Chart.Name }}-script
mountPath: "/etc/scripts/"
volumes:
- name: {{ .Chart.Name }}-script
configMap:
name: {{ .Chart.Name }}-script
defaultMode: 0777
...
每当我尝试运行此作业时,我得到的只是 '未找到',而当脚本执行之前的 ls 命令显示与脚本实际存在完全不同的东西时。
user@computer scripts % kubectl logs -n <namespace> mongo-cron-46svm
total 12
drwxr-xr-x 2 root root 4096 Aug 5 10:31 .
drwxr-xr-x 1 root root 4096 Aug 5 10:31 ..
-rwxrwxrwx 1 root root 1377 Aug 5 10:31 backup.sh
/bin/sh: /etc/scripts/backup.sh: not found
这可能是什么问题?
【问题讨论】:
-
GNU bash 是一个非标准的外壳,有几个非标准的扩展;我猜
busybox图像不包括它的实现。你能限制自己使用 POSIX shell 语法,并将 shebang 行更改为#!/bin/sh吗? -
解决了这个问题,谢谢!
标签: kubernetes configmap