【问题标题】:Script mounted from ConfigMap not found inside Kubernetes container在 Kubernetes 容器中找不到从 ConfigMap 挂载的脚本
【发布时间】: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


【解决方案1】:

Docker Hub busybox 镜像是一个极小的镜像,仅包含 BusyBox,这是一个包含最少标准 Unix 工具集的单静态二进制应用程序。它包含符合 the POSIX specification 的 Bourne shell /bin/sh 的实现,但不包含 GNU bash。

实际上,您应该能够重写大多数 shell 脚本以符合 POSIX 语法。 (使用. 而不是source;不要以function 开始shell 函数声明;您可能需要使用外部工具而不是复杂的模式扩展。)您显示的shell 片段应该没问题。您只需要将第一行更改为

#!/bin/sh

(由于这是代码而不是配置,还可以考虑将其放入自定义 Docker 映像中;您的 CI 系统需要将其发布到某个映像注册表才能运行它,但随后它将遵循与集群中运行的所有其他自定义代码相同的生命周期。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2022-01-22
    • 2018-06-02
    • 2021-10-14
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多