Сегодня поговорим о том, как облегчить жизнь при масштабировании инфраструктуры с помощью Terraform и GitLab CI/CD. Если вы еще не пробовали объединять возможности инфраструктурного кода и конвейера сборки, самое время начать!
➡️ 1. Почему Terraform + GitLab CI?
🔵 Terraform позволяет описать состояние вашей инфраструктуры в виде кода. Это не просто создание ресурсов, а контроль версий, ревью изменений и откат к любому предыдущему состоянию.
🔵 GitLab CI/CD же отвечает за автоматизацию. Каждый коммит в ветку может запускать планирование изменений (terraform plan), согласование и применение (terraform apply) без участия человека. В итоге – стабильность и предсказуемость.
➡️ 2. Структура проекта:
🔵 В корне репозитория размещаем директорию
🔵 Создаем файл
1.
2.
3.
4. По результатам
➡️ 3. Пример простого конвейера на скрине
В этом примере при каждом мердж-реквесте проверится валидность и отформатированность кода Terraform, а также будет сформирован план. Чтобы внести изменения в production, нужно вручную нажать “Play” на этапе apply.
➡️ 4. Секреты безопасности и best practices:
🔵 Храните состояние (state) в надежном бекенде. Лучше всего – в S3 (или аналогах) с включенным шифрованием и версионированием. GitLab CI переменными задайте
🔵 Use workspaces для параллельных проверок: если у вас одно и то же окружение нужно тестировать для нескольких веток, включите поддержку разных Terraform workspaces (например,
🔵 Разбейте инфраструктуру на модули. Один модуль – один кластер Kubernetes, другой – базы данных, третий – сеть. Это упростит поддержку и переиспользование кода.
🔵 Политики и проверки. Интегрируйте с Terraform Sentinel или подобными инструментами (например, Open Policy Agent) для проверки соответствия стандартам (тэги, размеры инстансов и т. д.) перед применением.
➡️ 5. Переезд в Kubernetes под защитой Terraform
Если вы используете EKS/GKE/AKS, можно описать кластер как ресурс Terraform, а потом — Helm-релизы через Terraform-Helm-провайдер. Тогда при пуше манифестов в репозиторий вы не только строите образ и пушите его в реестр, но и обновляете Helm-релиз в кластере. Конвейер превращается в единый источник правды для всего стека.
➡️ 6. Мониторинг и оповещения
Не забудьте о интеграции с Prometheus и Alertmanager. Как только кластер Terraform появится, автоматизируйте развертывание необходимых Exporter’ов и настройку Alertmanager (через Terraform). В результате – сразу готовая к работе система мониторинга.
➡️ 7. Советы для ускорения CI/CD:
🔵 Кешируйте плагины Terraform с помощью
🔵 Параллелите проверки: валидация, форматирование и статический анализ (такие инструменты, как tfsec) можно запускать в отдельных job’ах.
🔵 Для крупных коммитов разбивайте apply на несколько этапов: сначала создаете ресурсы инфраструктуры (СУБД, сеть), потом — аппликацию, чтобы быстрее получить feedback.
💡 Совет от профи:
Надеюсь, эти советы помогут вам выстроить надежный, безопасный и быстрый процесс управления инфраструктурой. Пробуйте, тестируйте и не бойтесь экспериментировать!
Подпишись 👉@devopslib
infra/
, где храним модули Terraform для разных сред (staging, production)..gitlab-ci.yml
, который запускает этапы в этом порядке:1.
terraform:init
– инициализация рабочего каталога.2.
terraform:validate
– проверка синтаксиса и форматирование.3.
terraform:plan
– составление плана изменений.4. По результатам
plan
– ручной approval
(при необходимости) и terraform:apply
для production.В этом примере при каждом мердж-реквесте проверится валидность и отформатированность кода Terraform, а также будет сформирован план. Чтобы внести изменения в production, нужно вручную нажать “Play” на этапе apply.
AWS_ACCESS_KEY_ID
/
AWS_SECRET_ACCESS_KEY
, а файлы с учетными данными не храните в репозитории.terraform workspace select feature-xyz
).Если вы используете EKS/GKE/AKS, можно описать кластер как ресурс Terraform, а потом — Helm-релизы через Terraform-Helm-провайдер. Тогда при пуше манифестов в репозиторий вы не только строите образ и пушите его в реестр, но и обновляете Helm-релиз в кластере. Конвейер превращается в единый источник правды для всего стека.
Не забудьте о интеграции с Prometheus и Alertmanager. Как только кластер Terraform появится, автоматизируйте развертывание необходимых Exporter’ов и настройку Alertmanager (через Terraform). В результате – сразу готовая к работе система мониторинга.
cache:key: files(...)
, чтобы избежать повторного скачивания провайдеров.💡 Совет от профи:
При масштабировании команды заведите отдельный GitLab-проект только для Terraform-модулей. В нем реализуйте строгие правила merge request’ов (например, обязательное ревью от тимлида и автоматический запуск tfsec). После этого подключайте эти модули как module
в основном репозитории с приложением. Так вы централизуете контроль и снижаете риск несанкционированных правок.
Надеюсь, эти советы помогут вам выстроить надежный, безопасный и быстрый процесс управления инфраструктурой. Пробуйте, тестируйте и не бойтесь экспериментировать!
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Привет, друзья! Сегодня хочу поделиться своим опытом настройки мониторинга Kubernetes-кластеров с помощью связки Prometheus + Grafana. Это один из самых востребованных сценариев в современных DevOps-стэках, и правильная реализация позволит вам оперативно реагировать на сбои и проседание производительности.
1. Развертывание Prometheus в Kubernetes
Я использую официальный Helm-чарт
После этого Prometheus автоматически начинает собирать метрики с узлов и pod’ов.
2. Сбор метрик с приложений
Помимо стандартных метрик Kubernetes (CPU, память, статус pod’ов), часто нужно мониторить собственные сервисы. Для этого я внедряю в приложения клиентскую библиотеку Prometheus (например,
Так Prometheus начнёт подтягивать кастомные метрики.
3. Настройка alerting’а через Alertmanager
Важно не просто собирать метрики, но и уметь вовремя получать уведомления. С помощью
Эти алерты отправляются в Slack или Telegram-бота, чтобы команда всегда была в курсе.
4. Визуализация данных в Grafana
Helm-чарт сразу разворачивает Grafana с готовыми дашбордами: Kubernetes Cluster Monitoring, Node Exporter, Kube State Metrics и т.д. Я дорабатываю эти дашборды под свои нужды: добавляю графики latency запросов, ошибок HTTP-кодов, значение очередей в RabbitMQ и другие ключевые метрики нашего окружения.
5. Советы по оптимизации производительности
▪️Увеличьте retention данных в Prometheus, если у вас достаточно дискового пространства. Например,
▪️Настройте сервисы сбора метрик так, чтобы они не генерировали слишком «шумные» метрики (агрегация по нужным лейблам).
▪️Используйте
Надеюсь, эта инструкция поможет вам быстро поднять качественный мониторинг Kubernetes. Если есть вопросы или примеры ваших реализаций — пишите в комментариях!
Подпишись 👉@devopslib
1. Развертывание Prometheus в Kubernetes
Я использую официальный Helm-чарт
prometheus-community/prometheus
. Он сразу поднимает основные компоненты: prometheus-server
, alertmanager
, node-exporter
, kube-state-metrics
. Чтобы установить чарт:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
После этого Prometheus автоматически начинает собирать метрики с узлов и pod’ов.
2. Сбор метрик с приложений
Помимо стандартных метрик Kubernetes (CPU, память, статус pod’ов), часто нужно мониторить собственные сервисы. Для этого я внедряю в приложения клиентскую библиотеку Prometheus (например,
prometheus_client
в Go или prom-client
в Node.js) и экспонирую endpoint /metrics
. В Kubernetes достаточно описать ServiceMonitor
:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: myapp-monitor
labels:
release: prometheus
spec:
selector:
matchLabels:
app: myapp
endpoints:
- port: http
path: /metrics
interval: 15s
Так Prometheus начнёт подтягивать кастомные метрики.
3. Настройка alerting’а через Alertmanager
Важно не просто собирать метрики, но и уметь вовремя получать уведомления. С помощью
Alertmanager
я настраиваю правила в Prometheus:
groups:
- name: pod-alerts
rules:
- alert: PodCrashLooping
expr: kube_pod_container_status_restarts_total > 5
for: 10m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} в состоянии CrashLoopBackOff"
description: "Контейнер {{ $labels.container }} перезапускался более 5 раз за последние 10 минут."
Эти алерты отправляются в Slack или Telegram-бота, чтобы команда всегда была в курсе.
4. Визуализация данных в Grafana
Helm-чарт сразу разворачивает Grafana с готовыми дашбордами: Kubernetes Cluster Monitoring, Node Exporter, Kube State Metrics и т.д. Я дорабатываю эти дашборды под свои нужды: добавляю графики latency запросов, ошибок HTTP-кодов, значение очередей в RabbitMQ и другие ключевые метрики нашего окружения.
5. Советы по оптимизации производительности
▪️Увеличьте retention данных в Prometheus, если у вас достаточно дискового пространства. Например,
--storage.tsdb.retention.time=30d
.▪️Настройте сервисы сбора метрик так, чтобы они не генерировали слишком «шумные» метрики (агрегация по нужным лейблам).
▪️Используйте
Thanos
или Cortex
для долгосрочного хранения метрик, если у вас мультидатацентровая архитектура.Надеюсь, эта инструкция поможет вам быстро поднять качественный мониторинг Kubernetes. Если есть вопросы или примеры ваших реализаций — пишите в комментариях!
Подпишись 👉@devopslib
👍8
🛳️ Канареечные релизы в Kubernetes: безопасный путь к обновлениям
В мире SRE и DevOps стремительные релизы — это не просто плюс, а необходимость. Но как выкатывать новые версии сервисов без риска «сломать» продакшн? Ответ — канареечные релизы.
Что такое канареечный релиз?
Это поэтапный rollout, при котором новая версия приложения сначала попадает на небольшой процент трафика. Если всё OK — долю постепенно увеличивают до 100 %, а при проблемах быстро «откатываются» к старому состоянию.
Почему это круто?
🟢 🔍 Минимизируем риски: ошибки затронут лишь небольшой сегмент пользователей.
🟢 ⚡ Быстрый фидбек: метрики сразу покажут, как новая версия ведёт себя под нагрузкой.
🟢 ⏪ Моментальный откат: rollback проще и безопаснее, чем при монолитном апгрейде.
Как настроить канареечный релиз в Kubernetes с Argo Rollouts?
1. Установите CRD и контроллер:
2. Описываем Rollout-манифест:
3. Запустите Rollout:
4. Мониторинг и автоматизация:
Подключите Prometheus и Grafana — настройте метрики (латентность, ошибки) для автоматической паузы или отката.
Советы по продвинутому использованию
🟢 Используйте Webhooks в Argo Rollouts для интеграции с внешними системами тестирования.
🟢 Настройте AnalysisTemplates для автоматической оценки качества релиза по набору SLO.
🟢 Применяйте TrafficRouting через Istio или NGINX Ingress для более гибкого управления трафиком.
Такой подход поможет вам выкатывать фичи без лишнего стресса и без полунощных тревог от неожиданного падения сервисов.
Подпишись 👉@devopslib
В мире SRE и DevOps стремительные релизы — это не просто плюс, а необходимость. Но как выкатывать новые версии сервисов без риска «сломать» продакшн? Ответ — канареечные релизы.
Что такое канареечный релиз?
Это поэтапный rollout, при котором новая версия приложения сначала попадает на небольшой процент трафика. Если всё OK — долю постепенно увеличивают до 100 %, а при проблемах быстро «откатываются» к старому состоянию.
Почему это круто?
Как настроить канареечный релиз в Kubernetes с Argo Rollouts?
1. Установите CRD и контроллер:
kubectl apply -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
2. Описываем Rollout-манифест:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app
spec:
replicas: 5
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 60s}
- setWeight: 50
- pause: {duration: 60s}
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: myregistry/my-app:v2
3. Запустите Rollout:
kubectl apply -f rollout.yaml
argo rollouts get rollout my-app --watch
4. Мониторинг и автоматизация:
Подключите Prometheus и Grafana — настройте метрики (латентность, ошибки) для автоматической паузы или отката.
Советы по продвинутому использованию
Такой подход поможет вам выкатывать фичи без лишнего стресса и без полунощных тревог от неожиданного падения сервисов.
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🚀 Как настроить мониторинг SLO/SLA с Prometheus и Grafana
В любой современной инфраструктуре важно не просто собирать метрики, а строить на их основе понятные цели уровня обслуживания (SLO) и соглашения об уровне обслуживания (SLA). Вот несколько ключевых шагов:
1. Определите ключевые сервисные метрики
🟢 Время отклика API
🟢 Доля успешных запросов (error rate)
🟢 Задержки базы данных
Сфокусируйтесь на показателях, которые прямо влияют на пользовательский опыт.
2. Собирайте метрики в Prometheus
🟢 Используйте
🟢 Внедрите
🟢 Настройте
3. Проектируйте дашборды в Grafana
🟢 Создайте отдельные панели для каждой SLO-метрики.
🟢 Используйте графики «Burn rate» для визуализации скорости деградации системы.
🟢 Настройте плагины для вычисления ошибок в процентах и «time in state».
4. Устанавливайте целевые уровни и оповещения
🟢 Определите допустимую ошибку, например, 99.9% успешных запросов в месяц.
🟢 Настройте алерты на 85% и 95% пороги, чтобы предупредить о приближении к SLA-линии.
🟢 Включите эскалацию в случае длительных нарушений.
5. Периодически пересматривайте SLO
🟢 Анализируйте реальные данные и корректируйте пороги.
🟢 Обсуждайте результаты с командой разработки и бизнес-стейкхолдерами.
Хорошо выстроенный мониторинг SLO/SLA позволяет увидеть узкие места до того, как они станут инцидентами, и обеспечить стабильность пользователей на нужном уровне.
Подпишись 👉@devopslib
В любой современной инфраструктуре важно не просто собирать метрики, а строить на их основе понятные цели уровня обслуживания (SLO) и соглашения об уровне обслуживания (SLA). Вот несколько ключевых шагов:
1. Определите ключевые сервисные метрики
Сфокусируйтесь на показателях, которые прямо влияют на пользовательский опыт.
2. Собирайте метрики в Prometheus
node_exporter
для базового мониторинга хостов.client_golang
или client_python
в ваши сервисы для экспорта бизнес-метрик.alertmanager
для уведомлений при выходе за пороговые значения.3. Проектируйте дашборды в Grafana
4. Устанавливайте целевые уровни и оповещения
5. Периодически пересматривайте SLO
Хорошо выстроенный мониторинг SLO/SLA позволяет увидеть узкие места до того, как они станут инцидентами, и обеспечить стабильность пользователей на нужном уровне.
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📦 Зачем DevOps'у уметь читать Dockerfile, даже если он не пишет их сам
Даже если ты не автор образов, в проде ты всё равно будешь отвечать за их поведение. А это значит — как минимум, уметь читать
Вот зачем это важно:
🔍 Диагностика проблем
Падает контейнер — надо понять, что внутри. Логов нет, трассировки нет, только
🛡 Безопасность
Ты удивишься, сколько «готовых» образов тянут curl/bash скрипты из интернета в рантайме. Это мина под твоим кластером. Умение распознать такую «закладку» спасёт прод.
⚡ Оптимизация CI/CD
Каждый
🔁 Обновления и патчи
Часто нужно просто пропатчить образ: обновить версию пакета или заменить base image. Без понимания
Так что даже если ты не пишешь Dockerfile — читай их. Это как чтение кода: не надо быть гуру, чтобы понимать, что происходит.
Подпишись 👉@devopslib
Даже если ты не автор образов, в проде ты всё равно будешь отвечать за их поведение. А это значит — как минимум, уметь читать
Dockerfile
.Вот зачем это важно:
🔍 Диагностика проблем
Падает контейнер — надо понять, что внутри. Логов нет, трассировки нет, только
Dockerfile
. И если там на 5-й строке COPY ./random.sh /init.sh && chmod +x /init.sh && /init.sh
— ты уже знаешь, где копать.🛡 Безопасность
Ты удивишься, сколько «готовых» образов тянут curl/bash скрипты из интернета в рантайме. Это мина под твоим кластером. Умение распознать такую «закладку» спасёт прод.
⚡ Оптимизация CI/CD
Каждый
RUN apt-get update && install
— это дополнительный слой. А если таких RUN-ов 10? Билд будет долгим, кэш бесполезным. Умеешь читать — можешь подсказать разработчику, как сделать быстрее.🔁 Обновления и патчи
Часто нужно просто пропатчить образ: обновить версию пакета или заменить base image. Без понимания
Dockerfile
ты будешь звать разработчика. А мог бы уже закатить фикс и спать спокойно.Так что даже если ты не пишешь Dockerfile — читай их. Это как чтение кода: не надо быть гуру, чтобы понимать, что происходит.
Подпишись 👉@devopslib
👍6
Media is too big
VIEW IN TELEGRAM
🚀 MEETUPxSPRINT OFFER для инженеров технической поддержки от YADRO
Хочешь узнать, как устроена техническая поддержка в одной из ведущих технологических компаний России? Приходи на онлайн-митап от YADRO! Расскажем, покажем, ответим на любые вопросы — и дадим возможность попасть в команду всего за 3 дня!
🔥 Программа митапа:
✔️ Сервисная служба YADRO: основные ресурсы и направления
Василий Бронников, Руководитель отдела техподдержки решений
✔️ Наши продукты: уникальные характеристики и возможности
Андрей Антоненко, Ведущий инженер техподдержки TATLIN
✔️ Реальные кейсы: как команды решают сложные задачи
Дмитрий Сафонов, Руководитель группы L1-поддержки TATLIN.UNIFIED
🔥 Что тебя ждёт:
➖ Реальные кейсы и инсайты из практики техподдержки
➖ Доклады от инженеров YADRO: продукты, процессы, особенности
➖ Живое общение с командой и ответы на вопросы о работе и технологиях
👨💻 А если ты задумываешься о новой работе — у тебя есть возможность быстро попасть в команду YADRO и получить оффер за 3 дня. Для этого нужно пройти короткий тест. Сделать это можно уже сейчас, а также во время или после митапа — выбирай, как тебе удобно (но заявки принимаем до 6 июля).
📌 Тест можно пройти по ссылке.
➖➖➖
🗓 26 июня, начало в 19:00 мск, четверг
🌐 ОНЛАЙН
✅ Регистрация на мероприятие
Реклама. ООО "ЭВРОНЕ.РУ". ИНН 3663057399. erid: 2VtzqvK4SaS
Хочешь узнать, как устроена техническая поддержка в одной из ведущих технологических компаний России? Приходи на онлайн-митап от YADRO! Расскажем, покажем, ответим на любые вопросы — и дадим возможность попасть в команду всего за 3 дня!
🔥 Программа митапа:
Василий Бронников, Руководитель отдела техподдержки решений
Андрей Антоненко, Ведущий инженер техподдержки TATLIN
Дмитрий Сафонов, Руководитель группы L1-поддержки TATLIN.UNIFIED
🔥 Что тебя ждёт:
➖ Реальные кейсы и инсайты из практики техподдержки
➖ Доклады от инженеров YADRO: продукты, процессы, особенности
➖ Живое общение с командой и ответы на вопросы о работе и технологиях
👨💻 А если ты задумываешься о новой работе — у тебя есть возможность быстро попасть в команду YADRO и получить оффер за 3 дня. Для этого нужно пройти короткий тест. Сделать это можно уже сейчас, а также во время или после митапа — выбирай, как тебе удобно (но заявки принимаем до 6 июля).
📌 Тест можно пройти по ссылке.
➖➖➖
🗓 26 июня, начало в 19:00 мск, четверг
🌐 ОНЛАЙН
✅ Регистрация на мероприятие
Реклама. ООО "ЭВРОНЕ.РУ". ИНН 3663057399. erid: 2VtzqvK4SaS
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 Зачем DevOps'у знать про eBPF?
Если ты ещё не копал в сторону eBPF (extended Berkeley Packet Filter) — пора это менять. Это как иметь суперсилу для наблюдения за системой без перехвата контекста ядра и без перезапуска сервисов.
Вот пара кейсов, где eBPF реально выручает:
🔍 Трассировка сетевых пакетов: без tcpdump и iptables. eBPF-инструменты вроде Cilium или BCC дают возможность видеть, кто, куда и как лезет в сеть прямо сейчас.
🔥 Профилирование процессов в проде:
🧠 Безопасность: можно отловить подозрительную активность на уровне системных вызовов — почти как антивирус, только кастомный и свой.
🎯 В продакшне eBPF — как рентген, только для Linux. В ядро лезть не надо, зато видишь всё.
👨💻 Хочешь пример? Посмотри на
Подпишись 👉@devopslib
Если ты ещё не копал в сторону eBPF (extended Berkeley Packet Filter) — пора это менять. Это как иметь суперсилу для наблюдения за системой без перехвата контекста ядра и без перезапуска сервисов.
Вот пара кейсов, где eBPF реально выручает:
🔍 Трассировка сетевых пакетов: без tcpdump и iptables. eBPF-инструменты вроде Cilium или BCC дают возможность видеть, кто, куда и как лезет в сеть прямо сейчас.
🔥 Профилирование процессов в проде:
perf
и strace
хороши, но eBPF делает это без падений и перегрузок. Реально смотришь, где жрётся CPU, в каких функциях, и как это чинить.🧠 Безопасность: можно отловить подозрительную активность на уровне системных вызовов — почти как антивирус, только кастомный и свой.
🎯 В продакшне eBPF — как рентген, только для Linux. В ядро лезть не надо, зато видишь всё.
👨💻 Хочешь пример? Посмотри на
bpftrace
— пишешь простенькие one-liner скрипты, которые ловят, например, все open()
вызовы в системе за секунды.Подпишись 👉@devopslib
👍2
🚀 Как быстро найти самый большой файл в системе?
Иногда диск внезапно заполняется, и ты такой: «Кто всё съел?!»
Вот простой способ найти самых прожорливых:
🔍 Разбор:
💡 Хочешь искать только среди файлов, без папок? Вот так:
📎 Используй с умом:
Подпишись 👉@devopslib
Иногда диск внезапно заполняется, и ты такой: «Кто всё съел?!»
Вот простой способ найти самых прожорливых:
du -ah / | sort -rh | head -n 10
🔍 Разбор:
du -ah /
— показывает размер всех файлов и директорий, начиная с корня.sort -rh
— сортирует по размеру в обратном порядке (от большего к меньшему).head -n 10
— выводит топ-10 самых тяжёлых файлов и папок.💡 Хочешь искать только среди файлов, без папок? Вот так:
find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -n 10
📎 Используй с умом:
du
может долго работать, особенно на больших дисках. Лучше начать с папки вроде /var
или /home
.Подпишись 👉@devopslib
👍4
🔧 Проверка сети без telnet и nc
Когда
Вот три приёма:
1. Проверка TCP-порта с curl
Подходит даже в контейнерах без nc. Ответ покажет, удалось ли установить TCP-соединение.
2. Проверка порта с bash
Работает, если bash скомпилен с поддержкой
3. curl как ping TCP
Удобно для health-check скриптов.
Подпишись 👉@devopslib
Когда
telnet
и nc
недоступны (например, в проде с урезанными пакетами), на выручку приходит curl
и bash
.Вот три приёма:
1. Проверка TCP-порта с curl
curl -v telnet://host:port
Подходит даже в контейнерах без nc. Ответ покажет, удалось ли установить TCP-соединение.
2. Проверка порта с bash
timeout 1 bash -c '</dev/tcp/host/port' && echo OK || echo FAIL
Работает, если bash скомпилен с поддержкой
/dev/tcp
.3. curl как ping TCP
curl -s --connect-timeout 2 host:port >/dev/null && echo UP || echo DOWN
Удобно для health-check скриптов.
Подпишись 👉@devopslib
👍6
🚨 Почему алерты не спасут твой прод?
Ты настроил алерты. Все по учебнику: CPU > 80%, диск > 90%, latency > 500ms, таймауты, реджекты. Всё работает — ты уверен.
А теперь честно: сколько раз ты видел алерт, но не реагировал, потому что “это бывает” или “оно само отойдёт”? Или наоборот — алерт сработал, но уже поздно, инцидент в разгаре.
Алерты ≠ наблюдение.
Алерт — это реакция на симптом, а не на проблему. И если ты ловишь только симптомы — ты всегда будешь в роли пожарного, а не инженера.
Что делать?
✅ Строй SLO/SLA. Алерты — не про метрики, а про бизнес-цели.
✅ Категоризируй: ошибки уровня приложений, инфраструктуры и пользователей — требуют разных подходов.
✅ Визуализируй поведение системы: Grafana, dashboards, traces.
✅ Добавь runbook: алерт без инструкции — шум.
✅ Смотри в ретроспективу. Где ложные срабатывания? Где не хватило раннего сигнала?
Алерт — это не звонок в дверь, это сигнал тревоги. От него зависит, проснёшься ты вовремя или будешь объяснять CTO, почему уронил прод.
Подпишись 👉@devopslib
Ты настроил алерты. Все по учебнику: CPU > 80%, диск > 90%, latency > 500ms, таймауты, реджекты. Всё работает — ты уверен.
А теперь честно: сколько раз ты видел алерт, но не реагировал, потому что “это бывает” или “оно само отойдёт”? Или наоборот — алерт сработал, но уже поздно, инцидент в разгаре.
Алерты ≠ наблюдение.
Алерт — это реакция на симптом, а не на проблему. И если ты ловишь только симптомы — ты всегда будешь в роли пожарного, а не инженера.
Что делать?
✅ Строй SLO/SLA. Алерты — не про метрики, а про бизнес-цели.
✅ Категоризируй: ошибки уровня приложений, инфраструктуры и пользователей — требуют разных подходов.
✅ Визуализируй поведение системы: Grafana, dashboards, traces.
✅ Добавь runbook: алерт без инструкции — шум.
✅ Смотри в ретроспективу. Где ложные срабатывания? Где не хватило раннего сигнала?
Алерт — это не звонок в дверь, это сигнал тревоги. От него зависит, проснёшься ты вовремя или будешь объяснять CTO, почему уронил прод.
Подпишись 👉@devopslib
👍5❤1
DevOps и SRE: конкуренты или союзники в борьбе за надёжность?
Где заканчивается зона ответственности DevOps-инженера и начинается область контроля SRE?
Приглашаем на открытый урок, где разберём разницу между подходами DevOps и SRE, особенно — в контексте Service Level Indicators (SLI), Service Level Objectives (SLO) и Service Level Agreements (SLA).
✅ Вы узнаете, как эти практики помогают создавать надёжную платформу и кто за что отвечает в команде.
📌 Обсудим как DevOps и SRE трактуют «качество платформы». И кто за какими метриками следит: производительность, аптайм, алерты, ошибки
⬆️ Протестируй курс «SRE практики и инструменты» на открытом уроке: https://vk.cc/cNl1ly
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Где заканчивается зона ответственности DevOps-инженера и начинается область контроля SRE?
Приглашаем на открытый урок, где разберём разницу между подходами DevOps и SRE, особенно — в контексте Service Level Indicators (SLI), Service Level Objectives (SLO) и Service Level Agreements (SLA).
✅ Вы узнаете, как эти практики помогают создавать надёжную платформу и кто за что отвечает в команде.
📌 Обсудим как DevOps и SRE трактуют «качество платформы». И кто за какими метриками следит: производительность, аптайм, алерты, ошибки
⬆️ Протестируй курс «SRE практики и инструменты» на открытом уроке: https://vk.cc/cNl1ly
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔧 Как не словить heart attack от
Сценарий знакомый каждому: выкатываешь новую версию, всё проверено, ребутаешь — и… сервис не стартует. Или стартует, но не так. Или вообще не тот.
Вот пара вещей, которые стоит проверить заранее, чтобы
✅ Проверь
Очень часто забывают правильно указать зависимости между юнитами. Если
✅ Не забудь про
Если ты грузишь переменные из
И что этот файл читаем для systemd!
✅ Работает в
Часто дело в
✅ Логируйся, как будто завтра форензика
Логика простая: чем проще найти ошибку — тем быстрее в проде всё снова работает.
✅ И последнее: не забудь прогнать
🙃
Подпишись 👉@devopslib
systemd
после ребутаСценарий знакомый каждому: выкатываешь новую версию, всё проверено, ребутаешь — и… сервис не стартует. Или стартует, но не так. Или вообще не тот.
Вот пара вещей, которые стоит проверить заранее, чтобы
systemd
не превратился в твоего личного врага:✅ Проверь
WantedBy
и After
Очень часто забывают правильно указать зависимости между юнитами. Если
my-app.service
зависит от postgresql.service
, обязательно пропиши:
[Unit]
After=postgresql.service
Requires=postgresql.service
✅ Не забудь про
EnvironmentFile
Если ты грузишь переменные из
.env
, проверь, что путь указан корректно и файл точно есть:
EnvironmentFile=/etc/my-app/env
И что этот файл читаем для systemd!
✅ Работает в
screen
, а в systemd
— нет?Часто дело в
WorkingDirectory
или User
. Убедись, что все пути абсолютные и права выставлены правильно.✅ Логируйся, как будто завтра форензика
StandardOutput=journal
StandardError=journal
Логика простая: чем проще найти ошибку — тем быстрее в проде всё снова работает.
✅ И последнее: не забудь прогнать
systemd-analyze verify my-app.service
перед выкатыванием. Иногда он спасает от того, что ты бы искал часами.🙃
systemd
— это не враг. Это просто злобный кот. Главное — гладить его по шерсти.Подпишись 👉@devopslib
👍4
🚨 Зачем DevOps-инженеру понимать, как работает сеть?
Ты можешь настроить Kubernetes, автоматизировать CI/CD, мониторить всё через Prometheus и Grafana, но однажды... приложение тупо не работает. А логов — нет. Всё зеленое. И ты лезешь в
Вот почему DevOps обязан понимать сетевые основы:
🔹 DNS — это не просто 8.8.8.8.
Не работает
🔹 TCP three-way handshake.
Без него ты не поймешь, почему соединение не устанавливается. А
🔹 iptables и firewalld — друзья или враги?
Порой
🔹 Traceroute vs MTR.
Ты видишь, где именно теряются пакеты. Очень помогает, когда AWS говорит: “Проблем на нашей стороне нет”.
🔹 Wireshark.
Графический святой грааль сетевого дебага. Но иногда проще
🧠 Итог: умение разбираться в сетевых траблах — это как знание первой помощи. Редко нужно, но когда нужно — спасает прод.
Подпишись 👉@devopslib
Ты можешь настроить Kubernetes, автоматизировать CI/CD, мониторить всё через Prometheus и Grafana, но однажды... приложение тупо не работает. А логов — нет. Всё зеленое. И ты лезешь в
tcpdump
, как в последний оплот здравого смысла.Вот почему DevOps обязан понимать сетевые основы:
🔹 DNS — это не просто 8.8.8.8.
Не работает
curl
? Возможно, DNS-запрос завис. dig
, nslookup
, resolv.conf
— должны быть как вторая клавиатура.🔹 TCP three-way handshake.
Без него ты не поймешь, почему соединение не устанавливается. А
SYN_SENT
в netstat
станет твоим лучшим другом в ночных дебаг-сессиях.🔹 iptables и firewalld — друзья или враги?
Порой
curl localhost:8080
работает, а извне — нет. Порты открыты? Или кто-то по-тихому всё режет?🔹 Traceroute vs MTR.
Ты видишь, где именно теряются пакеты. Очень помогает, когда AWS говорит: “Проблем на нашей стороне нет”.
🔹 Wireshark.
Графический святой грааль сетевого дебага. Но иногда проще
tcpdump -nn -i eth0 port 443
.🧠 Итог: умение разбираться в сетевых траблах — это как знание первой помощи. Редко нужно, но когда нужно — спасает прод.
Подпишись 👉@devopslib
👍5
🚨 Непредсказуемый баг из-за таймаута DNS в Kubernetes
На днях столкнулся с очень странным поведением: один из микросервисов начал периодически отваливаться по таймауту при обращении к другому сервису через DNS. Причём — только в кластере, локально всё ок.
🧩 Разгадка оказалась в CoreDNS и его настройках. По умолчанию, в kubelet
🔍 Что помогло:
🔹Проверил настройки
🔹Установил
🔹В некоторых случаях можно использовать
💡 Совет: всегда проверяйте, какие настройки DNS попадают внутрь Pod'а, особенно если ловите баги «иногда и непонятно почему».
Подпишись 👉@devopslib
На днях столкнулся с очень странным поведением: один из микросервисов начал периодически отваливаться по таймауту при обращении к другому сервису через DNS. Причём — только в кластере, локально всё ок.
🧩 Разгадка оказалась в CoreDNS и его настройках. По умолчанию, в kubelet
--resolv-conf
указывает на /etc/resolv.conf
, где могут стоять опции типа options timeout:5 attempts:3
. Это значит, что при проблемах с DNS один запрос может занимать до 15 секунд (!) прежде чем вернётся ошибка. А если у тебя таймаут в приложении стоит 10 секунд — получай баг с мордой из ниоткуда.🔍 Что помогло:
🔹Проверил настройки
resolv.conf
в Pod'ах (cat /etc/resolv.conf
)🔹Установил
timeout:1 attempts:1
— теперь ошибки быстрее, но предсказуемо🔹В некоторых случаях можно использовать
dnsPolicy: "None"
и задать dnsConfig
вручную💡 Совет: всегда проверяйте, какие настройки DNS попадают внутрь Pod'а, особенно если ловите баги «иногда и непонятно почему».
Подпишись 👉@devopslib
👍5
🔥 Что такое Kubernetes Finalizers и как не словить боль
Когда ты удаляешь объект в Kubernetes — например,
🤔 Пример:
Это значит, что перед удалением кто-то (обычно контроллер) должен сделать, например, очистку ресурсов в AWS или GCP. Только после этого finalizer удаляется, и объект реально исчезает.
💣 Где тут подводные камни?
Если контроллер, который должен удалить финалайзер, умер, сломался или вообще не запущен — объект останется висеть в статусе "Terminating" вечно. А это может заблокировать ресурсы, сломать пайплайны, вызвать боль в проде.
🔧 Как починить?
Иногда приходится руками чистить финалайзеры:
⚠️ Только если ты точно знаешь, что cleanup не нужен или уже сделан.
Подпишись 👉@devopslib
Когда ты удаляешь объект в Kubernetes — например,
CustomResource
, — он не исчезает сразу. Вместо этого kube-apiserver помечает его как deletionTimestamp
, и объект "ждёт" удаления. Почему? Потому что в его манифесте может быть finalizer
— специальный маркер, что "я не готов умереть, пока кто-то не выполнит важную работу".🤔 Пример:
metadata:
finalizers:
- mycompany.com/cleanup
Это значит, что перед удалением кто-то (обычно контроллер) должен сделать, например, очистку ресурсов в AWS или GCP. Только после этого finalizer удаляется, и объект реально исчезает.
💣 Где тут подводные камни?
Если контроллер, который должен удалить финалайзер, умер, сломался или вообще не запущен — объект останется висеть в статусе "Terminating" вечно. А это может заблокировать ресурсы, сломать пайплайны, вызвать боль в проде.
🔧 Как починить?
Иногда приходится руками чистить финалайзеры:
kubectl patch myresource myname -p '{"metadata":{"finalizers":[]}}' --type=merge
⚠️ Только если ты точно знаешь, что cleanup не нужен или уже сделан.
Подпишись 👉@devopslib
👍4
🛠 Что происходит, когда вы вводите
На первый взгляд — просто запрос в браузер через терминал. Но давайте разложим по полочкам, как работает магия под капотом:
1. DNS-резолвинг
2. Установление TCP-соединения
Как только IP получен,
3. TLS Handshake (если HTTPS)
Если вы не указали
4. Отправка HTTP-запроса
После установления соединения
...
5. Получение ответа
Google возвращает HTTP-ответ (200 OK, 301 Redirect и т.д.) и тело страницы, если оно есть.
6. Закрытие соединения
🧠 Это базовый сценарий. Но вы можете добавить
Используете
Подпишись 👉@devopslib
curl google.com
?На первый взгляд — просто запрос в браузер через терминал. Но давайте разложим по полочкам, как работает магия под капотом:
1. DNS-резолвинг
curl
сначала узнаёт IP-адрес для google.com
. Для этого он обращается к системному резолверу, который опрашивает DNS-сервер (например, 8.8.8.8).2. Установление TCP-соединения
Как только IP получен,
curl
инициирует TCP Handshake (SYN → SYN-ACK → ACK) на порт 80 (или 443 для HTTPS).3. TLS Handshake (если HTTPS)
Если вы не указали
http://
, curl
по умолчанию стучится по HTTPS (порт 443). Тогда идёт обмен сертификатами, проверка CA, установка сессионных ключей.4. Отправка HTTP-запроса
После установления соединения
curl
отправляет HTTP-запрос вида:GET / HTTP/1.1
Host: google.com
User-Agent: curl/7.79.1
...
5. Получение ответа
Google возвращает HTTP-ответ (200 OK, 301 Redirect и т.д.) и тело страницы, если оно есть.
6. Закрытие соединения
curl
может держать соединение открытым или закрыть его в зависимости от заголовков (Connection: keep-alive
/ close
).🧠 Это базовый сценарий. Но вы можете добавить
-v
для отладки, --resolve
для подмены DNS, --http2
для тестов HTTP/2, и кучу всего ещё.Используете
curl
только для запросов? Пора качнуть скилл: тест API, дебаг прокси, TLS-тесты, даже работа с SOCKS5 — это всё в арсенале curl
.Подпишись 👉@devopslib
👍3
🎯 Почему логи — твои лучшие друзья (или враги)
Сегодняшний кейс: одна из прод — JVM-аппка начала резко жрать CPU.
Люди в панике, мониторинг орёт, прод выдыхает. Что первым делом? Лезем в логи.
Но вот нюанс: логи в формате
— это как искать иголку в стоге syslog’ов. А когда они ещё и с ротацией без Retention Policy, то удачи…
🔍 Что помогает в таких случаях:
Structured Logging: JSON-формат рулит, особенно когда поверх — ELK или Loki.
Correlation ID: у каждой операции — уникальный ID, без него в микросервисной каше ты слеп.
Уровни логов:
Контроль verbosity: хочешь логировать всё — логируй в dev, но не тащи это в прод.
🧠 Плохие логи — как плохая карта: вроде дорога есть, но ты всё равно заблудишься.
Делай так, чтобы твою систему можно было "прослушать" без шаманства.
Подпишись 👉@devopslib
Сегодняшний кейс: одна из прод — JVM-аппка начала резко жрать CPU.
Люди в панике, мониторинг орёт, прод выдыхает. Что первым делом? Лезем в логи.
Но вот нюанс: логи в формате
INFO 2025-07-22 14:33:12,987 [thread-1] com.example.Class - Doing something
— это как искать иголку в стоге syslog’ов. А когда они ещё и с ротацией без Retention Policy, то удачи…
🔍 Что помогает в таких случаях:
Structured Logging: JSON-формат рулит, особенно когда поверх — ELK или Loki.
Correlation ID: у каждой операции — уникальный ID, без него в микросервисной каше ты слеп.
Уровни логов:
DEBUG
, INFO
, WARN
, ERROR
— это не просто украшение, а ориентиры.Контроль verbosity: хочешь логировать всё — логируй в dev, но не тащи это в прод.
🧠 Плохие логи — как плохая карта: вроде дорога есть, но ты всё равно заблудишься.
Делай так, чтобы твою систему можно было "прослушать" без шаманства.
Подпишись 👉@devopslib
👍2
❤9❤🔥2
Как не сойти с ума, если у тебя 50+ сервисов в проде
В какой-то момент любой проект превращается в зоопарк: десятки микросервисов, разные стеки, свои деплой-пайплайны и непонятно, что вообще сейчас где крутится.
Что помогает выжить:
- Единый шаблон для сервисов. Helm-чарты, Terraform-модули, пайплайны — всё должно быть максимально унифицировано. Новая фича? Меняешь в одном месте, обновляешь все.
- Service Catalog. Даже если это просто таблица в Confluence/Notion, где описано: кто владелец сервиса, где код, как деплоится и где алерты.
- Алерты с приоритетами. Не всё, что сломалось, нужно чинить ночью. Разделяйте: что критично (P1), что можно отложить (P3).
- Автоматизация рутины. Никаких ручных деплоев, ручных настроек в проде. Автообновления, автоалерты, автодеплой.
Если при виде нового сервиса ты не чувствуешь паники — значит, система построена правильно.
Подпишись 👉@devopslib
В какой-то момент любой проект превращается в зоопарк: десятки микросервисов, разные стеки, свои деплой-пайплайны и непонятно, что вообще сейчас где крутится.
Что помогает выжить:
- Единый шаблон для сервисов. Helm-чарты, Terraform-модули, пайплайны — всё должно быть максимально унифицировано. Новая фича? Меняешь в одном месте, обновляешь все.
- Service Catalog. Даже если это просто таблица в Confluence/Notion, где описано: кто владелец сервиса, где код, как деплоится и где алерты.
- Алерты с приоритетами. Не всё, что сломалось, нужно чинить ночью. Разделяйте: что критично (P1), что можно отложить (P3).
- Автоматизация рутины. Никаких ручных деплоев, ручных настроек в проде. Автообновления, автоалерты, автодеплой.
Если при виде нового сервиса ты не чувствуешь паники — значит, система построена правильно.
Подпишись 👉@devopslib
👍2
Зачем DevOps-у разбираться в лицензиях на ПО?
Кажется, что лицензии — это что-то из мира юристов. Но реальность такая: ты выкатываешь инфраструктурный код, ставишь сторонний контейнер или используешь библиотеку — и уже попадаешь под определённые условия.
Представь:
🔘 Ты собрал CI/CD с открытым инструментом, а его лицензия запрещает коммерческое использование.
🔘 Ты сделал форк утилиты, но забыл указать оригинальный copyright.
🔘 Ты упаковал в Docker образ проприетарное ПО и выложил в публичный репозиторий.
Результат? От штрафов до судебных исков.
Что стоит знать:
1. MIT, Apache 2.0, GPL, BSD — это не просто слова. У каждой лицензии есть нюансы: от «делай что хочешь, только оставь копирайт» до «всё твое должно быть тоже open-source».
2. Контейнеры — тоже ПО. Всё, что ты собираешь в образ, может иметь свои условия.
3. Инфраструктурный код (Terraform, Ansible) часто тянет зависимости — смотри, что именно ты используешь.
Совет:
🔘 Внедри в пайплайн лицензионный сканер (например, FOSSA или Trivy с лицензиями).
🔘 Веди реестр используемого ПО.
🔘 Минимум раз в квартал делай аудит лицензий.
DevOps — это не только про аптайм. Это про то, чтобы не схлопотать иск за чужой код.
Подпишись 👉@devopslib
Кажется, что лицензии — это что-то из мира юристов. Но реальность такая: ты выкатываешь инфраструктурный код, ставишь сторонний контейнер или используешь библиотеку — и уже попадаешь под определённые условия.
Представь:
Результат? От штрафов до судебных исков.
Что стоит знать:
1. MIT, Apache 2.0, GPL, BSD — это не просто слова. У каждой лицензии есть нюансы: от «делай что хочешь, только оставь копирайт» до «всё твое должно быть тоже open-source».
2. Контейнеры — тоже ПО. Всё, что ты собираешь в образ, может иметь свои условия.
3. Инфраструктурный код (Terraform, Ansible) часто тянет зависимости — смотри, что именно ты используешь.
Совет:
DevOps — это не только про аптайм. Это про то, чтобы не схлопотать иск за чужой код.
Подпишись 👉@devopslib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1