DevITWay | Павел Волков
166 subscribers
70 photos
6 videos
121 links
Системное мышление → DevOps-практика → карьерный рост.
Production-кейсы, разборы инцидентов, новые подходы.
Бесплатные мини-курсы: Git | Linux | Docker
Веду лично. Основатель DevIT Academy.
devitacademy.com | devopsway.ru | devitacademy.com/kmb
Download Telegram
Утренний шторм в инфраструктуре не начинается с громких взрывов – он стартует с тихого шёпота в алертах.

Сегодня прилетел алерт с моей инфры. В 06:15:45 мониторинг фиксирует рядовой сбой:

⚠️ SystemdServiceFailed: nvidia-cdi-refresh.service — failed


На этот предупреждающий писк я почти забил. А зря: именно он оказался единственным свидетелем катастрофы, которая через несколько минут уронит сервер в софтверный нокаут с перегревом процессора до 96°C 🫠

Как один ночной апдейт запускает цепную реакцию:

1. Автообновление (unattended-upgrades) ночью накатывает новый драйвер NVIDIA. Пользовательские библиотеки и модуль на диске получают новую версию, а работающий в ядре старый выгрузить нельзя, его держат активные процессы. Возникает критический рассинхрон версий (mismatch).

2. Сервисы теряют GPU, падают на процессор, нагрузка улетает в космос, система раскаляется докрасна.

3. И вишенка: Docker рапортует, что девайс используют все контейнеры разом, а реально его держат всего два процесса. Манифесты врут, симптомы маскируют истинную причину.

Как распутать клубок версий, выгрузить старый драйвер без ребута хоста и настроить детектор рассинхрона, чтобы ловить проблему за 9 минут до перегрева – в подробном разборе:

👉 https://devopsway.ru/posts/incident-nvidia-driver-mismatch/

#кейс #devops
2🔥2
⚡️ DevOps Digest #25 | 27.07.2026

🔥 Главное за неделю:

1. 10 типичных ошибок в CI/CD-пайплайнах – от "set and forget" до одного монолитного пайплайна на всё, из-за чего сборки тормозят, а команда буксует. Хороший чек-лист, чтобы пересобрать процесс, а не терпеть 40-минутные прогоны на каждый push.
🔗 https://devops.com/these-are-10-ci-cd-pipeline-mistakes-that-slow-down-engineering-teams-2/

2. Self-hosted WAF в Docker за 15 минут – разбор, как поставить перед своим стеком открытый SafeLine (reverse-proxy перед Nginx), не трогая код приложения. Режет ботов, сканеры и SQL-инъекции; ставится рядом с уже работающим reverse-proxy. Практично для одиночного VPS, который сразу начинают сканировать из интернета.
🔗 https://dev.to/_eb0609572b9efcf27472066/how-i-added-a-self-hosted-waf-to-my-docker-stack-in-15-minutes-11hn

3. Observability в одном Go-бинарнике – инженер собрал self-hosted, Sentry-совместимый сбор ошибок поверх PostgreSQL и ClickHouse, без Kafka и Redis. Для пары проектов, где официальные "два десятка контейнеров" – это перебор; перенос сводится к смене DSN в существующем SDK.
🔗 https://habr.com/ru/articles/1062624/

4. Terraform: восстановление workspace и Stacks (GA) – HCP/Terraform Enterprise научился откатывать удалённый workspace или stack в один клик, вместе со стейтом, историей прогонов и переменными. Раньше случайно снесённое окружение импортировали руками по ресурсу – теперь есть штатный recovery.
🔗 https://www.hashicorp.com/blog/terraform-introduces-workspaces-and-stacks-restore-and-more

5. Что сломалось, что зависит, кто владелец – три вопроса при любом алерте, на которые без карты сервисов (service map) отвечают часами методом тыка. Разбор, как service architecture превращает эти часы в минуты. База для быстрого разбора инцидентов, которой в легаси-командах часто просто нет.
🔗 https://thenewstack.io/build-resilient-service-architecture/

6. SRE Weekly #527 – свежая подборка: цена дежурства с кодом, который написал AI (кто и как отлаживает это в 3 ночи), негативное время до обнаружения инцидента и разбор сложной миграции Kafka в Honeycomb. Хорошее чтение на неделю.
🔗 https://sreweekly.com/sre-weekly-issue-527/

