2.9 KiB
2.9 KiB
Fission cron: наши выводы и факты
Короткий локальный конспект, чтобы не искать повторно по сторонней документации.
Что делает оригинальный Fission
- Cron в Fission запускается штатным механизмом
TimeTrigger/timetrigger. timer— отдельный controller-под, который живет постоянно, пока deployment поднят.timerсмотрит только те namespace-ы, которые ему явно заданы при старте.- Когда наступает время,
timerинициирует обычный Fission invoke черезrouter. - Console не участвует в выполнении cron после создания/обновления
TimeTrigger.
Что важно для multi-namespace
- Да, в Fission изначально заложена работа с несколькими namespace-ами.
- Но это не "авто-перебор всего кластера".
- Нужен явный watch-list, обычно через
FISSION_RESOURCE_NAMESPACES. - Если namespace не входит в этот список,
timerегоTimeTriggerне увидит.
Что делает наша console
- Console создает или обновляет
TimeTriggerв namespace пользователя. - В
TimeTriggerзадаются:spec.cronspec.functionrefspec.methodspec.subpath
- После этого дальнейший запуск полностью делает Fission.
- Console только управляет CRD и показывает состояние/метрики.
Что мы выяснили в этом проекте
- Основная проблема была не в cron-механизме Fission как таковом, а в visibility namespaces для
timer. timerсначала смотрел толькоdefault, поэтому user namespace был невидим.- Дополнительно, history на
/cronхранится в памяти процесса console, поэтому rollout сбрасывает накопленные снимки.
Практический вывод
- Для cron важно не только создать
TimeTrigger, но и убедиться, чтоtimerwatch-ит namespace пользователя. - Если
/cronпустой после rollout, это может быть:timerне видит namespaceTimeTriggerне создан- invoke не дошел до функции
- snapshot не сохранился в
cron_metrics
- Console не запускает shell-команды в Kubernetes и не исполняет cron сама.
- Console только создает CRD, а дальше работает штатный Fission controller path.