Документация

Kubernetes CronJob

CronJob, который сообщает о результате, а не молча уходит в Failed.

CronJob в кластере — самый молчаливый вид задач: под упал, job ушёл в Failed, и всё это видно только тому, кто в этот момент смотрит на кластер. Отчёт наружу снимает вопрос.

yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 3 * * *"
  timeZone: "Europe/Moscow"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  jobTemplate:
    spec:
      backoffLimit: 2
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: job
              image: your/image:latest
              env:
                - name: PING
                  valueFrom:
                    secretKeyRef:
                      name: tickwatch
                      key: ping-url
              command: ["/bin/sh", "-c"]
              args:
                - |
                  set -o pipefail
                  wget -q -T 10 -O /dev/null "$PING/start" || true
                  if out=$(/app/run.sh 2>&1); then
                    echo "$out" | tail -c 10000 | \
                      wget -q -T 10 -O /dev/null --post-file=- "$PING" || true
                  else
                    code=$?
                    echo "$out" | tail -c 10000 | \
                      wget -q -T 10 -O /dev/null --post-file=- "$PING/$code" || true
                    exit $code
                  fi

Почему секрет, а не ConfigMap

Ключ пинга — это право отчитаться за вашу задачу. Кто им владеет, может держать монитор зелёным, пока задача не выполняется. Данных он не раскрывает, но и в общий ConfigMap ему не место.

Kubernetes CronJob · Tickwatch