🛠 Команда недели:
docker system df -v

Показывает, что реально занимает место на Docker-хосте – образы, контейнеры, тома и build cache, с колонкой RECLAIMABLE (сколько можно освободить). Первое, что смотреть, когда на сервере внезапно кончается диск, до того как вслепую запускать prune.

#дайджест #devops #security

💬 Переслал коллегам? Пусть подпишутся: @DevITWay
2🔥1
"Я джун, взяли меня прямо перед твоим отпуском.
Ты уехал на Багамы, связь фиговая – еле созвонились.
У нас полсайта лежит, я твои руки на клавиатуре. Диктуй, что делать."

Один из моих дежурный вопросов на собесе, который позволял понять, кто по ту сторону экрана. И это честная проверка: знаешь ты сети или просто помнишь, куда тыкать. Печатаешь не ты – мышечная память бесполезна. Надо вслух, по шагам, вести чужие руки: что за ошибка, на каком уровне искать, какой командой.

А половина таких "полсайта лёг" – это 5xx на прокси. Первое, что диктуешь джуну: не рестартить nginx – он-то как раз работает. 502 значит, что прокси жив, но не достучался до бэкенда за ним. Дальше по шагам: curl к бэкенду мимо nginx, ss – кто слушает порт, логи. Чинишь либо сам сервис, либо связь до него.

📺 Networking 20/80, пятый пост. Те самые 20% сетей, что закрывают 80% работы DevOps. Слои, адреса, имена и соединения уже разобрали – сегодня язык, на котором говорит почти весь веб: HTTP и его зашифрованный конверт TLS.

В посте:
– анатомия запроса и ответа: что реально летит в curl -v;
– статус-коды группами (2xx/3xx/4xx/5xx) – почему их учат пачками, а не по одному;
– 401 против 403 – классика собеса, на которой путаются даже сеньоры;
– как дебажить 502 по шагам, а не гаданием;
– TLS-рукопожатие: что именно проверяет сертификат и откуда бесплатные Let's Encrypt;
– чем HTTP/2 и HTTP/3 отличаются от привычного HTTP/1.1.

Плюс три подвоха с собеса – включая коварный "зачем TLS, если трафик и так внутри VPC".

Полная версия 👇

https://devopsway.ru/posts/networking-04-http-tls/

#networking #linux #devops
🔥51
⚡️ DevOps Digest #26 | 03.08.2026

🔥 Главное за неделю:


1. Homelab дорос до прода: SQLite уронил control plane k3s – k3s по умолчанию хранит состояние в SQLite (через kine). Десятки операторов с leader-election раздули базу: WAL 13.8 ГБ не чекпоинтился, CPU в потолок, load 79 на 8 ядрах. Разбор инцидента + миграция на встроенный etcd (7.5 ГБ SQLite → 313 МБ etcd, load 79 → 5). Гоняешь k3s не только для тестов – закладывай etcd заранее.
🔗 https://dev.to/tomaszwostal/when-your-homelab-grows-up-how-sqlite-took-down-my-k3s-control-plane-1kdp

2. GitHub бьёт по supply-chain-атакам на npm и GitHub Actions – разбор, как устроены цепочки атак через пакеты и CI/CD (кража токенов, саморазмножение по сотням проектов) и какие защиты GitHub уже включил. Читать всем, у кого пайплайны тянут внешние экшены и пакеты.
🔗 https://github.blog/security/supply-chain-security/disrupting-supply-chain-attacks-on-npm-and-github-actions/

3. DNS – это инфраструктура. Управляй ей как кодом – домены и DNS-записи всё ещё правят руками в дашборде регистратора, без истории "кто что менял". Тезис простой: заводи их в Terraform/Ansible, как и остальную инфру. Напоминание – 1.1.1.1 от Cloudflare лежал 62 минуты не из-за атаки, а из-за misconfiguration.
🔗 https://thenewstack.io/dns-domain-management-automation/

4. Почему логи – недостающее звено в разборе инцидентов – метрики показывают, ЧТО сломалось, но первопричина чаще в логах, а прыжки между тремя инструментами (метрики → логи → трейсы) съедают время. У трети команд 5+ инструментов observability, у двух третей время до устранения больше 4 часов.
🔗 https://devops.com/why-log-monitoring-is-the-missing-link-in-most-incident-response-workflows/

