🚨 Когда “сам себя перезапустил” — это не баг, а фича
Недавно один под обетом «никогда больше не трогать продакшн ночью» всё-таки зашёл “на минутку”.
Проверил pods, увидел
Только через 10 минут понял, что просто три раза подряд перезапустил контейнер с тем же багом.
Moral of the story:
Не каждый автоперезапуск - спасение. Иногда Kubernetes просто смотрит на тебя и думает:
🧠 Совет:
Если контейнер падает постоянно - не трогай pod. Смотри
Возможно, виноват init-контейнер, readiness-проба или ошибка в startup-скрипте.
И да - логи с
Подпишись 👉@devopslib
Недавно один под обетом «никогда больше не трогать продакшн ночью» всё-таки зашёл “на минутку”.
Проверил pods, увидел
CrashLoopBackOff, сделал kubectl delete pod, и - чудо - всё ожило!Только через 10 минут понял, что просто три раза подряд перезапустил контейнер с тем же багом.
Moral of the story:
Не каждый автоперезапуск - спасение. Иногда Kubernetes просто смотрит на тебя и думает:
“Я делаю, что могу, но ты уверен, что хочешь, чтобы это продолжалось?”
🧠 Совет:
Если контейнер падает постоянно - не трогай pod. Смотри
kubectl describe pod и kubectl logs -p.Возможно, виноват init-контейнер, readiness-проба или ошибка в startup-скрипте.
И да - логи с
-p спасают, когда под уже ушёл на перезапуск.Подпишись 👉@devopslib
👍3
Как я тестирую отказоустойчивость сервисов без боли и слёз
Один из самых частых вопросов в работе SRE а что будет, если упадёт X?
Чтобы не гадать, я регулярно использую небольшой собственный «чеклист хаоса». Он простой, но реально спасает от катастроф.
1. Отключаю один из инстансов сервиса
Если балансировщик начинает вести себя странно - фиксирую. Часто проблемы всплывают именно в момент деградации, а не отказа.
2. Имитирую деградацию базы
Замедление на 200–400 мс показывает, насколько хорошо сервисы работают с connection pool и retry-логикой.
3. Убиваю DNS на 30 секунд
Большинство проблем в проде - из-за DNS. Люблю тестировать, как приложение переживает недоступность резолвера.
4. Перегружаю сеть на 20–30%
Трафик растёт, очереди растут. Отличный способ понять, где узкое место: балансировщик, ingress или сам backend.
5. Проверяю автоскейлинг
Самая частая ошибка - красивые метрики, но неправильные триггеры. Тестирую всплесками нагрузки, а не «в теории».
Совет: запускай такие тесты маленькими порциями, но регулярно. Так инфраструктура становится предсказуемой, а инциденты - скучными.
Подпишись 👉@devopslib
Один из самых частых вопросов в работе SRE а что будет, если упадёт X?
Чтобы не гадать, я регулярно использую небольшой собственный «чеклист хаоса». Он простой, но реально спасает от катастроф.
1. Отключаю один из инстансов сервиса
Если балансировщик начинает вести себя странно - фиксирую. Часто проблемы всплывают именно в момент деградации, а не отказа.
2. Имитирую деградацию базы
Замедление на 200–400 мс показывает, насколько хорошо сервисы работают с connection pool и retry-логикой.
3. Убиваю DNS на 30 секунд
Большинство проблем в проде - из-за DNS. Люблю тестировать, как приложение переживает недоступность резолвера.
4. Перегружаю сеть на 20–30%
Трафик растёт, очереди растут. Отличный способ понять, где узкое место: балансировщик, ingress или сам backend.
5. Проверяю автоскейлинг
Самая частая ошибка - красивые метрики, но неправильные триггеры. Тестирую всплесками нагрузки, а не «в теории».
Совет: запускай такие тесты маленькими порциями, но регулярно. Так инфраструктура становится предсказуемой, а инциденты - скучными.
Подпишись 👉@devopslib
👍7
Тестирование отказоустойчивости: как DevOps проверяет «что будет, если всё сломается»
Что стоит тестировать регулярно:
1. Падение ноды/инстанса
Проверка, что оркестратор (Kubernetes, Nomad) перезапускает поды и перераспределяет нагрузку.
2. Недоступность внешних сервисов
Отказы DNS, очередей, баз. Важно увидеть, где нет таймаутов и ретраев.
3. Замедление дисков и сети
Часто не «падает», а деградирует. Медленные IO приводят к каскадным таймаутам.
4. Перегрев и рост нагрузки
Тестирование горизонтального и вертикального автоскейлинга.
5. Пробои в безопасности
Проверка, что отказ из-за блокировки, регенерации ключей или ротации сертификатов не валит прод.
Как это внедряют:
- Chaos Engineering (например, Chaos Mesh, Litmus).
Управляемый хаос показывает, как ведут себя реальные прод-нагрузки.
- GameDays
Команда собирается и моделирует реальные аварии: «Что будет, если умерет база?».
- SLO-ориентированный подход
Упавший компонент не считается проблемой, если не нарушены пользовательские SLO.
Что даёт грамотное тестирование отказоустойчивости:
- Минимизация RTO/RPO
- Предсказуемость поведения в пиковой нагрузке
- Повышение инженерной уверенности
- Чёткое понимание, где нужно инвестировать в инфраструктуру
Подпишись 👉@devopslib
Что стоит тестировать регулярно:
1. Падение ноды/инстанса
Проверка, что оркестратор (Kubernetes, Nomad) перезапускает поды и перераспределяет нагрузку.
2. Недоступность внешних сервисов
Отказы DNS, очередей, баз. Важно увидеть, где нет таймаутов и ретраев.
3. Замедление дисков и сети
Часто не «падает», а деградирует. Медленные IO приводят к каскадным таймаутам.
4. Перегрев и рост нагрузки
Тестирование горизонтального и вертикального автоскейлинга.
5. Пробои в безопасности
Проверка, что отказ из-за блокировки, регенерации ключей или ротации сертификатов не валит прод.
Как это внедряют:
- Chaos Engineering (например, Chaos Mesh, Litmus).
Управляемый хаос показывает, как ведут себя реальные прод-нагрузки.
- GameDays
Команда собирается и моделирует реальные аварии: «Что будет, если умерет база?».
- SLO-ориентированный подход
Упавший компонент не считается проблемой, если не нарушены пользовательские SLO.
Что даёт грамотное тестирование отказоустойчивости:
- Минимизация RTO/RPO
- Предсказуемость поведения в пиковой нагрузке
- Повышение инженерной уверенности
- Чёткое понимание, где нужно инвестировать в инфраструктуру
Подпишись 👉@devopslib
👍2
🦾 CI/CD — это то, что превращает долгие релизы в один клик. А GitLab — инструмент, который позволит выстроить этот процесс без лишней боли.
🎯 Вы будете понимать, как построить эффективный workflow, настроить автоматическую доставку кода, тестирование и деплой. После курса вы сможете уверенно работать с CI/CD в реальных проектах и говорить на одном языке с DevOps-инженерами.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему сервисы «плывут» после релиза
Одна из самых болезненных проблем, когда вроде всё протестировано, всё зелёное, деплой успешен… а сервис внезапно начинает деградировать под реальной нагрузкой.
3 причины, которые чаще всего находил на проде:
1. Непредсказуемые паттерны трафика
Локальные и staging-тесты воспроизводят лишь типовые сценарии. Пользователи же способны создать такие комбинации запросов, о которых никто не думал.
Решение: включайте real-world нагрузку - реплеи боевых логов, canary с 1–5% трафика, shadow-traffic.
2. Неполная изоляция зависимостей
В тестовой среде сервисы живут в вакууме, а в проде начинают конкурировать за БД/кэш/очереди.
Решение: стрессовать зависимости отдельно: тестировать базу под 200% нагрузки, проверять деградацию кэша, моделировать задержки в сети.
3. «Невидимые» лимиты инфраструктуры
Тот самый случай, когда Kubernetes скейлится, но underlying-ресурсы — нет. Например, лимит RPS на ingress, ограничение соединений в Redis, или IOPS на дисках.
Решение: регулярно проводить game day: искать такие скрытые лимиты заранее, пока это не сделал прод.
Вывод: тестирование - это не про «пройти все QA-чеклисты». Это про понимание, как твой сервис ведёт себя в хаосе реального мира.
Подпишись 👉@devopslib
Одна из самых болезненных проблем, когда вроде всё протестировано, всё зелёное, деплой успешен… а сервис внезапно начинает деградировать под реальной нагрузкой.
3 причины, которые чаще всего находил на проде:
1. Непредсказуемые паттерны трафика
Локальные и staging-тесты воспроизводят лишь типовые сценарии. Пользователи же способны создать такие комбинации запросов, о которых никто не думал.
Решение: включайте real-world нагрузку - реплеи боевых логов, canary с 1–5% трафика, shadow-traffic.
2. Неполная изоляция зависимостей
В тестовой среде сервисы живут в вакууме, а в проде начинают конкурировать за БД/кэш/очереди.
Решение: стрессовать зависимости отдельно: тестировать базу под 200% нагрузки, проверять деградацию кэша, моделировать задержки в сети.
3. «Невидимые» лимиты инфраструктуры
Тот самый случай, когда Kubernetes скейлится, но underlying-ресурсы — нет. Например, лимит RPS на ingress, ограничение соединений в Redis, или IOPS на дисках.
Решение: регулярно проводить game day: искать такие скрытые лимиты заранее, пока это не сделал прод.
Вывод: тестирование - это не про «пройти все QA-чеклисты». Это про понимание, как твой сервис ведёт себя в хаосе реального мира.
Подпишись 👉@devopslib
👍2
🎥 Вебинар по Linux: Введение в Docker: контейнеры, изоляция и первые шаги.
На вебинаре вы узнаете:
- Чем контейнеризация отличается от виртуализации и почему Docker стал стандартом.
- Как устроены контейнер, образ и Docker Engine.
- Как запустить и управлять контейнерами с помощью базовых команд docker run, ps, exec, stop).
- Как использовать Docker Hub и скачивать готовые образы.
В результате вебинара вы:
- Разберётесь в ключевых понятиях Docker.
- Научитесь запускать и управлять контейнерами.
- Сможете использовать готовые образы для своих тестовых окружений.
- Поймёте, куда двигаться дальше в изучении контейнерных технологий.
🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional"
👉 Для участия зарегистрируйтесь: https://vk.cc/cRBK0X
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На вебинаре вы узнаете:
- Чем контейнеризация отличается от виртуализации и почему Docker стал стандартом.
- Как устроены контейнер, образ и Docker Engine.
- Как запустить и управлять контейнерами с помощью базовых команд docker run, ps, exec, stop).
- Как использовать Docker Hub и скачивать готовые образы.
В результате вебинара вы:
- Разберётесь в ключевых понятиях Docker.
- Научитесь запускать и управлять контейнерами.
- Сможете использовать готовые образы для своих тестовых окружений.
- Поймёте, куда двигаться дальше в изучении контейнерных технологий.
🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional"
👉 Для участия зарегистрируйтесь: https://vk.cc/cRBK0X
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤3
Почему большинство инцидентов происходят ночью?
Если посмотреть на статистику SRE-команд, почти 70% серьёзных инцидентов случаются после 23:00. Причина не в “мистике”, а в том, что ночью сходятся три фактора:
1. Накопленный technical debt
Патчи, которые “временно” залили месяц назад, начинают стрелять именно в момент минимального трафика - когда сервисы активнее пересобираются, переезжают, чистят очереди, крутят бэкапы.
2. Скедуленные задачи
Cron, ETL, бэкапы, реплики - всё это стартует после полуночи. Если что-то где-то неправильно рассчитано, concurrency внезапно уходит в космос.
3. Усталость дежурного
Даже идеальный инженер ночью реагирует медленнее. Отсюда более долгая диагностика, выше вероятность ошибки и неправильного rollback-а.
Как снизить риск?
- Отдельный staging для всех nightly-джобов.
- Автоматический анализ cron-нагрузки перед релизом.
- Progressive Delivery: тёмные релизы, canary, feature flags.
- Аналитика “частоты ночных ошибок” и профилактическая оптимизация.
Самый мощный прием - не выкатывать ночью. Ни один SLA не стоит бессонной ночи и кривого деплоя.
Подпишись 👉@devopslib
Если посмотреть на статистику SRE-команд, почти 70% серьёзных инцидентов случаются после 23:00. Причина не в “мистике”, а в том, что ночью сходятся три фактора:
1. Накопленный technical debt
Патчи, которые “временно” залили месяц назад, начинают стрелять именно в момент минимального трафика - когда сервисы активнее пересобираются, переезжают, чистят очереди, крутят бэкапы.
2. Скедуленные задачи
Cron, ETL, бэкапы, реплики - всё это стартует после полуночи. Если что-то где-то неправильно рассчитано, concurrency внезапно уходит в космос.
3. Усталость дежурного
Даже идеальный инженер ночью реагирует медленнее. Отсюда более долгая диагностика, выше вероятность ошибки и неправильного rollback-а.
Как снизить риск?
- Отдельный staging для всех nightly-джобов.
- Автоматический анализ cron-нагрузки перед релизом.
- Progressive Delivery: тёмные релизы, canary, feature flags.
- Аналитика “частоты ночных ошибок” и профилактическая оптимизация.
Самый мощный прием - не выкатывать ночью. Ни один SLA не стоит бессонной ночи и кривого деплоя.
Подпишись 👉@devopslib
👍7
Почему операционные runbook - это спасение, а не бюрократия
Когда случается инцидент, мозг отключается первым.
Остаются только привычка и инструкции.
Хороший runbook - это документ, который:
1. Снимает стресс
Когда всё горит, видеть перед собой понятный чеклист - половина успеха.
Меньше паники - меньше ошибок.
2. Повышает MTTR
Чёткие шаги ➞ предсказуемые действия ➞ быстрый возврат сервиса.
3. Уменьшает bus-factor
Заболел единственный, кто "знает, что делать"?
Не проблема — знания уже лежат в runbook.
4. Убирает хаос
Инциденты редко уникальны.
Обычно это вариации одних и тех же проблем:
«диск переполнился», «база упала», «kube-scheduler решил отдохнуть».
Runbook превращает бардак в алгоритм.
Как выглядит рабочий runbook?
Минимальная структура:
- Контекст: что за система и как понять, что она неисправна
- Триггеры: alert'ы, метрики, логи
- Диагностика: команды, которые нужно выполнить
- Решения: пошагово, без "понятно же"
- Rollback / временные костыли
- Куда эскалировать
- Что записать в postmortem
Главная ошибка инженеров
Делать runbook после инцидента.
Правильный вариант: вести их как код - постепенно дополнять при любом изменении системы.
Runbook, который не обновляли 6 месяцев — не runbook.
Это исторический артефакт.
Подпишись 👉@devopslib
Когда случается инцидент, мозг отключается первым.
Остаются только привычка и инструкции.
Хороший runbook - это документ, который:
1. Снимает стресс
Когда всё горит, видеть перед собой понятный чеклист - половина успеха.
Меньше паники - меньше ошибок.
2. Повышает MTTR
Чёткие шаги ➞ предсказуемые действия ➞ быстрый возврат сервиса.
3. Уменьшает bus-factor
Заболел единственный, кто "знает, что делать"?
Не проблема — знания уже лежат в runbook.
4. Убирает хаос
Инциденты редко уникальны.
Обычно это вариации одних и тех же проблем:
«диск переполнился», «база упала», «kube-scheduler решил отдохнуть».
Runbook превращает бардак в алгоритм.
Как выглядит рабочий runbook?
Минимальная структура:
- Контекст: что за система и как понять, что она неисправна
- Триггеры: alert'ы, метрики, логи
- Диагностика: команды, которые нужно выполнить
- Решения: пошагово, без "понятно же"
- Rollback / временные костыли
- Куда эскалировать
- Что записать в postmortem
Главная ошибка инженеров
Делать runbook после инцидента.
Правильный вариант: вести их как код - постепенно дополнять при любом изменении системы.
Runbook, который не обновляли 6 месяцев — не runbook.
Это исторический артефакт.
Подпишись 👉@devopslib
👍4❤1
Одна из самых недооценённых вещей в DevOps - подготовленные сценарии отказов.
Большинство инцидентов выглядят одинаково:
💚 02:37 ночи
💚 CPU 100%, latency растёт
💚 кто-то пишет «у нас всё легло?»
💚 начинается хаотичный SSH-тур по серверам
Проблема не в том, что система упала.
Проблема - никто не знает, что делать дальше.
Что реально спасает
Runbook, но не «для галочки».
Хороший runbook - это:
✅ конкретный триггер (какой алерт)
✅ чёткая цель (что восстановить)
✅ пошаговые действия (без “разберись по ситуации”)
✅ команды, ссылки, контакты
✅ критерий «инцидент закрыт»
Плохой runbook:
💕 «Проверь логи»
💕 «Перезапусти сервис»
💕 «Если не помогло - эскалируй»
Практика
Если runbook:
💕 не обновлялся после последнего инцидента - его не существует
💕 не может выполнить дежурный без автора - он бесполезен
💕 не проверялся в рабочее время - ночью он не сработает
Минимальный лайфхак
После каждого падения:
1. открой runbook
2. зафиксируй, где было непонятно
3. допиши одну строку
Через 5 инцидентов у тебя будет документ, который реально работает.
Подпишись 👉@devopslib
Большинство инцидентов выглядят одинаково:
Проблема не в том, что система упала.
Проблема - никто не знает, что делать дальше.
Что реально спасает
Runbook, но не «для галочки».
Хороший runbook - это:
Плохой runbook:
Практика
Если runbook:
Минимальный лайфхак
После каждого падения:
1. открой runbook
2. зафиксируй, где было непонятно
3. допиши одну строку
Через 5 инцидентов у тебя будет документ, который реально работает.
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👎2❤1
🐳 Хватит тащить
Салют, коллеги, всех с прошедшими праздниками! 👋
Сколько раз я видел
Аргумент всегда один: "Ну мне же надо как-то дебажить, если под отвалится!"
В итоге мы получаем:
1. Раздутый образ. (Платим за сторадж и трафик).
2. Дыру в безопасности. (Хакер, попавший в контейнер, скажет спасибо за
Правильный путь - это Distroless образы или минимальный Alpine, где нет даже шелла. А для дебага мы используем Ephemeral Containers (эфемерные контейнеры).
🛠 Как это работает?
В Kubernetes (начиная с v1.25 это уже стабильная фича) вы можете "подселить" временный контейнер в работающий Pod. Он будет делить с подом пространство имен процессов (PID) и иногда сети, но файловая система у него будет своя.
То есть: ваш прод-контейнер остается чистым, а дебаг-тулзы прилетают только по требованию.
🔥 Практика:
Допустим, у вас есть "глухой" под
Вместо того чтобы пересобирать образ, делаем так:
Разберем магию:
🔘
🔘
Теперь вы внутри пода, но со швейцарским ножом в руках. Проверили коннект до базы, сняли дамп трафика, вышли и эфемерный контейнер исчез. Чисто, красиво, секьюрно. 🛡
💡 А если я не в K8s?
Если вы сидите на чистом Docker, похожий трюк делается через
Итог: Перестаньте бояться Distroless образов. Инструментарий для внешнего дебага уже давно вырос.
💬 А какой у вас любимый тул-кит для дебага сети? Пишите в комменты! 👇
#k8s #docker #security #tips #debug
Подпишись 👉@devopslib
curl и vim в продакшн! (Используем Ephemeral Containers)Салют, коллеги, всех с прошедшими праздниками! 👋
Сколько раз я видел
Dockerfile, который начинается за здравие (FROM alpine), а заканчивается установкой половины интернета: apk add curl vim net-tools bind-tools...?Аргумент всегда один: "Ну мне же надо как-то дебажить, если под отвалится!"
В итоге мы получаем:
1. Раздутый образ. (Платим за сторадж и трафик).
2. Дыру в безопасности. (Хакер, попавший в контейнер, скажет спасибо за
curl и nmap, любезно оставленные вами).Правильный путь - это Distroless образы или минимальный Alpine, где нет даже шелла. А для дебага мы используем Ephemeral Containers (эфемерные контейнеры).
🛠 Как это работает?
В Kubernetes (начиная с v1.25 это уже стабильная фича) вы можете "подселить" временный контейнер в работающий Pod. Он будет делить с подом пространство имен процессов (PID) и иногда сети, но файловая система у него будет своя.
То есть: ваш прод-контейнер остается чистым, а дебаг-тулзы прилетают только по требованию.
🔥 Практика:
kubectl debugДопустим, у вас есть "глухой" под
my-app, в котором нет ничего, кроме бинарника приложения. Вам нужно проверить сеть.Вместо того чтобы пересобирать образ, делаем так:
kubectl debug -it my-app \
--image=nicolaka/netshoot \
--target=my-app-container
Разберем магию:
--image=nicolaka/netshoot: Мой любимый образ для траблшутинга. Там есть ВСЁ: tcpdump, curl, dig, iperf, mtr.--target: Указываем, к какому контейнеру в поде подключиться (важно, чтобы видеть процессы друг друга).Теперь вы внутри пода, но со швейцарским ножом в руках. Проверили коннект до базы, сняли дамп трафика, вышли и эфемерный контейнер исчез. Чисто, красиво, секьюрно. 🛡
💡 А если я не в K8s?
Если вы сидите на чистом Docker, похожий трюк делается через
--pid и --network:
docker run -it --rm \
--network container:my-prod-container \
--pid container:my-prod-container \
nicolaka/netshoot
Итог: Перестаньте бояться Distroless образов. Инструментарий для внешнего дебага уже давно вырос.
💬 А какой у вас любимый тул-кит для дебага сети? Пишите в комменты! 👇
#k8s #docker #security #tips #debug
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
🚑 HEALTHCHECK: Спасательный круг или выстрел в ногу?
Продолжаем тему стабильности. Сегодня про Healthchecks (в Docker) и Probes (в K8s).
Казалось бы, что сложного? Написал
Разберем две крайности и как делать правильно.
❌ Ошибка №1: "Зомби-апокалипсис" (Слишком слабый чек)
Вы проверяете только то, что процесс веб-сервера запущен и порт слушается.
🔘 Сценарий: У приложения отвалился коннект к БД (pool exhaustion), или случился дедлок внутри кода.
🔘 Итог: Хелсчек проходит (порт-то открыт!), балансировщик продолжает лить трафик на под, а пользователи получают 500-ки.
🔘 Лечение: Чек должен проверять работоспособность логики, а не просто наличие процесса.
❌ Ошибка №2: "Эффект Домино" (Слишком жадный чек)
Вы решили быть умными и в
🔘 Сценарий: База данных немного приуныла (медленные запросы).
🔘 Итог: Хелсчеки всех 50 подов начинают тайм-аутить. Kubernetes думает: "Ага, поды сдохли!" и начинает их перезагружать.
🔘 Финал: Все поды рестартуют одновременно, ломятся устанавливать соединения к и так лежащей базе и добивают её окончательно. Congratulations, you played yourself.
✅ Как делать правильно: Liveness vs Readiness
В Kubernetes (да и в грамотном Docker Compose) эти понятия разделены. Это фундамент.
1. Liveness Probe (Я жив?)
🔘 Цель: Понять, не завис ли процесс намертво.
🔘 Действие при сбое: РЕСТАРТ контейнера.
🔘 Что проверять: Очень легкий запрос. "Я могу отвечать на HTTP?". Не трогайте тут базу данных! Если база лежит, рестарт бэкенда не поможет ей подняться.
2. Readiness Probe (Я готов работать?)
🔘 Цель: Понять, можно ли пускать на меня трафик.
🔘 Действие при сбое: УБРАТЬ из балансировки (не убивать!).
🔘 Что проверять: Вот тут проверяем зависимости. Есть коннект к БД? Прогрелся кэш? Если нет, просто временно не шлите на меня юзеров.
📝 Пример (K8s Manifest):
💡 Главный совет
Никогда не делайте зависимость Liveness-пробы от внешних сервисов. Если у вас упал сторонний API, ваш сервис не должен уходить в циклическую перезагрузку. Он должен просто перестать говорить, что он
#k8s #devops #fails #stability #bestpractices
Подпишись 👉@devopslib
Продолжаем тему стабильности. Сегодня про Healthchecks (в Docker) и Probes (в K8s).
Казалось бы, что сложного? Написал
curl -f http://localhost/ || exit 1 и пошел пить кофе. Но именно такие "простые" решения часто становятся причиной того, что ваш прод лежит, хотя нагрузка детская.Разберем две крайности и как делать правильно.
❌ Ошибка №1: "Зомби-апокалипсис" (Слишком слабый чек)
Вы проверяете только то, что процесс веб-сервера запущен и порт слушается.
❌ Ошибка №2: "Эффект Домино" (Слишком жадный чек)
Вы решили быть умными и в
/health эндпоинт засунули проверку коннекта к Базе, Редису и S3.✅ Как делать правильно: Liveness vs Readiness
В Kubernetes (да и в грамотном Docker Compose) эти понятия разделены. Это фундамент.
1. Liveness Probe (Я жив?)
2. Readiness Probe (Я готов работать?)
📝 Пример (K8s Manifest):
livenessProbe:
httpGet:
path: /health/live # Максимально тупой ответ 200 OK
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /health/ready # Проверка БД, очередей и т.д.
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 3
💡 Главный совет
Никогда не делайте зависимость Liveness-пробы от внешних сервисов. Если у вас упал сторонний API, ваш сервис не должен уходить в циклическую перезагрузку. Он должен просто перестать говорить, что он
Ready, или отдавать ошибку юзеру, оставаясь "живым".#k8s #devops #fails #stability #bestpractices
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1👏1
🛑 Не убивай меня сразу! Настраиваем Graceful Shutdown
Коллеги, бывало такое? Вы делаете
Проблема часто не в балансировщике, а в том, что ваше приложение не умеет "красиво уходить" (Graceful Shutdown).
Когда Kubernetes хочет остановить под, происходит следующий танец:
1. K8s посылает процессу сигнал SIGTERM.
2. K8s ждет
3. Если процесс еще жив -прилетает SIGKILL (выстрел в голову).
❌ Как делают новички
Приложение получает
🔘 Результат: Все запросы, которые обрабатывались в эту миллисекунду (транзакция в БД, загрузка файла), обрываются. Клиент получает ошибку.
✅ Как надо (Уровень Code)
Приложение должно перехватывать
Получив сигнал, оно должно:
1. Перестать принимать новые соединения.
2. Дождаться завершения текущих запросов.
3. Закрыть коннекты к БД/очередям.
4. Выйти (
💀 Скрытая проблема Kubernetes (Race Condition)
Даже если ваш код идеален, вы все равно можете словить 502.
Почему?
В тот момент, когда K8s посылает
Это асинхронный процесс. Может случиться так, что Ingress Controller все еще шлет трафик на под, а приложение уже получило SIGTERM и закрыло порт.
💊 Решение: "The Sleep Hack"
Как бы глупо это ни звучало, но best practice в мире K8s - это вставить небольшую паузу перед остановкой.
Мы используем
Что это дает?
1. K8s запускает хук:
2. Под помечается как
3. За эти 5 секунд Ingress/Service успевают обновить свои таблицы маршрутизации и перестают слать новый трафик на этот под.
4.
⚙️ Чек-лист для идеального деплоя:
1. В коде обработан
2. В K8s добавлен
3.
Уважайте своих пользователей, не сбрасывайте их сессии посередине оплаты! 😉
#k8s #devops #architecture #go #python #bestpractices
Подпишись 👉@devopslib
Коллеги, бывало такое? Вы делаете
kubectl rollout restart, Kubernetes обещает бесшовное обновление, но в момент переключения подов пару юзеров все равно ловят 502 Bad Gateway или обрывы соединений.Проблема часто не в балансировщике, а в том, что ваше приложение не умеет "красиво уходить" (Graceful Shutdown).
Когда Kubernetes хочет остановить под, происходит следующий танец:
1. K8s посылает процессу сигнал SIGTERM.
2. K8s ждет
terminationGracePeriodSeconds (по дефолту 30 сек).3. Если процесс еще жив -прилетает SIGKILL (выстрел в голову).
❌ Как делают новички
Приложение получает
SIGTERM и... мгновенно закрывается.✅ Как надо (Уровень Code)
Приложение должно перехватывать
SIGTERM.Получив сигнал, оно должно:
1. Перестать принимать новые соединения.
2. Дождаться завершения текущих запросов.
3. Закрыть коннекты к БД/очередям.
4. Выйти (
exit 0).💀 Скрытая проблема Kubernetes (Race Condition)
Даже если ваш код идеален, вы все равно можете словить 502.
Почему?
В тот момент, когда K8s посылает
SIGTERM, он параллельно начинает удалять IP пода из Endpoints (Service).Это асинхронный процесс. Может случиться так, что Ingress Controller все еще шлет трафик на под, а приложение уже получило SIGTERM и закрыло порт.
💊 Решение: "The Sleep Hack"
Как бы глупо это ни звучало, но best practice в мире K8s - это вставить небольшую паузу перед остановкой.
Мы используем
preStop хук. Он выполняется ДО отправки SIGTERM.
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 5"]
Что это дает?
1. K8s запускает хук:
sleep 5.2. Под помечается как
Terminating.3. За эти 5 секунд Ingress/Service успевают обновить свои таблицы маршрутизации и перестают слать новый трафик на этот под.
4.
sleep заканчивается -> летит SIGTERM -> приложение спокойно доделывает старые запросы -> Profit! 🚀⚙️ Чек-лист для идеального деплоя:
1. В коде обработан
SIGTERM.2. В K8s добавлен
preStop хук со слипом (5-10 сек).3.
terminationGracePeriodSeconds выставлен с запасом (напр. 60 сек, если у вас долгие запросы), чтобы SIGKILL не прилетел слишком рано.Уважайте своих пользователей, не сбрасывайте их сессии посередине оплаты! 😉
#k8s #devops #architecture #go #python #bestpractices
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Yandex BareMetal подтвердил соответствие высшему стандарту безопасности персональных данных
Сервис прошел аттестацию по высшей степени защиты персональных данных.
Независимый аудит подтвердил, что команда сервиса действительно серьёзно относится к защите информации, а не просто формально выполняет требования.
Кому это важно:
Госсектор, финтех, медицина, аутсорсеры и все, кто работает с чувствительными данными и нуждается в физической изоляции и официально подтвержденной безопасности.
Как устроена безопасность:
- Дата-центры на территории России
- Модульная L2-связность без единой точки отказа (SPOF)
- Полное стирание данных при возврате серверов
- Физическое уничтожение повреждённых дисков
Кратко про Yandex BareMetal:
- Физические серверы без виртуализации
- Высокая изоляция ресурсов
- Интеграция с Yandex Cloud
- Аренда от 1 дня
- Готовые и кастомные конфигурации
Подробнее по ссылке.
Сервис прошел аттестацию по высшей степени защиты персональных данных.
Независимый аудит подтвердил, что команда сервиса действительно серьёзно относится к защите информации, а не просто формально выполняет требования.
Кому это важно:
Госсектор, финтех, медицина, аутсорсеры и все, кто работает с чувствительными данными и нуждается в физической изоляции и официально подтвержденной безопасности.
Как устроена безопасность:
- Дата-центры на территории России
- Модульная L2-связность без единой точки отказа (SPOF)
- Полное стирание данных при возврате серверов
- Физическое уничтожение повреждённых дисков
Кратко про Yandex BareMetal:
- Физические серверы без виртуализации
- Высокая изоляция ресурсов
- Интеграция с Yandex Cloud
- Аренда от 1 дня
- Готовые и кастомные конфигурации
Подробнее по ссылке.
😁1