Как запустить сценарий оболочки, используя CronJobs в Kubernetes? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь запустить скрипт оболочки с регулярным интервалом в 1 минуту, используя CronJob.

Я создал следующее задание Cron в моем шаблоне openshift:

- kind: CronJob
  apiVersion: batch/v2alpha1
  metadata:
    name: "${APPLICATION_NAME}"
  spec:
    schedule: "*/1 * * * *"
    jobTemplate:
      spec:
        template:
          spec:
            containers:
            - name: mycron-container
              image: alpine:3
              imagePullPolicy: IfNotPresent

              command: [ "/bin/sh" ]
              args: [ "/var/httpd-init/croyscript.sh" ]
              volumeMounts:
              - name: script
                mountPath: "/var/httpd-init/"
            volumes:
            - name: script
              configMap:
                name: ${APPLICATION_NAME}-croyscript
            restartPolicy: OnFailure
            terminationGracePeriodSeconds: 0

    concurrencyPolicy: Replace

карта конфигурации, вставленная как том в это задание:

- kind: ConfigMap
  apiVersion: v1
  metadata:
    name: ${APPLICATION_NAME}-croyscript
    labels:
      app: "${APPLICATION_NAME}"
  data:
    croyscript.sh: |
      #!/bin/sh
      if [ "${APPLICATION_PATH}" != "" ]; then
          mkdir -p /var/httpd-resources/${APPLICATION_PATH}
      fi
      mkdir temp
      cd temp 
      ###### SOME CODE ######

Это задание Cron выполняется. поскольку я могу видеть, что название работы заменяется каждые 1 минута (как запланировано в моей работе). Но это не выполнение сценария оболочки croyscript.sh Я что-то здесь не так делаю? (Возможно, я неверно вставил configmap, поэтому Job не может получить доступ к сценарию оболочки)

1 Ответ

0 голосов
/ 05 ноября 2019

Попробуйте следующий подход

Обновите разрешения для местоположения configmap

            volumes:
            - name: script
              configMap:
                name: ${APPLICATION_NAME}-croyscript
                defaultMode: 0777

Если это не работает, скорее всего, сценарий в подключенном томе мог иметь разрешения READONLY. используйте initContainer, чтобы скопировать сценарий в другое место, установить соответствующие разрешения и использовать это расположение в параметре команды

...