Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Перестаньте использовать crond

Перестаньте использовать crond

DevOpsDaysMoscow, 07-12-2019, Дмитрий Наговицын

DevOpsDaysMoscow

December 07, 2019
Tweet

More Decks by DevOpsDaysMoscow

Other Decks in Technology

Transcript

  1. Недостатки crond (том первый) • Unix-way уже не подходит –

    часто задачи не атомарны и очень разные • Чтобы его использовать надо быть сисадмином: • Иметь доступ к системе (удаленный или локальный) • Иметь учетную запись в системе • Иметь доступ к чтению логов • Иногда иметь права запускать ваши задачи • Уметь читать и писать вот такое: for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done (с) stackoverflow.com
  2. Недостатки crond (том второй) • Проблемы с обработкой ошибок: нет

    встроенных инструментов – set +e и || наше все • По умолчанию нотификация только на почту (локальный mail- server) • Если у нас IaC, то скорее всего мы храним скрипты джоб в инфраструктурном коде
  3. А что мы хотим взамен? • Централизованность • Историю доступную

    всем • Гибкие права на запуск • Интерфейс/графики/отчеты • Доступность и понятность для всех членов команды
  4. Какие альтернативы? • Конечно CI\CD система - есть у всех

    - удовлетворяет большинству требований выше • Специализированные решения (например rundeck) • SystemD timers https://wiki.archlinux.org/index.php/Systemd/Timers • Kubernetes CronJob https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs
  5. Rundeck • Имеет разбиение по проектам • Поддерживает пользовательские формы

    • Имеется плагин для нотификаций (в т.ч. для Telegram) • Позволяет делать выпадающие списки на основе результата запроса • Обладает RESTful API • Интегрируется с Service Discovery (Consul)
  6. Почему Consul? • Service Discovery с поддержкой тэгов • Множество

    способов зарегистрировать сервис: - curl - есть библиотеки для большинства языков - для сервисов на Docker есть registrator (см. ссылки) - наш метод - регистрация через SystemD при развертывании сервиса
  7. Типовая задача: резервное копирование • Регистрируем сервис mysql/postrgres/что-то еще при

    старте с соответствующими тэгами • Rundeck берет из Consul список сервисов-тэгов • Запускаем соответствующую задачу из Rundeck для всех инстансов сервиса • При остановке сервиса, он пропадает из Consul и соответственно Rundeck
  8. SystemD • Более человекочитаемый и очевидный: [Timer] OnBootSec=15min OnUnitActiveSec=1w •

    с легкостью мониторится: - https://github.com/prometheus/node_exporter - https://github.com/povilasv/systemd_exporter - https://github.com/influxdata/telegraf - https://github.com/cavaliercoder/zabbix-module-systemd
  9. Границы использования crond Допустимо: • задача "системная” и не требует

    обработки ошибок, логов (i.e. ротация системных логов) • у вас есть нормальный сбор логов и контроль, и вы в нем уверены Недопустимо: • неудачный запуск может повлиять на бизнес (запуск задачи с бизнес логикой) • задачи пишутся-используются совместно с разработкой или другими подразделениями • нужна общедоступная статистика по выполнению