Terraform-собеседование — и вот вам вопрос:
Команда хранит state в S3 и периодически ловит его порчу при одновременных apply. Как исключить race condition?
Подсказка: одного только версионирования S3 недостаточно. Нужен механизм, который не дает двум apply работать одновременно.
📍 Навигация: Вакансии • Задачи • Собесы
#задача_со_звёздочкой
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
#пульс_индустрии
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.
📍 Навигация: Вакансии • Задачи • Собесы
#пульс_индустрии
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 нужно разобрать вручную и убедиться, что бэкенд получит именно тот путь, который ожидает.📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
Совсем скоро всё оттает, а пока что вспоминаем первую неделю весны.
— Linux 7.0 стартовал неспокойно
— Хватит быть хорошим
— elementary OS 8.1.1
— Nitrux 6.0.0
— Ingress-NGINX уходит
📍 Навигация: Вакансии • Задачи • Собесы
#дайджест_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
💥 Открытый вебинар | ИИ-агенты в продакшене: от хайпа к деньгам
Агенты уже везде. Но мало кто признаётся, сколько денег сжёг на бесконечных циклах, галлюцинациях в RAG и отсутствии мониторинга.
Полина Полунина, руководитель AI-направления Альфа-Банка, расскажет честно:
▪️ Чем агент отличается от «просто GPT с промптом» и когда бизнесу достаточно обычного LLM
▪️ 3 реальных кейса из корпоративной среды: что взлетело, а что нет
▪️ Live-демо работающего агента
▪️ ТОП-5 граблей, на которые наступают команды при внедрении
⏱️ 10 марта в 19:00 (МСК)
🎁 Участники получат промокод на скидку на самый полный курс по ИИ-агентам
👉 Регистрируйся
Агенты уже везде. Но мало кто признаётся, сколько денег сжёг на бесконечных циклах, галлюцинациях в RAG и отсутствии мониторинга.
Полина Полунина, руководитель AI-направления Альфа-Банка, расскажет честно:
▪️ Чем агент отличается от «просто GPT с промптом» и когда бизнесу достаточно обычного LLM
▪️ 3 реальных кейса из корпоративной среды: что взлетело, а что нет
▪️ Live-демо работающего агента
▪️ ТОП-5 граблей, на которые наступают команды при внедрении
⏱️ 10 марта в 19:00 (МСК)
🎁 Участники получат промокод на скидку на самый полный курс по ИИ-агентам
👉 Регистрируйся
🐳 Контейнер падает при старте
Когда Docker контейнер вылетает прямо после запуска, это всегда выглядит странно. Особенно если локально всё работало нормально. Давайте разберёмся, что чаще всего заставляет контейнер выходить с ошибкой.
Первое правило: смотрите логи
Контейнер существует ровно столько, сколько выполняется процесс внутри него. Если процесс завершился или вообще не запустился, контейнер упадёт. Это закономерно, но информация об ошибке может быть скрыта.
Запустите эту команду сразу, как только контейнер упал. Часто там будет сразу видно, что случилось. Если логов мало, добавьте флаг
Рабочая директория и файлы
Очень частая причина. Если приложение ищет конфиг в
Проверьте в Dockerfile:
Убедитесь, что все нужные файлы скопированы на место и структура директорий совпадает с тем, что ожидает приложение.
Переменные окружения
Приложение может требовать
Или через файл:
Проверьте документацию вашего приложения на список обязательных переменных.
Runtime и зависимости
Иногда базовый образ не содержит то, что нужно. Вы собрали Go приложение, положили бинарник в контейнер на основе
Убедитесь, что в образе есть всё необходимое. Используйте
Порты и привилегии
Контейнер может падать из-за проблем с портами или правами. Если приложение пытается слушать на порту ниже 1024, но не запущено от root, это не сработает.
Убедитесь, что пользователь имеет нужные привилегии и приложение слушает на доступном порту.
Точка входа
Проверьте, правильная ли у вас ENTRYPOINT или CMD:
Если здесь опечатка или путь неверный, контейнер не запустится. Команда должна существовать и быть исполняемой.
Быстрая диагностика
Запустите контейнер интерактивно с sh вместо основного процесса:
Теперь вы внутри контейнера. Проверьте рабочую директорию, переменные окружения, наличие файлов. Попробуйте запустить приложение вручную и посмотрите, что сломается.
Что проверить в первую очередь
1. Логи контейнера через
2. Переменные окружения и их значения
3. Рабочая директория и наличие файлов
4. Запуск приложения вручную внутри контейнера через
5. Права доступа и привилегии пользователя
Если контейнер падает, проблема почти всегда в одном из этих пунктов. Диагностика займёт несколько минут, если знать, где искать.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера
Когда 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 logs2. Переменные окружения и их значения
3. Рабочая директория и наличие файлов
4. Запуск приложения вручную внутри контейнера через
/bin/sh5. Права доступа и привилегии пользователя
Если контейнер падает, проблема почти всегда в одном из этих пунктов. Диагностика займёт несколько минут, если знать, где искать.
📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
Тема 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 в полном объёме.📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1