5. gluetun – VPN-клиент в лёгком Docker-контейнере – один контейнер заворачивает трафик других сервисов в OpenVPN/WireGuard, с DNS-over-TLS и парой прокси из коробки. Удобно для self-hosted: прячешь исходящий трафик контейнеров за VPN, не трогая сами сервисы.
🔗 https://github.com/passteque/gluetun

6. SRE Weekly #528: контринтуитивно про инциденты – подборка недели: если гнаться за снижением ЧИСЛА инцидентов – система станет менее надёжной; цель – больше инцидентов, отработанных хорошо. Плюс новая роль incident tech lead и постмортем Spotify по сбою публикации подкастов.
🔗 https://sreweekly.com/sre-weekly-issue-528/

🛠 Команда недели:
ip route get 1.1.1.1

Показывает, через какой интерфейс и с каким исходным IP реально уйдёт пакет к адресу. Мгновенно отвечает на вопрос "с какой NIC на самом деле выходит трафик" на multi-homed хосте – когда есть несколько сетей и подозреваешь асимметричный роутинг.

#дайджест #kubernetes #security

💬 Переслал коллегам? Пусть подпишутся: @DevITWay
2🔥1
iptables -j DROP не в той строке

SSH отвалился, а до сервера уже не достучишься, пока не доберёшься до консоли.

Файрвол – это не набор правил, а алгоритм: он читает их сверху вниз и останавливается на первом совпадении.
Поставил общий DROP выше, чем ACCEPT на порт 22 и твой SSH попал под запрет раньше, чем под разрешение. Правило верное, порядок нет. На удалённом сервере это уже не отладка, а квест через управляющую консоль или через звонок админу с просьбой ребутнуть железку.

Тот же принцип белого списка кусает и в Kubernetes. Одна NetworkPolicy с default-deny на namespace и поды перестают резолвить имена: забыл открыть egress на DNS (UDP 53). По всему кластеру "Name or service not known", дежурный час копает CoreDNS, а DNS жив, его просто перестали выпускать. Обычно "виноват всегда DNS", а тут его полномочия как бы всё.

Firewall – это не стена, а фильтр: на каждый пакет решение "пропустить / отбросить молча / отказать явно" по правилам, которые читаются по порядку.

📺 Networking 20/80, шестой пост. Те самые 20% сетей, что закрывают 80% работы DevOps. Слои, адреса, имена, соединения и HTTP уже разобрали – сегодня как этот трафик фильтровать и не отстрелить себе ногу или чего ещё 🫠

В посте:
– iptables как фундамент: таблицы, цепочки и почему их ПОРЯДОК решает – одно правило не на своём месте открывает или рубит всё;
– DROP против REJECT: почему один клиент висит до таймаута, а другой сразу ловит "refused" – и когда что выбирать;
– Kubernetes NetworkPolicy: почему в кластере по умолчанию всё открыто и как закрыть по белому списку, не уронив DNS;
– Security Groups в облаках – тот же файрвол, но для виртуалок, и чем stateful отличается от stateless;
– чеклист "почему после правила перестало работать".

Плюс три подвоха с собеса и код-челлендж: написать NetworkPolicy, которая пускает только откуда надо.

Полная версия с iptables, NetworkPolicy и Security Groups 👇

https://devopsway.ru/posts/networking-05-firewall/

#networking #security #devops
🔥41
⚡️ DevOps Digest #27 | 10.08.2026

🔥 Главное за неделю:


1. KubeVirt: живая миграция VM между кластерами упирается не в KubeVirt, а в сеть – децентрализованная live-migration приехала в v1.6, но VM должна сохранить IP и MAC на новом кластере, а значит нужен растянутый L2 между площадками. Разбор, как это закрыть через EVPN без новых VLAN, тикетов и change-window. Актуально всем, кто переносит VM в Kubernetes взамен VMware.
🔗 https://thenewstack.io/kubevirt-evpn-vm-migration/

2. Dependabot теперь ловит вредоносные пакеты не только в npm, а в 8 экосистемах – malware-предупреждения расширены на PyPI, Maven, RubyGems, NuGet, Go, crates.io и PHP Composer (на базе открытых данных OpenSSF malicious-packages). Если тянете зависимости из публичных реестров – теперь алерты приходят и по Go, Rust, Python, а не только по JS.
🔗 https://github.blog/security/supply-chain-security/how-we-took-malware-advisories-beyond-npm/

