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

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

Учиться у нас: https://proglib.io/w/25874ec4

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
🤔 Не гоняйте, пацаны

Terraform-собеседование — и вот вам вопрос:
Команда хранит state в S3 и периодически ловит его порчу при одновременных apply. Как исключить race condition?


Подсказка: одного только версионирования S3 недостаточно. Нужен механизм, который не дает двум apply работать одновременно.

➡️ Проверить себя

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

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

#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🧑‍💻 Linux From Scratch 13: больше компонентов, systemd по умолчанию

LFS это руководство по сборке Linux с нуля. Вы компилируете каждый компонент сами, из исходников. Это едва ли полезно для production систем, но отлично работает как обучение.

В Linux From Scratch 13.0 обновилось 36 компонентов. Вот самые заметные: ядро Linux 6.18.10, systemd 259.1, Python 3.14.3, OpenSSL 3.6.1, SQLite 3.50.4. Все обновлено и актуально.

Главное изменение: LFS 13.0 полностью переходит на systemd. Старые версии 12.4 шли с SysVinit, и это было огромным минусом для обучения, потому что современный Linux это практически всегда systemd.

➡️ Источник

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

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

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
👨‍💻 Перезапись путей: скрытая логика, которая ломает маршрутизацию

Продолжаем цикл о подводных камнях перед отставкой Ingress-NGINX. Сегодня — перезапись путей. Это одна из самых используемых функций контроллера и одна из самых болезненных при переносе на Gateway API.

В Ingress-NGINX перезапись настраивается через аннотацию nginx.ingress.kubernetes.io/rewrite-target. Например, паттерн /api/(.*) с rewrite-target /$1 отрежет префикс /api и передаст бэкенду оставшуюся часть пути.

Проблема в том, что Ingress-NGINX _переписывает весь путь целиком_, а не только совпавшую часть. Это отличается от поведения большинства других прокси. Если бэкенд ожидает определённую структуру пути — поведение после миграции может измениться даже при формально правильном переводе.

В Gateway API перезапись реализована через фильтр URLRewrite. Логика другая: можно заменить префикс или весь путь. Прямого аналога подстановки через $1, $2 нет. Конфигурации с несколькими группами захвата придётся переосмыслить.

Ещё одна деталь — приоритет пересекающихся маршрутов. В Gateway API он определяется специфичностью совпадения. В Ingress-NGINX логика другая. Если у вас несколько маршрутов с похожими путями, порядок их срабатывания может поменяться после миграции.

Каждый маршрут с rewrite-target нужно разобрать вручную и убедиться, что бэкенд получит именно тот путь, который ожидает.

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

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍 Весенние новости

Совсем скоро всё оттает, а пока что вспоминаем первую неделю весны.

Linux 7.0 стартовал неспокойно

Хватит быть хорошим

elementary OS 8.1.1

Nitrux 6.0.0

Ingress-NGINX уходит

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

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

#дайджест_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
2
💥 Открытый вебинар | ИИ-агенты в продакшене: от хайпа к деньгам

Агенты уже везде. Но мало кто признаётся, сколько денег сжёг на бесконечных циклах, галлюцинациях в RAG и отсутствии мониторинга.

Полина Полунина, руководитель AI-направления Альфа-Банка, расскажет честно:

▪️ Чем агент отличается от «просто GPT с промптом» и когда бизнесу достаточно обычного LLM
▪️ 3 реальных кейса из корпоративной среды: что взлетело, а что нет
▪️ Live-демо работающего агента
▪️ ТОП-5 граблей, на которые наступают команды при внедрении

⏱️ 10 марта в 19:00 (МСК)

🎁 Участники получат промокод на скидку на самый полный курс по ИИ-агентам

👉 Регистрируйся
🐳 Контейнер падает при старте

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

Первое правило: смотрите логи

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

docker logs 


