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

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

Відкрити в Telegram

Блог DevOps инженера

Показати більше
1 302
Підписники
Немає даних24 години
-17 днів
-130 день

Триває завантаження даних...

Схожі канали
Немає даних
Виникли проблеми? Будь ласка, оновіть сторінку або зверніться до нашого support-менеджера.
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
травень '26
травень '26
+2
в 0 каналах
квітень '26
+20
в 0 каналах
Get PRO
березень '26
+18
в 0 каналах
Get PRO
лютий '26
+25
в 0 каналах
Get PRO
січень '26
+39
в 0 каналах
Get PRO
грудень '25
+28
в 0 каналах
Get PRO
листопад '25
+86
в 32 каналах
Get PRO
жовтень '25
+61
в 2 каналах
Get PRO
вересень '25
+95
в 37 каналах
Get PRO
серпень '25
+61
в 1 каналах
Get PRO
липень '25
+103
в 28 каналах
Get PRO
червень '25
+141
в 20 каналах
Get PRO
травень '25
+223
в 45 каналах
Get PRO
квітень '25
+277
в 38 каналах
Get PRO
березень '25
+219
в 39 каналах
Get PRO
лютий '25
+423
в 27 каналах
Дата
Залучення підписників
Згадування
Канали
12 травня0
11 травня0
10 травня0
09 травня0
08 травня0
07 травня+1
06 травня0
05 травня0
04 травня0
03 травня0
02 травня+1
01 травня0
Дописи каналу
🥊 Helm vs Kustomize: Вечная битва или идеальный симбиоз? Салют! 👋 Сегодня затронем тему, из-за которой в курилках девопсов доходит до драки. Как управлять манифестами? В левом углу ринга - Helm (пакетный менеджер, шаблоны, {{ .Values }}). В правом углу - Kustomize (оверлеи, патчи, native k8s). Многие пытаются выбрать один инструмент на всё. И это ошибка. Давайте разберем, где каждый из них король. ⚓️ Helm: Король дистрибуции Helm - это про упаковку. Если вы хотите поставить Redis, Prometheus или Ingress-Nginx - вы берете Helm. Почему? 1. Параметризация: Вам не надо знать внутренности чарта, просто переопределите values.yaml. 2. Хуки: Возможность запустить джобу перед установкой (например, миграцию БД). 3. Версионирование: Удобно откатываться (helm rollback). 🔴 Боль: "Template Hell". Вы когда-нибудь отлаживали чарт на 500 строк с вложенными {{ if }}, циклами range и проблемами с отступами YAML? Это ад. Читать чужой (или свой спустя месяц) Helm-шаблон - больно. 🦎 Kustomize: Король конфигурации Kustomize - это про вариативность. Он встроен прямо в kubectl (-k). Идея проста: есть Base (общий манифест) и Overlays (dev, stage, prod), которые накладывают патчи поверх базы. 1. Чистый YAML: Никаких фигурных скобок. Это валидный YAML, который можно проверить линтером. 2. Наглядность: Вы четко видите в папке prod, чем именно он отличается от dev (другой CPU limit, другая репликация). 3. Композиция: Легко собрать приложение из кусков. 🔴 Боль: Нет логики. В Kustomize нельзя написать if enabled: true. Если вам нужно динамически менять структуру манифеста в зависимости от переменной - придется дублировать код или писать сложные патчи. 💡 Мой рецепт (Best Practice) Я перестал выбирать и использую гибридный подход. 1. Сторонний софт (Redis, ELK, Cert-Manager) 👉 Helm. Не изобретайте велосипед. Возьмите готовый чарт, напишите к нему values-prod.yaml и радуйтесь. 2. Свои микросервисы (Internal Apps) 👉 Kustomize. Для своих приложений шаблоны часто избыточны. У вас меняется только тег образа и Env-vars. Kustomize здесь чище и понятнее разработчикам. 3. Высший пилотаж: Helm + Kustomize. Есть такая техника: helm template генерит "сырой" манифест, а Kustomize потом патчит то, что в Helm чарте не предусмотрено.

helm template my-chart . | kustomize build . | kubectl apply -f -

Так вы получаете гибкость Helm и точность Kustomize. #k8s #helm #kustomize #gitops #tools #battle Подпишись 👉@devopslib