3. Docker-песочницы в 2026: как изолировать недоверенный код и где это ломается – практический разбор границ безопасности контейнера через namespaces, cgroups и capabilities, и когда их уже мало (нужен gVisor). Главная мысль для легаси-контуров: ядро у контейнера и хоста общее, побег из контейнера = доступ к хосту.
🔗 https://dev.to/kaixintelligence/docker-sandboxes-in-2026-the-evolution-of-secure-code-isolation-55b8

4. Microsoft выложил open-source агент для генерации юнит-тестов – code-testing-generator (в репозитории dotnet/skills) полезен не столько кодом, сколько уроком про тихий отказ: AI-тесты часто компилируются и проходят локально, но никогда не запускаются в CI, потому что их забыли подключить к решению или тест-команде. Проверьте, что ваши тесты реально гоняются в пайплайне, а не только на ноутбуке.
🔗 https://devops.com/microsofts-new-testing-agent-tackles-the-trust-gap-in-ai-generated-code/

5. Ansible на русском: настройка серверов с нуля (часть 7.1 серии "С нуля до Junior DevOps") – пошагово про автоматизацию рутины после создания сервера: пакеты, пользователи, службы, Docker, Nginx. Хороший вход в IaC для джунов и тех, кто до сих пор настраивает серверы руками.
🔗 https://habr.com/ru/articles/1068460/

6. SRE Weekly #529: процесс инцидентов – это не документ, а программа – подборка недели: почему процесс управления инцидентами загнивает без поддерживающей его программы, кейс с route cache ядра как скрытым убийцей надёжности и как LLM-агенты меняют паттерны запросов к системам наблюдаемости. Пища для тех, кто выстраивает культуру эксплуатации, а не только графики.
🔗 https://sreweekly.com/sre-weekly-issue-529/

🛠 Команда недели:
ip -s link

Показывает счётчики ошибок и потерь по каждому интерфейсу (errors, dropped, overrun) – первый шаг, когда подозреваешь потерю пакетов или флапающий линк, прежде чем винить приложение или сеть.

#дайджест #kubernetes #security

💬 Переслал коллегам? Пусть подпишутся: @DevITWay
🔥61
kubectl get pods – всё Running, казалось бы.
Service есть. А в ответ – 503.

Потому что selector в Service разошёлся с labels пода на один символ, и список endpoint-ов пустой. Кубер сделал ровно что просили: слать трафик туда, где никого нет.

Service – это вам не сервер. Это правило "куда слать": совпали labels – есть endpoint-ы, не совпали, пока пока, 503 при живых подах. И так на каждом слое: снаружи Ingress (L7, роутинг по Host/URL) → Service (L4, стабильный IP) → iptables/kube-proxy → pod. Пять мест, где "всё выглядит правильно", а трафик не идёт.

📺 Networking 20/80, седьмой и последний пост. Те самые 20% сетей, что закрывают 80% работы DevOps. Модель, адреса, DNS, TCP, HTTP и файрволы уже разобрали – сегодня собираем всё вместе: как запрос снаружи долетает до пода и делится между репликами.

В посте:
– L4 против L7: почему Service балансирует по IP:порту, а маршрутизация по URL и Host – это уже Ingress;
– четыре типа Service (ClusterIP / NodePort / LoadBalancer / ExternalName) – что где открывается наружу;
– Ingress и nginx как обратный прокси: терминация TLS, upstream, алгоритмы балансировки – и почему их нельзя смешивать в одном upstream;
– service mesh на пальцах: что даёт sidecar (Envoy) и почему джуну не надо настраивать Istio;
– чеклист диагностики: Service → Endpoints → DNS → Ingress, где именно рвётся.

И да – контроллер ingress-nginx ушёл на пенсию в марте 2026. Поэтому разбираем принципы L4/L7, а не один тул: они переносятся на любой контроллер.

Плюс три подвоха с собеса (в том числе "почему kube-proxy – вовсе не proxy") и финальный код-челлендж: описать весь путь запроса от https://… до пода по слоям.

Финал мини-курса. Полная версия 👇

https://devopsway.ru/posts/networking-06-lb-k8s/

#networking #kubernetes #devops
🔥4
⚡️ DevOps Digest #28 | 17.08.2026

🔥 Главное:

