Kubernetes показывает работу Cron успешно, но не получает желаемого результата

когда я запускаю cronjob в Kubernetes, в этот раз cron дает мне успех cron, но не дает желаемого результата

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: {{ $.Values.appName }}
  namespace: {{ $.Values.appName }}
spec:
  schedule: "* * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: test
              image: image
              command: ["/bin/bash"] 
              args: [ "test.sh" ]
          restartPolicy: OnFailure

также я делюсь test.sh

#!/bin/sh
rm -rf /tmp/*.*
echo "remove done"

cronjob работает успешно, но когда я проверил контейнер, файл не удаляется в каталог /tmp


person Parth Shah    schedule 27.05.2021    source источник
comment
Разве это не просто удаляет каталог, которого нет в контейнере? Вы хотите смонтировать том, в котором существует этот каталог?   -  person Jonas    schedule 27.05.2021
comment
Да, я добавил том в каталог /tmp, мне нужно удалить все файлы и каталоги из /tmp   -  person Parth Shah    schedule 28.05.2021
comment
Здравствуйте, обновите свой манифест YAML с помощью монтирования Volume, на которое вы ссылались в одном из ответов.   -  person Dawid Kruk    schedule 28.05.2021


Ответы (3)


Вам нужно, чтобы объем сохранения был подключен к вашему модулю и cronjob, которые вы используете, чтобы он мог удалить все файлы при выполнении скрипта. Вам нужно смонтировать и указать путь соответственно в вашем скрипте. Для добавления cronjobs kubernetes пройдите через этот ссылка

person Hardik Panchal    schedule 01.06.2021

Cronjob запускается в одном конкретном контейнере, если вы хотите удалить файл или каталог из другого контейнера, это не сработает.

Если ваш основной контейнер запущен в процессе развертывания, когда запускается ваше задание или задание cron, создайте новый контейнер (POD) с отдельной файловой системой и параметром монтирования.

если вы хотите реализовать этот сценарий, вы должны использовать PVC с ReadWriteMany, где несколько контейнеров (POD) могут подключаться к вашему одному PVC и совместно использовать файловую систему.

Таким образом, ваш контейнер cronjob (POD) запустится с существующей файловой системой PVC, и вы сможете удалить каталог с помощью задания или cronjobs.

подключите один и тот же PVC к контейнеру cronjob и основному контейнеру, и он будет работать.

person Harsh Manvar    schedule 28.05.2021
comment
да, я подключил и смонтировал том efs в /tmp, но проблема в том, что команда echo выполняется, но не может выполнить rm - person Parth Shah; 28.05.2021
comment
у вас есть том mount efs на / tmp, но я не вижу в вашем cronjob YAML, что он подключается к / tmp? efs как ПВХ крепишь? - person Harsh Manvar; 28.05.2021

Измените test.sh на:

#!/bin/sh

set -e

rm -rf /tmp/*.*
echo "remove done"

Без -e ваш скрипт bash вернется с тем же статусом, что и его последняя команда. В данном случае это echo, поэтому он всегда будет иметь статус 0 (успешно). Использование set -e заставит ваш сценарий прерваться и завершиться ошибкой, если команда rm не будет выполнена.


Кроме того, без монтирования томов это задание cron не делает ничего значимого. Если вы хотите удалить некоторые файлы из другого контейнера, вам нужно будет использовать Cron внутри этого контейнера (или иметь том с ReadWriteMany).

person Johann-Michael Thiebaut    schedule 27.05.2021
comment
Дает тот же результат, - person Parth Shah; 28.05.2021