2
⚖️ Requests vs Limits: Почему твой под тормозит на пустой ноде? Всем привет! 👋 Сегодня о наболевшем - о ресурсах в Kubernetes. Я часто вижу манифесты, где секция resources либо отсутствует вовсе ("пусть берет сколько надо"), либо настроена "на глаз". А потом начинаются вопросы: "Почему приложение тупит, хотя CPU загружен на 5%?" или "Почему мой под постоянно убивает OOMKilled?" Давайте разберем главную ловушку новичка. 1. Requests (Запросы) - Это про "Обещание" 🤝 requests - это то, что Kubernetes гарантирует вашему поду. Шедулер смотрит на реквесты и ищет ноду, где есть свободное место. Если вы не указали реквесты - K8s считает, что поду ничего не нужно, и может запихнуть его на перегруженную ноду, где он будет страдать. 2. Limits (Лимиты) - это про "Наказание" 👮‍♂️ limits - это верхняя планка. И тут поведение CPU и RAM кардинально отличается. 💀 RAM Limit (Жесткая смерть) Память - ресурс не сжимаемый. Если приложение съело больше лимита - приходит OOMKiller (Out Of Memory Killer) и пристреливает процесс. Под рестартится. • Ошибка: Ставить лимит памяти впритык к потреблению Java-хипа. Дайте запас на оверхед! 🐌 CPU Limit (Тормоза / Троттлинг) CPU - ресурс сжимаемый. Если приложение хочет больше лимита, его не убивают. Его троттлят. Шедулер просто перестает давать процессу процессорное время на определенные кванты времени. • Результат: Ваше приложение начинает отвечать не за 50мс, а за 500мс. Ошибок нет, логов нет, но все тормозит. 🔥 QoS Classes: Битва за приоритет Kubernetes делит все поды на 3 касты (Quality of Service): 1. Guaranteed (Элита) 👑 • requests = limits (и по CPU, и по RAM). • Эти поды убиваются последними, если на ноде кончается место. Идеально для Баз Данных и критичного прода. 2. Burstable (Средний класс) 💼 • requests < limits. • Они могут "бурстить" (потреблять больше реквеста), если есть свободные ресурсы. Но если на ноде начнется давка, их начнут выселять первыми. Подходит для большинства веб-сервисов. 3. BestEffort (Бомжи) 🗑 • Ресурсы не указаны вообще. • Живут "на птичьих правах". При любой нехватке ресурсов на ноде эти поды улетают в небытие первыми. Используйте только для неважных тестовых джобов. 💡Золотое правило настройки 1. Memory: Всегда ставьте Requests == Limits. • Почему? Чтобы K8s гарантировал вам эту память и не пытался выселить под при нехватке ресурсов на ноде. Это дает класс Guaranteed (по памяти). 2. CPU: • Requests: Обязательно ставьте честные значения (сколько реально надо при средней нагрузке). • Limits: Осторожно! Некоторые инженеры вообще не ставят CPU лимиты (или ставят их очень высокими), чтобы избежать троттлинга при резких всплесках трафика. Если нода свободна - пусть приложение забирает всё! 📝 Пример "Надежного" конфига: resources: requests: memory: "512Mi" cpu: "250m" # 0.25 ядра limits: memory: "512Mi" # Равно реквесту! # cpu: "1000m" # Можно не ставить или ставить с запасом Не бойтесь давать памяти с запасом, но бойтесь зажать CPU в тиски. #k8s #performance #cpu #ram #bestpractices #troubleshooting Подпишись 👉@devopslib
435
3
Yandex BareMetal подтвердил соответствие высшему стандарту безопасности персональных данных Сервис прошел аттестацию по высше
Yandex BareMetal подтвердил соответствие высшему стандарту безопасности персональных данных Сервис прошел аттестацию по высшей степени защиты персональных данных. Независимый аудит подтвердил, что команда сервиса действительно серьёзно относится к защите информации, а не просто формально выполняет требования. Кому это важно: Госсектор, финтех, медицина, аутсорсеры и все, кто работает с чувствительными данными и нуждается в физической изоляции и официально подтвержденной безопасности. Как устроена безопасность: - Дата-центры на территории России - Модульная L2-связность без единой точки отказа (SPOF) - Полное стирание данных при возврате серверов - Физическое уничтожение повреждённых дисков Кратко про Yandex BareMetal: - Физические серверы без виртуализации - Высокая изоляция ресурсов - Интеграция с Yandex Cloud - Аренда от 1 дня - Готовые и кастомные конфигурации Подробнее по ссылке.
406
4
🛑 Не убивай меня сразу! Настраиваем Graceful Shutdown Коллеги, бывало такое? Вы делаете 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
426
5
🚑 HEALTHCHECK: Спасательный круг или выстрел в ногу? Продолжаем тему стабильности. Сегодня про Healthchecks (в Docker) и Probes (в K8s). Казалось бы, что сложного? Написал curl -f http://localhost/ || exit 1 и пошел пить кофе. Но именно такие "простые" решения часто становятся причиной того, что ваш прод лежит, хотя нагрузка детская. Разберем две крайности и как делать правильно. ❌ Ошибка №1: "Зомби-апокалипсис" (Слишком слабый чек) Вы проверяете только то, что процесс веб-сервера запущен и порт слушается. 🔘Сценарий: У приложения отвалился коннект к БД (pool exhaustion), или случился дедлок внутри кода. 🔘Итог: Хелсчек проходит (порт-то открыт!), балансировщик продолжает лить трафик на под, а пользователи получают 500-ки. 🔘Лечение: Чек должен проверять работоспособность логики, а не просто наличие процесса. ❌ Ошибка №2: "Эффект Домино" (Слишком жадный чек) Вы решили быть умными и в /health эндпоинт засунули проверку коннекта к Базе, Редису и S3. 🔘Сценарий: База данных немного приуныла (медленные запросы). 🔘Итог: Хелсчеки всех 50 подов начинают тайм-аутить. Kubernetes думает: "Ага, поды сдохли!" и начинает их перезагружать. 🔘Финал: Все поды рестартуют одновременно, ломятся устанавливать соединения к и так лежащей базе и добивают её окончательно. Congratulations, you played yourself. ✅ Как делать правильно: Liveness vs Readiness В Kubernetes (да и в грамотном Docker Compose) эти понятия разделены. Это фундамент. 1. Liveness Probe (Я жив?) 🔘Цель: Понять, не завис ли процесс намертво. 🔘Действие при сбое: РЕСТАРТ контейнера. 🔘Что проверять: Очень легкий запрос. "Я могу отвечать на HTTP?". Не трогайте тут базу данных! Если база лежит, рестарт бэкенда не поможет ей подняться. 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
397
6
🐳 Хватит тащить 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
624
7
Одна из самых недооценённых вещей в DevOps - подготовленные сценарии отказов. Большинство инцидентов выглядят одинаково: 💚 0
Одна из самых недооценённых вещей в DevOps - подготовленные сценарии отказов. Большинство инцидентов выглядят одинаково: 💚 02:37 ночи 💚 CPU 100%, latency растёт 💚 кто-то пишет «у нас всё легло?» 💚 начинается хаотичный SSH-тур по серверам Проблема не в том, что система упала. Проблема - никто не знает, что делать дальше. Что реально спасает Runbook, но не «для галочки». Хороший runbook - это: ✅ конкретный триггер (какой алерт) ✅ чёткая цель (что восстановить) ✅ пошаговые действия (без “разберись по ситуации”) ✅ команды, ссылки, контакты ✅ критерий «инцидент закрыт» Плохой runbook: 💕 «Проверь логи» 💕 «Перезапусти сервис» 💕 «Если не помогло - эскалируй» Практика Если runbook: 💕 не обновлялся после последнего инцидента - его не существует 💕 не может выполнить дежурный без автора - он бесполезен 💕 не проверялся в рабочее время - ночью он не сработает Минимальный лайфхак После каждого падения: 1. открой runbook 2. зафиксируй, где было непонятно 3. допиши одну строку Через 5 инцидентов у тебя будет документ, который реально работает. Подпишись 👉@devopslib
558
8
Почему операционные runbook - это спасение, а не бюрократия Когда случается инцидент, мозг отключается первым. Остаются только привычка и инструкции. Хороший runbook - это документ, который: 1. Снимает стресс Когда всё горит, видеть перед собой понятный чеклист - половина успеха. Меньше паники - меньше ошибок. 2. Повышает MTTR Чёткие шаги ➞ предсказуемые действия ➞ быстрый возврат сервиса. 3. Уменьшает bus-factor Заболел единственный, кто "знает, что делать"? Не проблема — знания уже лежат в runbook. 4. Убирает хаос Инциденты редко уникальны. Обычно это вариации одних и тех же проблем: «диск переполнился», «база упала», «kube-scheduler решил отдохнуть». Runbook превращает бардак в алгоритм. Как выглядит рабочий runbook? Минимальная структура: - Контекст: что за система и как понять, что она неисправна - Триггеры: alert'ы, метрики, логи - Диагностика: команды, которые нужно выполнить - Решения: пошагово, без "понятно же" - Rollback / временные костыли - Куда эскалировать - Что записать в postmortem Главная ошибка инженеров Делать runbook после инцидента. Правильный вариант: вести их как код - постепенно дополнять при любом изменении системы. Runbook, который не обновляли 6 месяцев — не runbook. Это исторический артефакт. Подпишись 👉@devopslib
485
9
Почему большинство инцидентов происходят ночью? Если посмотреть на статистику SRE-команд, почти 70% серьёзных инцидентов случаются после 23:00. Причина не в “мистике”, а в том, что ночью сходятся три фактора: 1. Накопленный technical debt Патчи, которые “временно” залили месяц назад, начинают стрелять именно в момент минимального трафика - когда сервисы активнее пересобираются, переезжают, чистят очереди, крутят бэкапы. 2. Скедуленные задачи Cron, ETL, бэкапы, реплики - всё это стартует после полуночи. Если что-то где-то неправильно рассчитано, concurrency внезапно уходит в космос. 3. Усталость дежурного Даже идеальный инженер ночью реагирует медленнее. Отсюда более долгая диагностика, выше вероятность ошибки и неправильного rollback-а. Как снизить риск? - Отдельный staging для всех nightly-джобов. - Автоматический анализ cron-нагрузки перед релизом. - Progressive Delivery: тёмные релизы, canary, feature flags. - Аналитика “частоты ночных ошибок” и профилактическая оптимизация. Самый мощный прием - не выкатывать ночью. Ни один SLA не стоит бессонной ночи и кривого деплоя. Подпишись 👉@devopslib
2 302
10
🎥 Вебинар по Linux: Введение в Docker: контейнеры, изоляция и первые шаги. На вебинаре вы узнаете: - Чем контейнеризация отл
🎥 Вебинар по Linux: Введение в Docker: контейнеры, изоляция и первые шаги. На вебинаре вы узнаете: - Чем контейнеризация отличается от виртуализации и почему Docker стал стандартом. - Как устроены контейнер, образ и Docker Engine. - Как запустить и управлять контейнерами с помощью базовых команд docker run, ps, exec, stop). - Как использовать Docker Hub и скачивать готовые образы. В результате вебинара вы: - Разберётесь в ключевых понятиях Docker. - Научитесь запускать и управлять контейнерами. - Сможете использовать готовые образы для своих тестовых окружений. - Поймёте, куда двигаться дальше в изучении контейнерных технологий. 🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional" 👉 Для участия зарегистрируйтесь: https://vk.cc/cRBK0X Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
646
11
Почему сервисы «плывут» после релиза Одна из самых болезненных проблем, когда вроде всё протестировано, всё зелёное, деплой успешен… а сервис внезапно начинает деградировать под реальной нагрузкой. 3 причины, которые чаще всего находил на проде: 1. Непредсказуемые паттерны трафика Локальные и staging-тесты воспроизводят лишь типовые сценарии. Пользователи же способны создать такие комбинации запросов, о которых никто не думал. Решение: включайте real-world нагрузку - реплеи боевых логов, canary с 1–5% трафика, shadow-traffic. 2. Неполная изоляция зависимостей В тестовой среде сервисы живут в вакууме, а в проде начинают конкурировать за БД/кэш/очереди. Решение: стрессовать зависимости отдельно: тестировать базу под 200% нагрузки, проверять деградацию кэша, моделировать задержки в сети. 3. «Невидимые» лимиты инфраструктуры Тот самый случай, когда Kubernetes скейлится, но underlying-ресурсы — нет. Например, лимит RPS на ingress, ограничение соединений в Redis, или IOPS на дисках. Решение: регулярно проводить game day: искать такие скрытые лимиты заранее, пока это не сделал прод. Вывод: тестирование - это не про «пройти все QA-чеклисты». Это про понимание, как твой сервис ведёт себя в хаосе реального мира. Подпишись 👉@devopslib
537
12
🚀 Хотите ускорить разработку и автоматизировать рутинные процессы? 🦾 CI/CD — это то, что превращает долгие релизы в один кл
🚀 Хотите ускорить разработку и автоматизировать рутинные процессы? 🦾 CI/CD — это то, что превращает долгие релизы в один клик. А GitLab — инструмент, который позволит выстроить этот процесс без лишней боли. 💡 На курсе «CI/CD на основе GitLab» вы научитесь развертывать GitLab и GitLab Runner, настраивать пайплайны любой сложности, интегрировать Ansible, Docker и Kubernetes, а также внедрять лучшие практики безопасности. Всё это на актуальной версии и в формате живых лекций с практикой. 🎯 Вы будете понимать, как построить эффективный workflow, настроить автоматическую доставку кода, тестирование и деплой. После курса вы сможете уверенно работать с CI/CD в реальных проектах и говорить на одном языке с DevOps-инженерами. ➡️ Пройдите вступительное тестирование и присоединяйтесь к группе: https://vk.cc/cRthVR Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
537
13
Тестирование отказоустойчивости: как DevOps проверяет «что будет, если всё сломается» Что стоит тестировать регулярно: 1. Падение ноды/инстанса Проверка, что оркестратор (Kubernetes, Nomad) перезапускает поды и перераспределяет нагрузку. 2. Недоступность внешних сервисов Отказы DNS, очередей, баз. Важно увидеть, где нет таймаутов и ретраев. 3. Замедление дисков и сети Часто не «падает», а деградирует. Медленные IO приводят к каскадным таймаутам. 4. Перегрев и рост нагрузки Тестирование горизонтального и вертикального автоскейлинга. 5. Пробои в безопасности Проверка, что отказ из-за блокировки, регенерации ключей или ротации сертификатов не валит прод. Как это внедряют: - Chaos Engineering (например, Chaos Mesh, Litmus). Управляемый хаос показывает, как ведут себя реальные прод-нагрузки. - GameDays Команда собирается и моделирует реальные аварии: «Что будет, если умерет база?». - SLO-ориентированный подход Упавший компонент не считается проблемой, если не нарушены пользовательские SLO. Что даёт грамотное тестирование отказоустойчивости: - Минимизация RTO/RPO - Предсказуемость поведения в пиковой нагрузке - Повышение инженерной уверенности - Чёткое понимание, где нужно инвестировать в инфраструктуру Подпишись 👉@devopslib
439
14
Как я тестирую отказоустойчивость сервисов без боли и слёз Один из самых частых вопросов в работе SRE а что будет, если упадёт X? Чтобы не гадать, я регулярно использую небольшой собственный «чеклист хаоса». Он простой, но реально спасает от катастроф. 1. Отключаю один из инстансов сервиса Если балансировщик начинает вести себя странно - фиксирую. Часто проблемы всплывают именно в момент деградации, а не отказа. 2. Имитирую деградацию базы Замедление на 200–400 мс показывает, насколько хорошо сервисы работают с connection pool и retry-логикой. 3. Убиваю DNS на 30 секунд Большинство проблем в проде - из-за DNS. Люблю тестировать, как приложение переживает недоступность резолвера. 4. Перегружаю сеть на 20–30% Трафик растёт, очереди растут. Отличный способ понять, где узкое место: балансировщик, ingress или сам backend. 5. Проверяю автоскейлинг Самая частая ошибка - красивые метрики, но неправильные триггеры. Тестирую всплесками нагрузки, а не «в теории». Совет: запускай такие тесты маленькими порциями, но регулярно. Так инфраструктура становится предсказуемой, а инциденты - скучными. Подпишись 👉@devopslib
589
15
🚨 Когда “сам себя перезапустил” — это не баг, а фича Недавно один под обетом «никогда больше не трогать продакшн ночью» всё-таки зашёл “на минутку”. Проверил pods, увидел CrashLoopBackOff, сделал kubectl delete pod, и - чудо - всё ожило! Только через 10 минут понял, что просто три раза подряд перезапустил контейнер с тем же багом. Moral of the story: Не каждый автоперезапуск - спасение. Иногда Kubernetes просто смотрит на тебя и думает: “Я делаю, что могу, но ты уверен, что хочешь, чтобы это продолжалось?” 🧠 Совет: Если контейнер падает постоянно - не трогай pod. Смотри kubectl describe pod и kubectl logs -p. Возможно, виноват init-контейнер, readiness-проба или ошибка в startup-скрипте. И да - логи с -p спасают, когда под уже ушёл на перезапуск. Подпишись 👉@devopslib
775
16
💥 Kubernetes хаос и решения. Часть 2 - «Боль автообновлений» Если у тебя в кластере внезапно всё «упало» ночью, а утром тебя встретил alert с фразой “Pods not ready” - скорее всего, виноваты автообновления. Сценарий классический: - Включен auto-upgrade для node pool в GKE/EKS/AKS. - Cloud-провайдер решил, что пора обновить kubelet и runtime. - Worker-ноды перезагрузились, pods пошли в Terminating, Pending, а кластер стал частично неработоспособным. Почему так происходит: - Не настроены PodDisruptionBudgets (PDB). - Нет стратегии drain с учётом приоритета workloads. - Stateful приложения (Postgres, Kafka, Redis) теряют лидерство и консистентность. - Контроллеры не успевают пересоздавать pod'ы из-за лимитов ресурсов или ошибок readinessProbe. Как лечить: 1. Отключи автообновления для node pool - обновляй вручную. 2. Введи maintenance window, чтобы обновления шли только в заданные часы. 3. Определи PDB для всех важных pods - не более 1-2 одновременно недоступных. 4. Используй drain-сервис например, kured с контролем через annotations. 5. Тестируй обновления на staging-кластере - симулируй rolling drain. Подпишись 👉@devopslib
734
17
💥 Kubernetes хаос и как его приручить Все красиво, пока не падает прод. А потом ты открываешь kubectl get pods и видишь 37 подов в статусе CrashLoopBackOff. Kubernetes вроде как должен “самоисцеляться”, но иногда он просто сидит и смотрит, как всё горит 🔥 Вот три типичных источника хаоса и как их быстро приручить: 1. Liveness / Readiness пробы Когда они настроены неправильно - поды убиваются зря. 👉 Проверь, что readinessProbe не стреляется слишком часто, и добавь initialDelaySeconds. Удивительно, как часто это спасает от самоуничтожения. 2. OOMKilled Если ты видишь это в kubectl describe pod - у тебя проблема с лимитами. 👉 Поставь requests чуть ниже среднего потребления, limits - чуть выше пика. И не забудь включить VerticalPodAutoscaler - пусть сам подскажет реальные цифры. 3. NetworkPolicies и DNS Часто блокируются сервисы внутри кластера, особенно CoreDNS. 👉 Минимальный тест: kubectl exec -it pod -- nslookup kubernetes.default. Если не работает - смотри NetworkPolicy и iptables в CNI. Подпишись 👉@devopslib
8 206
18
Облако ITENTIS CLOUD: технологии топов, цена без наценки (и живая поддержка!) Нашли брендовую вещь в надежном маркете на 30%
Облако ITENTIS CLOUD: технологии топов, цена без наценки (и живая поддержка!) Нашли брендовую вещь в надежном маркете на 30% дешевле? Вот и мы так же. 😉 ITENTIS CLOUD — не "бюджетный" вариант. Это ВСЕ те же технологии, что у Яндекса, Mail или VK (VPC, Kubernetes, S3, снимки, автомасштабирование), но... 🔥 ...ЗНАЧИТЕЛЬНО ДЕШЕВЛЕ! 🔥 Зачем платить за бренд? Получите то же самое (а кое-что лучше) и сэкономьте. Не верите? Сравните тарифы! Надежные дата-центры Tier III, как у всех. И главное — наша поддержка. Вот где мы их РЕАЛЬНО обходим: 💩 У них: очереди, боты, ответ "в течение 24 часов". 😍 У нас: живой, компетентный специалист 24/7. Не бот! Настоящий человек, который РАЗБЕРЕТСЯ. Ответ за минуты. Сложный Kubernetes? Объясним и поможем. Это наш стандарт. Что вы получаете за меньшие деньги: 1. Та же "начинка": все ключевые технологии (VPC, Kubernetes, S3 и т.д.) — как у топов. 2. Надежность: Tier III, 2FA, шифрование, брандмауэры. 3. Скорость: запуск кластера быстрее доставки пиццы. 4. Простой контроль: интуитивное управление. 5. ГЛАВНОЕ: цена, от которой улыбнетесь + поддержка, которая реально спасает. "А подвох?" Да нигде! ▶️14 дней БЕСПЛАТНО: протестируйте всё. ▶️БЕСПЛАТНАЯ миграция: перенесем ваши проекты без простоев. ▶️Гарантия возврата: риск — ноль. ‼️ Понравится? Расскажите друзьям! Реферальная программа: за каждого клиента — бонус или скидка. Без мишуры. Итог: ITENTIS CLOUD = Технологии топов + Честная цена + Человеческая поддержка 24/7. Хватит переплачивать и ждать ответа! Получите максимум. 👉 Действуйте выгодно: 1. Сравните тарифы: https://itentis.cloud 2. Пишите: 🤖 Telegram-бот: @itentis_bot (Фраза: "Хочу облако дешевле Яндекса!") ✉️ Почта: sales@itentis.ru 3. Скажите: "Читал пост про ЭКОНОМИЮ в облаке!" 🚀(Получите бонус!) 4. Присоединяйтесь: https://t.me/+D0MuFDf8P1FlMTJi https://itentis.ru Мощное облако. Честная цена. Люди на связи. Реклама. ООО "АВАНГАРД", ОГРН 1107746046550, erid: 2VtzqxcZdhf
571
19
💡 Сегодня немного про боль Kubernetes-кластеров Когда у тебя всё крутится в k8s, кажется - удобно: автоскейлинг, изоляция, сервисы живут своей жизнью. Но как только в кластере начинают появляться десятки namespace и сотни подов, без нормальной политики ресурсов всё превращается в хаос. 👉 У каждого пода должны быть requests и limits. Если этого нет - кластер живёт как коммуналка без счётчиков: кто успел, тот и съел. Один жадный контейнер может легко задушить соседей. 👉 Мониторинг на уровне ResourceQuota и LimitRange реально спасает от «сюрпризов» в проде. 👉 А ещё - включите PodPriority и Preemption. Это даёт возможность критичным сервисам выжить, даже если какой-то non-prod под начал жрать всю память. В итоге Kubernetes сам по себе не магия. Это инструмент. А инструмент требует гигиены и правил. Подпишись 👉@devopslib
2 020
20
🚨 Скрытые расходы старого CI/CD Очень часто вижу, что команды годами используют один и тот же CI/CD, который когда-то «поставили и забыли». На первый взгляд всё работает: пайплайны крутятся, артефакты собираются. Но внутри копятся скрытые издержки: 🐌 Медленные билды - ожидание деплоя в 10–15 минут превращается в десятки потерянных часов в месяц. 💸 Железо и лицензии - старые агенты гоняются на жирных VM, которые никто не оптимизировал. 🤯 Сложность поддержки — только один человек знает, как там всё устроено. Уйдёт - полкоманды будет гадать, что за магия в YAML. 🔒 Безопасность - забытые токены, старые версии раннеров, отсутствие актуальных патчей. 👉 В итоге мы «платим налог» не деньгами напрямую, а временем и рисками. Что можно сделать: 1. Поставить метрики времени сборок и деплоя - пусть будет видно реальные цифры. 2. Разобрать пайплайны: есть ли шаги, которые можно параллелить или кэшировать. 3. Проверить обновления агента/раннера. Иногда апгрейд даёт +50% к скорости. 4. Автоматизировать инфраструктуру CI/CD через код (Terraform, Ansible, Helm) - чтобы не зависеть от «человека-ключа». CI/CD - это не просто труба для кодека, а живой сервис. И его тоже надо мониторить и оптимизировать. Подпишись 👉@devopslib
632