1. Flux выпустил Flux Mirror – плагин CLI, который по декларативной конфигурации зеркалирует образы, Helm-чарты и OCI-артефакты между реестрами с проверкой политик прямо при синхронизации. Для закрытого контура это способ убрать чужие реестры из своей прод-архитектуры (привет rate limits Docker Hub и заморозке каталога Bitnami).
🔗 https://fluxcd.io/blog/2026/08/flux-mirror/

2. GitLab Secrets Manager (на движке OpenBao) получил поддержку External Secrets Operator и Terraform/OpenTofu. Один секрет-стор с Vault-совместимым KV v2 API для рабочих нагрузок Kubernetes, IaC и CI/CD – меньше рассинхрона моделей доступа и разрозненных журналов аудита.
🔗 https://about.gitlab.com/blog/gitlab-secrets-manager-add-eso-terraform-api-support/

3. ProjectDiscovery выпустила Neo 1.0 – открытую платформу автономного тестирования уязвимостей на базе Nuclei, Subfinder, httpx, Katana и Naabu. Есть интеграции с GitHub, Jira и Model Context Protocol; ядро полностью open-source, что удобно для self-hosted обвязки.
🔗 https://devops.com/projectdiscovery-brings-open-source-ai-testing-to-vulnerability-discovery/

🔍 Неподписанные образы – это отложенная мина
Сканер отвечает на вопрос "что лежит внутри образа", но не на главный: "кто его собрал и не подменили ли его после сборки". Это разные гарантии, и вторую даёт только криптографическая подпись. В закрытом контуре с внутренними реестрами подпись через cosign плюс проверка на этапе синхронизации (та же Flux Mirror) и на admission (Kyverno/policy-controller) – это не роскошь, а базовая гигиена цепочки поставки, особенно с учётом наследования от базовых образов.
🔗 https://thenewstack.io/unsigned-container-images-ai/

🛠 Команда дня:
docker history --human --format '{{.Size}}\t{{.CreatedBy}}' nginx:latest | sort -rh | head

Показывает самые тяжёлые слои образа – сразу видно, какой шаг сборки раздувает вес и где резать.

#дайджест #security #devops

💬 Переслал коллегам? Пусть подпишутся: @DevITWay
1👍1🥰1
Раньше как было? Берешь железку, операционную систему, шаманский бубен, собираешь систему с нуля и получаешь ровно то, что нужно.
Ничего лишнего, только железобетонная стабильность.
Прошло энцать лет.

Как встроенный беспроводной интернет положил сервер на 6 часов

9 августа мой главный рабочий компухтер, на котором крутится ЛЛМка, ушел в глухой зависон. Без предупреждений, без нормального завершения работы, журнал просто обрывается.
Первая мысль, наверное, питание, в июле уже было похожее. Но нет, соседний бокс на том же порту пахал 25 дней без единого чиха. Сеть жива.
Лезем в системные журналы за прошлый сеанс. За 6 минут до смерти видим каскад системных ошибок. Виновник? Встроенный модуль беспроводной связи MediaTek. Прошивка потеряла связь, драйвер пошел в перезагрузку, зацепил оперативную память и всё завертелось, система встала намертво.
Самое обидное: этот беспроводной модуль вообще никогда не включался. Сервер подключен к интернету через обычный провод, беспроводная сеть не использовалась. Программа управления просто болталась в памяти и померла от скуки.

Что сделал:
Прописал в системе жесткий запрет на запуск драйверов этой беспроводной платы.
Пересобрал загрузочный образ, чтобы эта зараза даже не пыталась грузиться на старте.
Включил аппаратный сторожевой таймер. Если опять повиснет — перезагрузится сам за полминуты, а не будет лежать тушкой до ручного перезапуска.

Мораль сей басни такова:
Неиспользуемая часть системы, не "пусть висит", а готовая точка отказа. Особенно всякие беспроводные чипы на платах, которые мы берем с запасом.
Удаляйте всё, что не нужно. Запрещайте то, чем не пользуетесь. И ставьте автоматическую перезагрузку на всё, к чему не хочется ездить ногами.

#DevITWay #ProductionStories #Linux
👍31🔥1
⚡️ DevOps Digest #29 | 24.08.2026

🔥 Главное:


