Когда это нужно
Job может завершиться ошибкой, Pod — не запланироваться, а длинный предыдущий запуск — заблокировать следующий. Просмотр kubectl помогает диагностировать кластер, но не заменяет ожидание результата по расписанию. Внешний монитор заметит отсутствие сигнала и при недоступности самого кластера.
Как подключить
- 1
Создайте cron-монитор с тем же schedule и timeZone. Задайте запас времени на планирование Pod и обычную длительность задачи.
- 2
Добавьте URL пинга в Secret tickwatch с ключом ping-url через ваш обычный процесс управления секретами.
- 3
Замените образ и рабочую команду в примере. Проверьте успешный запуск, ошибку и пропуск на тестовом CronJob.
Готовый пример
Образ должен содержать /bin/sh, curl и ваш скрипт /app/run-job.sh. Нужен исходящий HTTPS-доступ к адресу пинга. Пример — основа для вашего существующего манифеста; проверьте политики сети и права на Secret.
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-report
spec:
schedule: "0 3 * * *"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
jobTemplate:
spec:
backoffLimit: 1
template:
spec:
restartPolicy: Never
containers:
- name: job
image: your-registry/your-job:version
env:
- name: PING
valueFrom:
secretKeyRef:
name: tickwatch
key: ping-url
- name: RUN_ID
valueFrom:
fieldRef:
fieldPath: metadata.uid
command: ["/bin/sh", "-c"]
args:
- |
signal() {
curl -fsS --connect-timeout 3 --max-time 5 \
-X POST "$PING/$1?rid=$RUN_ID" >/dev/null 2>&1 || true
}
signal start
/app/run-job.sh
result=$?
if [ "$result" -eq 0 ]; then signal ""; else signal fail; fi
exit "$result"Что проверить перед запуском
Forbid запрещает одновременные запуски одного CronJob и может привести к пропуску следующего. Настройте максимальную длительность монитора.
При OOMKill или принудительном завершении Pod сигнал ошибки может не уйти. Контроль отсутствующего завершения нужен дополнительно.
Secret ограничивает доступ к ключу через Kubernetes, но не заменяет RBAC и защиту секретов в кластере.
Частые вопросы
Tickwatch читает Kubernetes API?
В этом сценарии нет. Контейнер сам отправляет сигналы. Tickwatch не получает доступ к кластеру или его Secret.
Что происходит при повторной попытке Job?
Каждый новый Pod использует свой UID как идентификатор запуска. Ошибка первой попытки и успешное повторение могут дать инцидент и восстановление; учитывайте это в настройках уведомлений.