Библиотека девопса | DevOps, SRE, Sysadmin
10.4K subscribers
2.03K photos
82 videos
9 files
3.48K links
Все самое полезное для девопсера в одном канале.

Наши курсы: https://clc.to/ZJ7Z1w

По рекламе: @proglib_adv

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
🖥 Cмотрим, что реально делает GPU

GPU загружен на 95% — звучит хорошо. Но это ничего не говорит о том, занят ли он полезной работой или просто ждёт данных. Стандартные метрики показывают занятость, но не эффективность.

utilyze решает именно эту проблему. Он измеряет SOL (Speed-of-Light) — насколько GPU использует свой теоретический максимум по вычислениям и пропускной способности памяти. И делает это в реальном времени, не замедляя нагрузку.

Что под капотом

Инструмент написан на Go и C++, использует NVIDIA CUPTI и Perf SDK для сбора аппаратных счётчиков. Работает на Linux amd64, требует GPU архитектуры Ampere и CUDA 11.0+.

Установка:
curl -sSfL https://systalyze.com/utilyze/install.sh | sh


При установке потребуется sudo — инструмент ставится системно. Если CUPTI 12+ не найден, при первом запуске предложит доустановить его через PyPI.

Запуск:
# мониторинг всех GPU
sudo utlz

# только конкретные устройства
sudo utlz --devices 0,2

# показать эндпоинты инференс-серверов на каждом GPU
sudo utlz --endpoints


По умолчанию NVIDIA ограничивает доступ к профилировочным счётчикам для не-root пользователей.

Чтобы запускать без sudo, нужно один раз отключить это ограничение:
echo 'options nvidia NVreg_RestrictProfilingToAdminUsers=0' | sudo tee /etc/modprobe.d/nvidia-profiling.conf
sudo reboot


Поддержка инференс-серверов

utlz умеет обнаруживать эндпоинты инференс-серверов и показывать roofline-потолки для каждого GPU — то есть, какой максимум достижим при текущей конфигурации. Сейчас поддерживается только vLLM, поддержка других бэкендов заявлена.

Сборка из исходников

Если нужна сборка самостоятельно — потребуется Go 1.25+, Docker и CUDA Toolkit:
# собрать нативную библиотеку и CLI
make all

# только CLI
make utlz


Есть экспериментальная поддержка ARM64 через sbsa-linux CUDA target.

Если вы занимаетесь LLM-инференсом или любой другой GPU-нагрузкой и хотите понять, насколько эффективно используется железо, utilyze даёт ответ конкретными числами, а не процентом занятости.

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧠 Мини-тест

Какой тип Kubernetes использует внешний балансировщик облачного провайдера?

А) ClusterIP
Б) NodePort
В) LoadBalancer
Г) ExternalName

👉 Пишите ответ в комментариях, а ответ смотрите здесь

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
🚮 Drop правила для фильтрации мусорных логов
 
Если вы используете Grafana Cloud Logs, скорее всего, часть логов там вообще не нужна. Health check каждые 5 секунд, DEBUG-записи из забытого сервиса, многословный INFO из batch-джобы — всё это идёт в хранилище и увеличивает счёт.
 
Раньше убрать этот мусор было неудобно. Нужно было лезть в конфиги, договариваться с командами, менять пайплайн. Теперь в Adaptive Logs появились drop rules — правила, которые отфильтровывают ненужные логи до записи в хранилище.
 
Что делают drop rules
 
Правило задаёт условие: какие логи отбрасывать и с какой долей. Можно указать лейбл сервиса, уровень лога, строку в теле — или всё вместе. Поддерживается частичный дроп: например, оставить 10% от потока, а остальное не сохранять.
 
Несколько сценариев, где это полезно:
 
Если payment-service в продакшне шлёт DEBUG-логи, которые никто не смотрит:
service_name = payment-service
log_level = DEBUG
drop rate = 100%

 
Batch-джоба пишет одно и то же тысячи раз в день. Оставляем 10% для выборки:
service_name = batch-processor
drop rate = 90%

 
Выбросить конкретный паттерн. Сервис пишет GET /healthz 200 каждые несколько секунд. Указываем строку в теле лога и дропаем 100%.
 
Как это работает внутри
 
Каждый входящий лог проходит три шага по порядку:
 
1. Exemptions — если лог попадает под исключение, он записывается без изменений.

2. Drop rules — правила применяются по приоритету. Первое совпавшее правило задаёт процент дропа.