1. Radar – open-source UI для Kubernetes от Skyhook: один Go-бинарник без регистрации, топология кластера, timeline событий, менеджер Helm-релизов, GitOps для FluxCD и встроенный read-only MCP-сервер для ИИ-агентов. Разворачивается через Helm, замена связке Lens/Headlamp без тяжёлого десктоп-стека, разумный дефолт "только чтение".
🔗 https://habr.com/ru/articles/1073566/

2. Критический RCE в Serena, одном из популярных ИИ-агентов для кода: вредоносный .serena/project.yml выполняет произвольный код в момент открытия проекта, обходя защиту trusted_project_path_patterns. Обновляйтесь до 1.7.0 – и это первый пример нового класса угроз через MCP-серверы.
🔗 https://about.gitlab.com/blog/critical-rce-in-serena/

3. Flux Mirror – новый плагин Flux CLI зеркалит образы, Helm-чарты и OCI-артефакты между реестрами по декларативной конфигурации с проверкой политик при синхронизации. Прямое лекарство для закрытых контуров: заморозка бесплатного каталога Bitnami и лимиты Docker Hub перестают быть частью вашей прод-архитектуры.
🔗 https://fluxcd.io/blog/2026/08/flux-mirror/

4. Практический разбор Node NotReady: это два инцидента в одном – больной узел и осиротевшие поды. Kubelet жив и жалуется (сломанный runtime/CNI/PLEG) – чинишь на узле через journalctl -u kubelet; kubelet молчит – это мёртвый узел, протухший сертификат или сетевой разрыв, и через 5 минут поды выселяются по NoExecute-taint.
🔗 https://dev.to/devtocash/kubernetes-node-notready-how-to-debug-and-fix-it-5cda

5. Kubernetes v1.37 sneak peek: депрекация режима ipvs у kube-proxy, статичные поды больше не могут ссылаться на Secrets/ConfigMaps (feature gate удалён), депрекация kubectl run -f. Проверьте манифесты заранее, особенно если держите kube-proxy в режиме ipvs.
🔗 https://kubernetes.io/blog/2026/07/31/kubernetes-v1-37-sneak-peek/

🔍 Подпись образов: сканер говорит что внутри, но не кто собрал
Сканирование отвечает на вопрос "какие уязвимости в образе", но не на "кто его собрал и не подменили ли его после сборки" – а это важнее, когда каждый образ наследует базовый по цепочке. Практический минимум за пару часов: заморозить непроверенные зависимости с периодом выдержки и отключить lifecycle-скрипты, собирать через multi-stage, генерировать SBOM с провенансом и блокировать в CI исправимые Critical-CVE по точному digest образа. Подпись – это проактивное доказательство происхождения, а не реактивное сканирование постфактум.
🔗 https://thenewstack.io/unsigned-container-images-ai/

🛠 Команда дня:
df -i | awk 'NR==1 || ($5+0)>80'

Показывает файловые системы, где израсходовано больше 80% inode – частая причина "No space left on device", когда df -h показывает свободное место.

#дайджест #kubernetes #security

💬 Переслал коллегам? Пусть подпишутся: @DevITWay
👍21🔥1
Вот лето пролетело, но мы-то знаем, что лучшее впереди

Прошлой весной я всерьёз залез в LLM. Читал про очередную модель и думал: да они же скоро всё смогут. Ещё годик, и кодить будет нейросеть, а я – элегантно ей дирижировать.

Прошло чуть больше года.

Есть такой киноприём: первый кадр – герой висит над пропастью или горит в машине, всё вокруг летит к чёрту, картинка замирает, и голос за кадром: "Вам, наверное, интересно, как я сюда попал". Вот это самое я чувствую каждое утро, вставая к компу. Да, теперь не дом – работа – дом, а кровать – комп – кровать, ибо пришлось помарафонить.

До этого я много лет работал в энтерпрайзе, где у каждой ручки сидел специально обученный человек. Хочешь релиз – заявка, согласование, окно. Медленно, бюрократично, зато крайний – никогда не ты.

Мне бы убрать к чёрту все эти преграды, дайте рычаги – сам сделаю быстро и как надо. И тут подвернулся ровно такой шанс. Правда, теперь всё чаще ловлю себя на мысли, что надо было в сантехники.

Мечта сбылась. Преград не осталось. Крайний теперь всегда один.