Запустите эту команду сразу, как только контейнер упал. Часто там будет сразу видно, что случилось. Если логов мало, добавьте флаг --tail 100 или посмотрите всё целиком через --all.

Рабочая директория и файлы

Очень частая причина. Если приложение ищет конфиг в /app/config, а в образе это лежит в /etc/app, всё сломается.

Проверьте в Dockerfile:

WORKDIR /app
COPY . .


Убедитесь, что все нужные файлы скопированы на место и структура директорий совпадает с тем, что ожидает приложение.

Переменные окружения

Приложение может требовать DATABASE_URL или API_KEY, и если их нет, оно не запустится. При запуске передавайте всё нужное:

docker run -e DATABASE_URL=postgres://... -e API_KEY=secret myapp:latest


Или через файл:

docker run --env-file .env myapp:latest


Проверьте документацию вашего приложения на список обязательных переменных.

Runtime и зависимости

Иногда базовый образ не содержит то, что нужно. Вы собрали Go приложение, положили бинарник в контейнер на основе alpine:latest, но забыли нужную библиотеку. Результат предсказуем.

FROM golang:1.21 as builder
WORKDIR /build
COPY . .
RUN go build -o app .

FROM alpine:latest
RUN apk add --no-cache ca-certificates
COPY --from=builder /build/app /usr/local/bin/


Убедитесь, что в образе есть всё необходимое. Используйте docker run -it myimage sh и проверьте вручную, работает ли приложение.

Порты и привилегии

Контейнер может падать из-за проблем с портами или правами. Если приложение пытается слушать на порту ниже 1024, но не запущено от root, это не сработает.

USER appuser
EXPOSE 8080


Убедитесь, что пользователь имеет нужные привилегии и приложение слушает на доступном порту.

Точка входа

Проверьте, правильная ли у вас ENTRYPOINT или CMD:

ENTRYPOINT ["node", "server.js"]


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

Быстрая диагностика

Запустите контейнер интерактивно с sh вместо основного процесса:

docker run -it myapp:latest /bin/sh


Теперь вы внутри контейнера. Проверьте рабочую директорию, переменные окружения, наличие файлов. Попробуйте запустить приложение вручную и посмотрите, что сломается.

Что проверить в первую очередь

1. Логи контейнера через docker logs
2. Переменные окружения и их значения
3. Рабочая директория и наличие файлов
4. Запуск приложения вручную внутри контейнера через /bin/sh
5. Права доступа и привилегии пользователя

Если контейнер падает, проблема почти всегда в одном из этих пунктов. Диагностика займёт несколько минут, если знать, где искать.

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

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
📎 TLS в Ingress-NGINX: два режима с разным поведением при миграции

Тема TLS выглядит простой, но здесь тоже есть нюансы, которые проявляются только после переключения трафика на Gateway API.

Ingress-NGINX работает в двух принципиально разных режимах с TLS.

_Первый_ — терминирование на уровне контроллера: сертификат прикреплён к Ingress через секрет, контроллер расшифровывает трафик и передаёт бэкенду по HTTP. В Gateway API это настраивается через listeners[].tls.mode: Terminate с указанием certificateRefs в ресурсе Gateway.

_Второй_ — SSL passthrough через аннотацию nginx.ingress.kubernetes.io/ssl-passthrough: "true". Контроллер проксирует зашифрованный поток напрямую к поду, не расшифровывая его. В Gateway API для этого существует отдельный тип ресурса — TLSRoute. И здесь важный момент: при passthrough контроллер не видит HTTP-заголовки. Маршрутизация по пути или заголовкам недоступна — только по SNI.

Если в текущей конфигурации для одного хоста одновременно используются passthrough и HTTP-маршрутизация — это признак того, что архитектуру придётся пересматривать, а не просто переписывать манифесты.

Зафиксируйте для каждого хоста, какой режим TLS используется. Это определит не только синтаксис Gateway API, но и выбор реализации — не все из них поддерживают TLSRoute в полном объёме.

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

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

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