3. Patterns — к оставшимся логам применяются рекомендации от самого Adaptive Logs на основе анализа 15 дней запросов.

Exemptions нужны для логов, которые нельзя терять ни при каких условиях, — аудит, ошибки из критичных сервисов. Drop rules — для того, что точно не нужно. Patterns — для всего остального, что Grafana сама определит как малоценное.
 
Как начать
 
Функция доступна в public preview в Grafana Cloud. Нужна роль plugins:grafana-adaptivelogs-app:admin — по умолчанию она есть у Grafana Admin и Org Admin.
 
Путь в интерфейсе:
Adaptive Telemetry → Adaptive Logs → Drop rules → Create a new drop rule
 
Управлять правилами также можно через CLI gcx если нужна автоматизация или интеграция с агентами.
 
➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Вышел Incus 7.0 LTS
 
Команда Linux Containers выпустила Incus 7.0 LTS — второй долгосрочный релиз менеджера системных и OCI-контейнеров, а также виртуальных машин.

Поддержка продлится до июня 2031 года: первые два года патчи и небольшие улучшения, ещё три года только безопасность.
 
В релизе закрыты 9 CVE умеренной и низкой степени опасности. Среди важных изменений — удаление поддержки CGroupV1 и xtables, повышение минимальных требований к системе, а также правки в CLI. Minio заменён встроенным S3-слушателем.
 
Из новых возможностей: низкоуровневое API для бекапов, ограничение пулов хранилища по проектам, поддержка OCI-контейнеров, сетевые наборы адресов network address sets, драйверы хранилища Linstor и TrueNAS, а также перебалансировка кластера через placement scriptlet.
 
➡️ Полный changelog | онлайн-демо

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
📎 Только имя пода и образ

Иногда нужен простой список подов и их образов. Без лишних колонок, без шума. kubectl get pods -o wide выдаёт слишком много данных, которые в этот момент не нужны.

Для таких случаев есть флаг -o custom-columns. Он позволяет выбрать только те поля, которые важны прямо сейчас.

Чтобы получить таблицу с именем пода и образом контейнера, достаточно одной команды:
kubectl get pods -o custom-columns='NAME:.metadata.name,IMAGE:.spec.containers[*].image'


Результат — чистая таблица без лишнего. [*] в пути означает, что команда учитывает все контейнеры в поде, включая сайдкары.

Формат колонки строится по простому правилу: сначала заголовок, потом путь к полю в JSON-структуре объекта. Любое поле из kubectl get pod -o json можно вытащить таким же способом.

Это особенно удобно в скриптах и CI, где важна предсказуемость вывода. Никаких сюрпризов при обновлении версии kubectl.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁3
🗓 14 мая в 19:00 (Мск) встречаемся в онлайне.

Тема: Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало.

В кружке выше Эмиль Сатаев рассказал, какие именно проблемы с LLM в проде будем разбирать.

Что в программе:
- Разберем реальные кейсы стартапов и ограничения LLM.
- Обсудим рабочие архитектуры: RAG, human-in-the-loop, контроль качества.
- Ответим на ваши вопросы и разберем кейсы участников.


🎁 Бонусы: в конце вебинара подарим промокод на скидку 10.000 ₽ на курсы и разыграем подписки на полезные AI-сервисы.

👉 Зарегистрироваться на вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
📰 Админ расплавился от жары

И к другим не менее важным новостям

Раньше алгоритмы, а теперь симуляция директора

apt 3.3.0

Fedora 44

HCP Terraform на базе Infragraph

pyinfra 3.8.0

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#дайджест_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
👎 Автоматическая блокировка нежелательных подключений

Любой публичный сервер рано или поздно начинает получать тысячи попыток подбора паролей. SSH, веб-панели, почтовые серверы — всё это регулярно атакуют боты. Вручную отслеживать такие попытки и добавлять IP в блокировку нереально. Fail2Ban решает именно эту задачу.

Что делает

Fail2Ban это демон, который читает лог-файлы и временно блокирует IP-адреса, с которых зафиксировано слишком много ошибок аутентификации. Блокировка происходит через правила файрвола (iptables, nftables и другие). После истечения времени бана IP автоматически разблокируется.

Из коробки поддерживаются логи SSH, Apache, Nginx, Postfix и многих других сервисов. Можно подключить любой лог-файл с произвольным форматом.

Установка