На текущем проекте я не абы кто, не разработчик, не девопс, а тот чувак с ЛЛМками. Задача на словах простая: перенести двухлетнее легаси. На деле – раскопки. Археологические слои, по которым читается смена поколений: вот код, который писали руками; вот место, где в проект зашли LLM; вот костыли и самокаты, наваленные лишь бы закрыть задачу к дедлайну. И теперь всё это моё. 🤪

Как говорится, "бойтесь своих желаний" (с). Человек-оркестр – мечта идиота: я хотел мир без бюрократии и без специально обученного человека на каждой ручке, и получил его целиком. Вместе со всеми ручками. Команду ещё предстоит набрать и обучить.

Так что это новая рубрика – записки сумасшедшего девопса. Что горело, что я потушил, что поджёг сам. Часто это один и тот же пожар.

Дальше буду показывать и рассказывать, из каких ролей этот оркестр собран на самом деле и на какие грабли я в каждой напоролся. Может, чего и вам пригодится.

#devops #LLM #человек_оркестр
🔥42👍2😁2
⚡️ DevOps Digest #30 | 31.08.2026

🔥 Главное:

1. Вышел Kubernetes v1.37 "Garhwal" – 67 изменений, из них 16 в Stable. Ключевое для эксплуатации: Metrics API (metrics.k8s.io, за kubectl top и HPA) доведён до v1, а Pod Certificates и Cluster Trust Bundles стали GA – выдача X.509 для TLS/mTLS встроена прямо в ядро, без внешнего CA для рабочих нагрузок.
🔗 https://kubernetes.io/blog/2026/08/26/kubernetes-v1-37-release/

2. Критическая уязвимость в Redis (CVE-2026-81934): use-after-free при обработке TLS-данных, аутентифицированный атакующий потенциально получает удалённое выполнение кода. Патч уже вышел – если Redis смотрит наружу с TLS, обновляйтесь не откладывая.
🔗 https://redis.io/blog/security-advisory-cve-2026-81934/

3. Практика экономии на нодах Kubernetes: паттерн node overprovisioning через PriorityClass и placeholder-поды. KEDA схлопывает кластер ночью, а утром пустые capacity-поды мгновенно отдают место бизнес-нагрузке – никакого ожидания, пока Cluster Autoscaler поднимет новую ноду. Готовый демо-стенд в статье.
🔗 https://habr.com/ru/articles/1076538/

4. Cloudflare переупаковала DNS-кэш 1.1.1.1: пять изменений раскладки в памяти срезали размер записи более чем на 50% и освободили около 100 ТБ RAM по флоту. Бонусом +43% на вставку и −19% к задержке чтения – редкий случай, когда экономия памяти ещё и ускоряет.
🔗 https://blog.cloudflare.com/dns-cache-memory-optimization-1111/

5. GitLab показал next-gen SCM: Git проектировался под людей, а не под флот агентов. Клон ради одного файла = 5–10 ГБ трафика и 30+ секунд на старт; переписывают бэкенд под изоляцию сессий и concurrency. Разработчикам с автоматизацией под сотни агентов стоит следить.
🔗 https://about.gitlab.com/blog/gitlab-next-gen-scm/

🔍 Обновление сертификата – это деплой-процесс, а не задача в cron:
Успешная ACME-транзакция доказывает лишь, что сертификат выпущен, – но не то, что нужный сервис отдаёт его пользователям. Между выпуском и рабочим состоянием ломается всё: файл не скопировался на хост, контейнер не перемонтировал секрет, nginx/HAProxy не сделал reload. Правильная модель – это цепочка renew → deploy → reload → verify → recover, где каждый шаг проверяется, а не считается выполненным по факту зелёного джоба. Если руками надоело – посмотрите на self-hosted certimate: полный цикл выпуска, деплоя, продления и мониторинга ACME-сертификатов визуально.
🔗 https://github.com/certimate-go/certimate

🛠 Команда дня:
cat /proc/sys/net/netfilter/nf_conntrack_count /proc/sys/net/netfilter/nf_conntrack_max

Показывает текущее число отслеживаемых соединений и лимит conntrack – если первое подбирается ко второму, ядро начнёт дропать пакеты (nf_conntrack: table full), и это одна из любимых причин "загадочных" таймаутов на нодах Kubernetes.

#дайджест #kubernetes #security

💬 Переслал коллегам? Пусть подпишутся: @DevITWay
👍21🔥1