Telegram Group & Telegram Channel
🔥 Как я чуть не уронил прод из-за cronjob

Обычное утро. Кофе, стендап, лёгкий PR в репу. И тут в монитор как шарахнет — прод API стал отвечать 5xx. Паника, алерты, PagerDuty в слезах.

📌 Что случилось?
Каждый день в 04:00 по UTC запускался innocently выглядящий cronjob в Kubernetes. Он гонял тяжелую агрегацию по БД и триггерил пересчёт данных в Redis. Всё было нормально… пока нагрузка на базу не выросла, а кластер не стал экономить CPU.

Результат:

* Cronjob выжрал CPU ноды.
* Redis улетел в swap.
* Лимиты на pod’ах не были прописаны.
* Horizontal Pod Autoscaler на проде не догнал ситуацию.
* Пользователи увидели 503.

💡 Выводы, которые я сделал и которые сэкономят вам время и нервы:

1️⃣ Cronjob != безобидный скрипт. Он может быть убийцей.
2️⃣ У cronjob должны быть:

* resource limits/requests
* successfulJobsHistoryLimit
* failedJobsHistoryLimit
* ttlSecondsAfterFinished
3️⃣ Разделяй traffic и batch workloads. Лучше – на уровне неймспейсов/taints.
4️⃣ Логируй отдельно вывод cronjob, а не в общие логи.
5️⃣ Придумай throttling для тяжелых задач. И используй nice / ionice если запускаешь скрипты.

🛡️ А лучше всего — не доверяй cronjob, пока не докажет, что он не пёс-камикадзе.

Подпишись 👉@devopslib



tg-me.com/devopslib/61
Create:
Last Update:

🔥 Как я чуть не уронил прод из-за cronjob

Обычное утро. Кофе, стендап, лёгкий PR в репу. И тут в монитор как шарахнет — прод API стал отвечать 5xx. Паника, алерты, PagerDuty в слезах.

📌 Что случилось?
Каждый день в 04:00 по UTC запускался innocently выглядящий cronjob в Kubernetes. Он гонял тяжелую агрегацию по БД и триггерил пересчёт данных в Redis. Всё было нормально… пока нагрузка на базу не выросла, а кластер не стал экономить CPU.

Результат:

* Cronjob выжрал CPU ноды.
* Redis улетел в swap.
* Лимиты на pod’ах не были прописаны.
* Horizontal Pod Autoscaler на проде не догнал ситуацию.
* Пользователи увидели 503.

💡 Выводы, которые я сделал и которые сэкономят вам время и нервы:

1️⃣ Cronjob != безобидный скрипт. Он может быть убийцей.
2️⃣ У cronjob должны быть:

* resource limits/requests
* successfulJobsHistoryLimit
* failedJobsHistoryLimit
* ttlSecondsAfterFinished
3️⃣ Разделяй traffic и batch workloads. Лучше – на уровне неймспейсов/taints.
4️⃣ Логируй отдельно вывод cronjob, а не в общие логи.
5️⃣ Придумай throttling для тяжелых задач. И используй nice / ionice если запускаешь скрипты.

🛡️ А лучше всего — не доверяй cronjob, пока не докажет, что он не пёс-камикадзе.

Подпишись 👉@devopslib

BY Библиотека девопса | DevOps, SRE, Sysadmin


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/devopslib/61

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

A Telegram spokesman declined to comment on the bond issue or the amount of the debt the company has due. The spokesman said Telegram’s equipment and bandwidth costs are growing because it has consistently posted more than 40% year-to-year growth in users.

A project of our size needs at least a few hundred million dollars per year to keep going,” Mr. Durov wrote in his public channel on Telegram late last year. “While doing that, we will remain independent and stay true to our values, redefining how a tech company should operate.

telegram from us


Telegram Библиотека девопса | DevOps, SRE, Sysadmin
FROM USA