На большинстве дистрибутивов пакет уже есть в репозитории:
# Debian/Ubuntu
sudo apt install fail2ban

# RHEL/CentOS
sudo dnf install fail2ban


После установки проверяем, что всё работает:
fail2ban-client -h
fail2ban-client version


Как это настраивается


Конфигурация хранится в /etc/fail2ban. Основной файл — jail.conf, но менять его напрямую не стоит. Вместо этого создаём /etc/fail2ban/jail.local и переопределяем нужные параметры.

Пример минимальной конфигурации для защиты SSH:

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600


maxretry — сколько неудачных попыток допускается за период findtime (в секундах). Если их больше, IP блокируется на bantime секунд.

В данном примере пять ошибок за 10 минут приведут к блокировке на час.

Управление банами

Посмотреть активные джейлы и заблокированные IP:
sudo fail2ban-client status
sudo fail2ban-client status sshd


Разблокировать IP вручную:
sudo fail2ban-client set sshd unbanip 1.2.3.4


Fail2Ban снижает нагрузку от перебора, но не заменяет нормальную аутентификацию.

Если сервис работает на паролях, лучше перейти на ключи или двухфакторку. Fail2Ban при этом остаётся полезным дополнительным слоем защиты.

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
4
📎 Узнать текущий runlevel в Linux

Runlevel определяет режим работы системы: что запущено, какие сервисы активны, есть ли графический интерфейс. Это понятие пришло из SysV init и до сих пор встречается, особенно на старых дистрибутивах и серверах, где systemd ещё не везде.

Стандартные уровни

0 — выключение системы.
1 — однопользовательский режим, только root, сеть не поднята. Используется для восстановления.
2 — многопользовательский без NFS (в Debian/Ubuntu — полноценный многопользовательский).
3 — многопользовательский с сетью, без графики. Типичный режим для серверов.
4 — не используется стандартно, резерв.
5 — многопользовательский с графическим интерфейсом.
6 — перезагрузка.

Как проверить

Команда runlevel выводит предыдущий и текущий уровень:
runlevel


Вывод выглядит так:
N 3

N означает, что предыдущего уровня не было (система только загрузилась). 3 — текущий runlevel.

На системах с systemd та же команда работает, но под капотом systemd транслирует уровни в targets. Можно спросить напрямую:
systemctl get-default


Это покажет default target — то, в каком режиме система запускается по умолчанию:
multi-user.target


А текущее активное состояние:
systemctl list-units --type=target --state=active


Когда это нужно

Чаще всего runlevel проверяют при диагностике — когда нужно понять, почему сервис не запустился, или убедиться, что сервер поднялся в правильном режиме после перезагрузки.

На современных системах с systemd runlevel остаётся для совместимости, но systemctl get-default даёт более точный ответ.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔄 NWinfo v1.6.3

NWinfo собирает информацию из SMBIOS, CPUID, S.M.A.R.T., PCI, SPD, EDID и ряда других источников.

Запуск в CLI:
nwinfo.exe --format=json > report.json


Или через готовый PowerShell-скрипт из репозитория:
.\hw_report.ps1


Что появилось в v1.6.3


Основные изменения касаются работы с процессорами Intel и AMD.

Для Intel добавлены сенсоры через MCHBAR и PCH, определение микроархитектуры, OC Mailbox API для чтения данных по разгону, отображение TDP и VDDQ TX IccMax/Voltage. Исправлено чтение напряжений через MSR.

Для AMD исправлена PM-таблица для Pinnacle Ridge, обновлён ryzen_smu.c.
Из общих изменений: системный трей с возможностью установки PawnIO прямо из него, настраиваемые единицы температуры (Цельсий / Фаренгейт), отключён WoW64-редирект реестра для корректного чтения на 64-битных системах, обновлены libcpuid и Nuklear.

➡️ Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
⚙️ Просмотр Markdown прямо в терминале

Пишете README, документацию или заметки в Markdown. Чтобы посмотреть результат, нужно переключаться в браузер, открывать превью в редакторе или пушить на GitHub. leaf рендерит Markdown прямо в терминале, с подсветкой синтаксиса, таблицами, оглавлением и поиском.

Инструмент написан на Rust, работает на macOS, Linux, Windows и даже в Termux на Android.

Что умеет

leaf отображает Markdown-файлы с форматированием, максимально близким к графическому превью. Поддерживаются жирный текст, курсив, зачёркивание, цитаты, списки, горизонтальные линии и таблицы с Unicode-рамками.

Есть боковая панель с оглавлением (TOC) — она отслеживает текущую секцию и поддерживает двухуровневую навигацию. Переключается по клавише t.

Поиск по тексту работает через / или Ctrl+F, навигация по совпадениям — n и N.

Watch-режим

При запуске с флагом -w файл автоматически перезагружается каждые 250 мс при сохранении.

# Терминал 1 — генерация
claude "explain Rust lifetimes" > notes.md

# Терминал 2 — живой просмотр
leaf -w notes.md


Также leaf принимает Markdown через stdin, что позволяет использовать его в пайплайнах:
cat README.md | leaf
claude "explain async in Python" | leaf


Выбор файлов

Если запустить leaf без аргументов, откроется fuzzy-поиск по Markdown-файлам в текущей директории. Для классического файлового браузера есть флаг --picker. Оба режима можно комбинировать с -w — после выбора файла сразу включается watch-режим.

Темы и редактор

Через Shift+T открывается выбор тем с предпросмотром прямо в терминале. Ctrl+E открывает текущий файл в системном редакторе, а Shift+E позволяет выбрать редактор из списка.

Установка

macOS, Linux, Termux:
curl -fsSL https://raw.githubusercontent.com/RivoLink/leaf/main/scripts/install.sh | sh


Windows:
irm https://raw.githubusercontent.com/RivoLink/leaf/main/scripts/install.ps1 | iex


Обновление до последней версии:
leaf --update


Команда скачивает бинарник, проверяет SHA256-хеш по опубликованному checksums.txt и устанавливает.

leaf — компактный и для тех, кто много работает с Markdown и не хочет выходить из терминала ради превью.

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🐀 Терминал с 3D и крутящейся крысой вместо курсора

Терминалы не менялись годами. Alacritty, Kitty, WezTerm — все они про скорость и конфиг, но визуально остаются плоскими окнами с текстом.

ratty это эмулятор на Rust, который добавляет в консоль полноценный 3D-рендеринг через Bevy и GPU-ускоренную отрисовку текста.

Что умеет

Вместо обычного курсора в ratty крутится 3D-модель крысы. Модель, скорость вращения, амплитуду покачивания и яркость можно настроить через TOML-конфиг.

Главная фича — 3D-режим. По нажатию Ctrl+Alt+Enter терминал «выгибается» в трёхмерное пространство. Степень искривления регулируется через Ctrl+Alt+Up/Down.

Как устроен рендеринг

Пайплайн рендеринга выглядит так. ratatui формирует UI-буфер на CPU. parley_ratatui через Vello рендерит текст на GPU. Результат считывается обратно в CPU как RGBA-данные и передаётся в Bevy, который отображает картинку в 2D или 3D.

Установка

Нужен Rust-тулчейн и GPU-стек, совместимый с Bevy/wgpu.
cargo install --git https://github.com/orhun/ratty```


Конфиг по умолчанию лежит в config/ratty.toml. Его нужно скопировать в $HOME/.config/ratty/ratty.toml и менять под себя.

Пример настройки курсора:
[cursor.model]
path = "CairoSpinyMouse.obj"
scale_factor = 6.0
brightness = 0.5
x_offset = 0.5
plane_offset = 18.0
visible = true

[cursor.animation]
spin_speed = 1.4
bob_speed = 2.2
bob_amplitude = 0.08


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

➡️ Покрутить крысу

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев

Эмиль — эксперт с 8-летним опытом в разработке, который специализируется на внедрении LLM и агентных подходов в реальные коммерческие сервисы. Он точно знает, как проектировать архитектуру так, чтобы ИИ-функции работали стабильно в связке с внешними системами.

🏃‍♀️ Уже 14 мая Эмиль проведет открытый вебинар!

Обсудим самую «больную» тему: «Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало».

🗓 Когда: 14 мая в 19:00 (Мск)

Почему Эмиля стоит послушать:

🟣 8+ лет в разработке (Backend и Frontend)
Прошел путь от фулстека до Backend Platform Developer в SMIT.Studio.


🟣 Международный исследовательский опыт
Работал исследователем в Институте ИИ НИУ ВШЭ и в Национальном университете Сингапура (NUS).


🟣 Преподаватель-практик
Ведет семинары в НИУ ВШЭ, в том числе по проектированию и разработке агентских систем.


🟣 Мастер интеграции AI в Backend
Его главная суперсила — умение правильно встраивать LLM через API, выстраивать workflow и агентную логику в сложных распределенных системах.


🔗 Зарегистрироваться на вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
🧑‍💻 5 базовых команд девопса

➡️ Команда wc -l считает строки в файле или в пайпе. Одна из тех вещей, которые используешь каждый день. Логи, CSV, исходники, конфиги.

Везде, где нужно быстро понять объём:
$ wc -l server.log
4821 server.log


Набирать wc -l несложно, но можно сделать ещё проще. Создаём алиас lc (line count) и добавляем в конфиг шелла:
# Добавьте в ~/.bashrc или ~/.zshrc, затем: source ~/.bashrc
alias lc='wc -l'


Теперь вместо wc -l пишем просто lc:
$ lc server.log
4821 server.log


Работает и с пайпами:
$ cat access.log | grep "500" | lc
37


37 пятисотых ошибок. Быстро и понятно.

➡️ du -sh * — сколько весит каждая папка

Когда заканчивается место на диске, первым делом хочется понять, кто его съел.

du -sh * покажет размер каждого элемента в текущей директории в человекочитаемом формате:
$ du -sh *
1.2G node_modules
4.0K README.md
256M dist
12K src


node_modules на первом месте. Как обычно.

Если нужно отсортировать по размеру, добавляем sort:
$ du -sh * | sort -rh
1.2G node_modules
256M dist
12K src
4.0K README.md


Флаг -r сортирует по убыванию, -h понимает суффиксы K, M, G.

➡️ xargs — передать результат одной команды как аргументы другой

xargs берёт строки из stdin и подставляет их как аргументы. Например, найти все .log файлы и удалить их:
$ find /tmp -name "*.log" | xargs rm


Если в именах файлов есть пробелы, безопаснее использовать разделитель через null:
$ find /tmp -name "*.log" -print0 | xargs -0 rm


Ещё полезный приём. Посчитать общее количество строк во всех Python файлах проекта:
$ find . -name "*.py" | xargs wc -l


➡️ column -t — превратить текст в ровную таблицу

Вывод многих команд выглядит как каша из слов, разделённых пробелами. column -t выравнивает столбцы и делает вывод читаемым:
$ cat data.txt
name age city
alice 30 berlin
bob 25 munich

$ column -t data.txt
name age city
alice 30 berlin
bob 25 munich


Хорошо работает с CSV, если указать разделитель:
$ column -t -s',' users.csv


➡️ watch — повторять команду каждые N секунд

watch запускает любую команду с заданным интервалом и обновляет вывод в терминале. По умолчанию интервал 2 секунды:
$ watch df -h


Эта команда будет каждые 2 секунды показывать состояние дисков. Удобно, когда ждёте, пока освободится место, или следите за каким-то процессом.

Можно изменить интервал через -n:
$ watch -n 5 kubectl get pods


Каждые 5 секунд обновляет статус подов. Проще, чем жать стрелку вверх и Enter раз за разом.

Все эти команды работают в любом Linux и macOS из коробки. Ничего ставить не нужно.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5
📣 Топ-вакансий для девопсов за неделю

Выбирайте любую из трёх вакансий, все на удалёнку:

DevOps Engineer Middle

DevOps Архитектор

DevOps-инженер (on-call)

➡️ Еще больше топовых вакансий — в нашем канале Devops Jobs

🐸Библиотека devops'a

#вакансия_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Leaf 1.21.0

leaf — терминальный превьювер Markdown на Rust. Показывает .md файлы прямо в консоли с подсветкой синтаксиса, таблицами, оглавлением и навигацией. По ощущениям ближе к GUI, чем к обычному cat.

В версии 1.21.0 два заметных обновления.
 
Флаг --inline для вывода в stdout
 
Раньше leaf работал только в интерактивном режиме — открывал TUI и ждал ввода. Теперь можно рендерить Markdown и сразу печатать результат в stdout без запуска интерфейса.
 
Это полезно, когда нужно встроить leaf в пайплайн или скрипт. Например, отрендерить файл и сохранить результат:
leaf --inline README.md > rendered.txt

 
Или прокинуть через пайп:
cat CHANGELOG.md | leaf --inline


Обновиться:
leaf --update


➡️ Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
📎 Что будет в Podman 6

Podman 6.0 это мажорный релиз с ломающими изменениями. Убраны устаревшие компоненты, переработана конфигурация, обновлён сетевой стек.

Если вы используете Podman в продакшене или на локальной машине, стоит знать, что изменится и к чему готовиться.

Удаление устаревших компонентов

Всё, что было deprecated в пятой ветке, в шестой удалено окончательно.

slirp4netns больше нет. Начиная с Podman 5.0 для rootless-сетей по умолчанию использовался Pasta. Теперь это единственный вариант, slirp4netns вырезан из кода вместе с флагом --network-cmd-path.

CgroupsV1 больше не поддерживается. Весь связанный код и тесты удалены. Если у вас система на cgroups v1, Podman 6 работать не будет.

BoltDB тоже убран. SQLite стал дефолтным бэкендом ещё в Podman 4.8. В 5.7 добавили предупреждение, в 6.0 поддержку BoltDB убрали полностью. Если вы не мигрировали базу, после обновления состояние контейнеров окажется недоступным.

Перед обновлением до Podman 6 рекомендуется сначала обновиться до 5.8 и перезагрузиться. Это запустит автоматическую миграцию с BoltDB на SQLite.

Переработка конфигурации

Одно из заметных изменений. Файлы конфигурации containers.conf и storage.conf переделывают с нуля. Проблема была в том, что удалённые клиенты на Windows и macOS использовали те же конфиги, что и серверная часть. Это приводило к путанице и ошибкам.

Новый подход разделяет конфигурацию на клиентскую и серверную части. Логика парсинга containers.conf и storage.conf унифицируется. Если вы работаете с Podman через удалённый клиент, возможно, придётся обновить свои конфиги.

Изменения в сетевом стеке

Netavark, сетевой бэкенд Podman, тоже получил обновления.

Поддержка iptables убрана. Остаётся только nftables. Это затронет тех, кто вручную настраивал iptables для контейнеров.

Логика создания сетей перенесена внутрь Netavark, а внутренние структуры данных изменены, чтобы сохранять порядок подключённых сетей для контейнеров.

Новый conmon

Ведётся работа над новой версией conmon. Подробностей пока мало, но обещают улучшения в производительности и пользовательском опыте.

Как проверить готовность к обновлению

Убедитесь, что ваша система использует cgroups v2. Проверить можно так:
stat -fc %T /sys/fs/cgroup/

Если в ответе cgroup2fs, всё в порядке.

Проверьте, на каком бэкенде работает ваша база Podman:
podman info --format '{{.Host.DatabaseBackend}}'

Если ответ sqlite, миграция не нужна. Если boltdb, обновитесь сначала до Podman 5.8 и перезагрузитесь.

Убедитесь, что для rootless-сетей используется Pasta, а не slirp4netns:
podman info --format '{{.Host.Pasta.Executable}}'


Podman 6.0 убирает всё устаревшее и приводит кодовую базу к единому стандарту. Миграция для большинства пользователей должна пройти гладко, потому что Pasta, nftables и SQLite уже были дефолтами.

Но если вы работаете на нестандартных конфигурациях с iptables, BoltDB или cgroups v1, нужно подготовиться заранее.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🔒 Спрятать VM от интернета и не потерять к ней доступ

Если вы запускаете что-то с публичным IP, вашу машину уже сканируют. Боты, брутфорс, стук по портам. Стандартная реакция — начать закручивать файрвол на работающей VM. Но именно так люди теряют доступ к собственным серверам.

Есть подход лучше. Называется «Private First». Суть в том, чтобы VM вообще не имела публичного адреса с момента создания. Нет адреса — нет поверхности атаки. А доступ к машине и выход в интернет настраиваются отдельными, контролируемыми каналами.

Что понадобится

VM без внешнего IP (например, e2-medium, Ubuntu 24.04 LTS), Cloud NAT с Cloud Router, Identity-Aware Proxy (IAP) для SSH и Tailscale для доступа к веб-интерфейсу. Всё это укладывается в бесплатный кредит GCP на $300.

Cloud NAT — выход в интернет без входа

VM без публичного IP не может сама ходить в интернет. Ни apt update, ни docker pull работать не будут. Cloud NAT решает это. Он даёт машине исходящий трафик через Cloud Router, но входящих соединений извне не пропускает.

VM видит интернет, интернет не видит VM.

IAP — SSH без открытого порта

Вместо того чтобы открывать порт 22 для всего мира, вы открываете его только для диапазона 35.235.240.0/20. Это адреса IAP-туннеля Google.

Каждая SSH-сессия проходит аутентификацию через Google Identity ещё до того, как первый пакет долетит до VM.

Подключение выглядит так:
gcloud compute ssh --tunnel-through-iap <instance-name>


Если вы отрежете этот диапазон в файрволе, потеряете доступ к машине. Это главная ошибка, которую стоит запомнить.

Tailscale — доступ к веб-интерфейсу

Допустим, на VM крутится n8n, Metabase или любой другой сервис с веб-панелью. Выставлять её в интернет не нужно. Ставите Tailscale на VM и на свой ноутбук. Получаете приватную mesh-сеть поверх WireGuard. Дашборд доступен по адресу вроде http://<tailscale-ip>:5678 с любого вашего устройства. Без SSL-сертификатов, без reverse proxy, без публичного DNS.

Два нюанса с Docker

Если вы запускаете n8n в Docker, учтите два момента.

Контейнер может падать при старте из-за прав на директорию ~/.n8n. Внутренний пользователь n8n ожидает владельца 1000:1000. Фиксится одной командой:
sudo chown -R 1000:1000 ~/.n8n


По умолчанию n8n выставляет N8N_SECURE_COOKIE=true и принимает сессионные куки только по HTTPS. Через Tailscale вы ходите по HTTP на приватный IP, поэтому логин будет молча ломаться. Выставьте N8N_SECURE_COOKIE=false в переменных окружения Docker. На приватной VPN-сети это безопасно.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
🔄 nginx 1.31.0: шесть CVE и встроенный forward proxy

Вышел nginx 1.31.0. Закрыто шесть уязвимостей, некоторые из них позволяли выполнить произвольный код или раскрыть содержимое памяти рабочего процесса.

Помимо фиксов, появилась долгожданная фича — поддержка HTTP CONNECT, то есть nginx теперь умеет работать как forward proxy.

Что исправлено

CVE-2026-42926 — инъекция данных в проксируемый запрос при использовании proxy_set_body с HTTP/2-бэкендом.

CVE-2026-42945 — переполнение буфера в ngx_http_rewrite_module. Специально сформированный запрос мог привести к выполнению произвольного кода. Одна из самых серьёзных уязвимостей в этом релизе.

CVE-2026-42946 — чтение за границами буфера в ngx_http_scgi_module и ngx_http_uwsgi_module. Атакующий мог вызвать раскрытие памяти рабочего процесса или его падение через специально сформированный ответ.

CVE-2026-42934 — аналогичная проблема с чтением за границами буфера, но уже в ngx_http_charset_module при декодировании UTF-8 через директиву charset_map.

CVE-2026-40460 — спуфинг адреса клиента в HTTP/3. При миграции соединения новые QUIC-стримы получали новый адрес клиента до его валидации.

CVE-2026-40701 — use-after-free при обработке DNS-ответов, если использовалась директива ssl_ocsp. Могло привести к повреждению памяти или падению рабочего процесса.

Что нового

Главное нововведение — модуль ngx_http_tunnel_module. Nginx теперь умеет обрабатывать HTTP CONNECT-запросы и работать как forward proxy. Модуль поддерживает аутентификацию через auth_basic, satisfy и auth_delay.

Также добавлена директива least_time внутри блока upstream. Она выбирает бэкенд с наименьшим временем ответа. Раньше эта функциональность была доступна только в NGINX Plus.

В stream-модуле появилась директива proxy_ssl_alpn для указания ALPN-протокола при проксировании с TLS.

Изменения в поведении

nginx теперь отклоняет HTTP/2 и HTTP/3 запросы с заголовками Connection, Proxy-Connection, Keep-Alive, Transfer-Encoding, Upgrade, а также TE с любым значением кроме trailers. Это соответствует спецификации, но если у вас есть клиенты, которые отправляют такие заголовки через HTTP/2, после обновления они получат ошибку.

Модуль ngx_http_dav_module теперь отклоняет COPY/MOVE, если источник и назначение совпадают или находятся в отношении «родитель-ребёнок».

Уровень логирования ошибок SSL «invalid alert» и «record layer failure» понижен с crit до info.

Обновление

Учитывая количество и критичность закрытых уязвимостей, обновляться стоит как можно скорее. Особенно если вы используете proxy_set_body, модуль rewrite, SCGI/uWSGI-бэкенды или HTTP/3.

➡️ Полный список изменений

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
4🙏1