🔥Пять задач по Terraform и пять задач по безопасности веб-приложений
Мы запустили тренажёры сразу к двум практикумам — это усложнённые задачи курса без подсказок и чек-листов: тебе дают рабочую инфраструктуру или уязвимый код, и дальше ты один на один с проблемой, как на реальном проде.
Тренажеры Terraform:
🟢 Инфраструктура для staging и prod окружений
🟢 Веб-сервис с балансировкой н агрузки
🟢 Переиспользуемый модуль virtual-machine
🟢 Безопасная сеть: public/private subnet и bastion
🟢 Terraform quality gate
↘️ Забрать практикум + тренажёры
Тренажеры по безопасности веб-приложений:
🟢 Анализ безопасности CorpDocs
🟢 Уязвимый API
🟢 Микросервисы с макро-проблемами
🟢 Уязвимый GraphQL
🟢 Секретная уязвимость
↘️ Забрать практикум + тренажёры
Любой из практикумов можно начать проходить бесплатно, вам автоматически откроется доступ к части модулей после регистрации на платформе
✉️ Если у тебя уже куплен практикум Terraform или по безопасности веб-приложений — открыть доступ ко всем пяти тренажёрам можно за 5 000 ₽. Напиши нашим менеджерам в телеграм, они помогут.
Мы запустили тренажёры сразу к двум практикумам — это усложнённые задачи курса без подсказок и чек-листов: тебе дают рабочую инфраструктуру или уязвимый код, и дальше ты один на один с проблемой, как на реальном проде.
Тренажеры Terraform:
Тренажеры по безопасности веб-приложений:
Любой из практикумов можно начать проходить бесплатно, вам автоматически откроется доступ к части модулей после регистрации на платформе
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5❤2
Как спрятать секреты, внедряя HashiCorp Vault
Выкатываешь релиз, открываешь логи - а там пароль от продовой базы. Или секреты лежат в репозитории, закоммиченные в application.yml. Переменные окружения в CI/CD создают ложное ощущение защищённости: GitLab маскирует их в интерфейсе, но при компрометации раннера все переменные видны в открытом виде.
Статические секреты создают постоянные риски для безопасности. Пароль от базы данных часто не меняется годами, потому что «если поменяем, всё упадёт». И он один на все окружения.
HashiCorp Vault решает эту проблему на уровне архитектуры, полностью исключая человеческий фактор.
Шаг 1. Интеграция с Kubernetes через Agent Injector
Этот механизм автоматически прокидывает секреты в поды. Переписывать код приложения под чтение из файлов не нужно - достаточно обернуть команду запуска в контейнере, чтобы она считывала примонтированный Vault файл перед стартом.
Добавляем аннотации к поду, и Vault монтирует секреты в его файловую систему:
⚠️ Важно: Аннотации размещаются строго в spec.template.metadata, а не на самом Deployment. Иначе инжектор просто проигнорирует под.
Выкатываешь релиз, открываешь логи - а там пароль от продовой базы. Или секреты лежат в репозитории, закоммиченные в application.yml. Переменные окружения в CI/CD создают ложное ощущение защищённости: GitLab маскирует их в интерфейсе, но при компрометации раннера все переменные видны в открытом виде.
Статические секреты создают постоянные риски для безопасности. Пароль от базы данных часто не меняется годами, потому что «если поменяем, всё упадёт». И он один на все окружения.
HashiCorp Vault решает эту проблему на уровне архитектуры, полностью исключая человеческий фактор.
Шаг 1. Интеграция с Kubernetes через Agent Injector
Этот механизм автоматически прокидывает секреты в поды. Переписывать код приложения под чтение из файлов не нужно - достаточно обернуть команду запуска в контейнере, чтобы она считывала примонтированный Vault файл перед стартом.
Добавляем аннотации к поду, и Vault монтирует секреты в его файловую систему:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-example
spec:
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "db-app"
vault.hashicorp.com/agent-inject-secret-db-creds: "database/creds/db-app"
vault.hashicorp.com/agent-inject-template-db-creds: |
{{- with secret "database/creds/db-app" -}}
export DB_USER="{{ .Data.username }}"
export DB_PASSWORD="{{ .Data.password }}"
{{- end }}
spec:
serviceAccountName: app-example
containers:
- name: app
image: app:1.0.0
command: ["/bin/sh", "-c", ". /vault/secrets/db-creds && ./main"]
⚠️ Важно: Аннотации размещаются строго в spec.template.metadata, а не на самом Deployment. Иначе инжектор просто проигнорирует под.
👍11❤6🔥3💯1
Шаг 2. Подключаем GitLab CI
GitLab поддерживает ID Tokens (подписанные JWT), генерируемые для джоб. Vault верифицирует этот токен через JWKS-эндпоинт GitLab и выдает краткосрочный access-токен с политиками конкретной роли.
Для GitLab Premium/Ultimate доступна нативная интеграция:
Для GitLab Community Edition (Free) используем стандартный CLI:
Шаг 3. Внедряем динамические секреты
Вместо хранения постоянного пароля, мы создаем уникальную учетную запись для каждого пайплайна со временем жизни (TTL) 15 минут.
Настройка роли в Vault (для PostgreSQL):
В пайплайне запрашиваем данные:
Если учетные данные утекут, они автоматически станут недействительными через 15 минут. Злоумышленник не успеет предпринять никаких действий, а вам не придется вручную заниматься их экстренной заменой.
Пошаговый план внедрения:
1. Настроить Kubernetes auth method в Vault и привязать Service Account к роли.
2. Установить Vault Agent Injector через Helm-чарт для проксирования запросов от подов.
3. Настроить связку GitLab CI и Vault через JWT/OIDC (ID Tokens).
4. Перенести статические секреты в Vault KV engine, начиная с некритичных сервисов.
5. Перевести базы данных на динамические секреты, протестировав процесс на staging.
Хочешь разобраться с Vault на реальном кластере, настроить кластеризацию, политики доступа и ротацию динамических секретов? У нас есть практикум. Демодоступы бесплатно, активируй и разбирайся в технологии бесплатно:
↘ HashiCorp Vault - настройка кластера, политики, интеграции с БД и облаками
↘ Kubernetes Admin - детальная работа с кластером, безопасность, networking
↘ Gitlab CI - сложные пайплайны, интеграции, best practices
GitLab поддерживает ID Tokens (подписанные JWT), генерируемые для джоб. Vault верифицирует этот токен через JWKS-эндпоинт GitLab и выдает краткосрочный access-токен с политиками конкретной роли.
Для GitLab Premium/Ultimate доступна нативная интеграция:
deploy_job:
id_tokens:
VAULT_ID_TOKEN:
aud: https://vault.example.com
secrets:
DATABASE_PASSWORD:
vault: production/db:password@ops # Путь/к/секрету:ключ@метод
file: false
Для GitLab Community Edition (Free) используем стандартный CLI:
manual_authentication:
image: vault:latest
id_tokens:
VAULT_ID_TOKEN:
aud: https://vault.example.com
script:
- export VAULT_TOKEN="$(vault write -field=token auth/jwt/login role=myproject jwt=$VAULT_ID_TOKEN)"
- export PASSWORD="$(vault kv get -field=password secret/myproject/staging/db)"
Шаг 3. Внедряем динамические секреты
Вместо хранения постоянного пароля, мы создаем уникальную учетную запись для каждого пайплайна со временем жизни (TTL) 15 минут.
Настройка роли в Vault (для PostgreSQL):
vault write database/roles/my-db-role \
db_name="my-postgres-database" \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="15m" \
max_ttl="30m"
В пайплайне запрашиваем данные:
DB_CREDS=$(vault read -format=json database/creds/my-db-role)
DB_USER=$(echo "$DB_CREDS" | jq -r '.data.username')
DB_PASS=$(echo "$DB_CREDS" | jq -r '.data.password')
Если учетные данные утекут, они автоматически станут недействительными через 15 минут. Злоумышленник не успеет предпринять никаких действий, а вам не придется вручную заниматься их экстренной заменой.
Пошаговый план внедрения:
1. Настроить Kubernetes auth method в Vault и привязать Service Account к роли.
2. Установить Vault Agent Injector через Helm-чарт для проксирования запросов от подов.
3. Настроить связку GitLab CI и Vault через JWT/OIDC (ID Tokens).
4. Перенести статические секреты в Vault KV engine, начиная с некритичных сервисов.
5. Перевести базы данных на динамические секреты, протестировав процесс на staging.
Хочешь разобраться с Vault на реальном кластере, настроить кластеризацию, политики доступа и ротацию динамических секретов? У нас есть практикум. Демодоступы бесплатно, активируй и разбирайся в технологии бесплатно:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤6👍5💯2
🔥 История трансформера: от Марковских моделей до современных LLM. Новое видео с Артуром Сапрыкиным уже на канале.
20 июля у Артура стартует интенсив «ИИ-агенты для инженеров». Подробности тут: https://clck.ru/3UTeAG
Делимся записью открытого практикума, где разобрали эволюцию языковых моделей, устройство трансформеров и принцип работы ИИ-агентов. Краткий конспект👇🏼
🟢 Языковая модель (LM) — математическая система (нейросеть или граф) для генерации текста. Первые LM решали задачи Т9 и перевода (программа PROMT).
🟢 Марковские цепи — предсказывают следующее слово на основе вероятности перехода от текущег. Главные минусы: отсутствие глубокого контекста и непонимание синонимов.
🟢 Word2Vec (2013) — прорывная модель, научившаяся кодировать смысл слов в векторы (геометрия смыслов).
🟢 Трансформеры (2017) — архитектура с механизмом внимания (Attention). Работают с токенами (частями слов) и учитывают их порядок через позиционное кодирование.
🟢 ChatGPT и RLHF — модель стала популярной благодаря RLHF (обучению на основе отзывов людей), что сделало ответы полезными и «человечными».
🟢 Агенты и Reasoning — современные модели используют внешние инструменты (калькуляторы, поиск) и режим «размышления» (цепочку мыслей) для решения сложных задач.
🟢 Масштаб — современные LLM (например, DeepSeek R1) имеют до 700 млрд параметров, требуя для работы мощных кластеров из видеокарт.
↘️ Смотреть в ВК
↘️ Смотреть в Youtube
Если тебе интересна тема ИИ-агентов и ты хочешь разобраться, как внедрить искусственный интеллект в разработку и автоматизацию инфраструктуры, то ждем тебя на живом интенсиве «ИИ-агенты для инженеров», где за 9 занятий ты пройдешь весь путь.
↘️ Узнать подробнее об интенсиве и записаться
20 июля у Артура стартует интенсив «ИИ-агенты для инженеров». Подробности тут: https://clck.ru/3UTeAG
Делимся записью открытого практикума, где разобрали эволюцию языковых моделей, устройство трансформеров и принцип работы ИИ-агентов. Краткий конспект👇🏼
Если тебе интересна тема ИИ-агентов и ты хочешь разобраться, как внедрить искусственный интеллект в разработку и автоматизацию инфраструктуры, то ждем тебя на живом интенсиве «ИИ-агенты для инженеров», где за 9 занятий ты пройдешь весь путь.
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
История трансформера. От Марковских моделей до современных LLM.mp4
🔥Записаться на интенсив к Артуру Сапрыкину “ИИ-агенты для инженеров”: https://clck.ru/3USyRc 🔥Бесплатный демодоступ к практикуму “Прикладной LLM для инженеров”: https://clck.ru/3TFSmA Понравилась запись вебинара? Приходи на другие эфиры по DevOps и инфраструктуре:…
🔥11❤4👍4
1️⃣ Cisco Adaptive Security Appliance (ASA) Software: базовая настройка. Часть 2
Время проведения:
07 июля 2026, вторник, 19:00 по МСК
Программа практикума:
Кто ведёт?
Андрей Шабалин — Тренер Cisco / Huawei, инструктор академии Eltex и Астра-Университета
---------------------------------------------------------------------------------------
2️⃣ Работа с дисками в Linux
Время проведения:
8 июля 2026, среда, 20:00 по МСК
Программа практикума:
Кто ведёт?
Андрей Буранов — системный администратор в департаменте VK Play, 10+ лет опыта работы с ОС Linux, 8+ лет опыта преподавания. Входит в топ 3 лучших преподавателей образовательных порталов
---------------------------------------------------------------------------------------
3️⃣ Docker-образ весит 1.5 GB. Как похудеть?
Время проведения:
9 июля 2026, четверг, 19:00 по МСК
Программа практикума:
Кто ведёт?
Дмитрий Куликов — DevOps-инженер с 7+ лет опыта в IT. Специализация: построение и автоматизация IT-инфраструктуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🔥 Победи в новом траблшутинге Nginx Reverse Proxy и выиграй доступ к одному из практикумов. Регистрация уже открыта.
Новый инцидент: высоконагруженный прокси-сервер перестал принимать и корректно перенаправлять запросы клиентов. Часть трафика теряется, часть уходит не туда, а команда уже на созвоне и ждёт объяснений.
Тебе предстоит подключиться к виртуальной машине Ubuntu 24.04 со сломанным Nginx и бэкенд-приложением на Go. Необходимо провести полную диагностику по логам, исправить конфигурацию Nginx и systemd-юнита, устранить проблемы с правами доступа и ресурсными лимитами, восстановить устойчивый автозапуск после перезагрузки и добиться ответа 200 OK при обращении к прокси-серверу.
Формат:
🟢 доступ к рабочей инфраструктуре
🟢 симулятор реального инцидента без искусственных ограничений
🟢 доступ к задаче открыт с 9 по 15 июля
🟢 в конце — эфир с разбором решения
🎁 Призы:
🏆 инженер, который решит задачу быстрее всех, получит доступ к одному из практикумов стоимостью до 30 000 руб. на выбор
🟢 среди остальных участников разыграем две годовые подписки на вебинары
↘️ Участвовать бесплатно
Восстанови работу прокси-сервера под нагрузкой и докажи, что готов к реальным авариям!
Новый инцидент: высоконагруженный прокси-сервер перестал принимать и корректно перенаправлять запросы клиентов. Часть трафика теряется, часть уходит не туда, а команда уже на созвоне и ждёт объяснений.
Тебе предстоит подключиться к виртуальной машине Ubuntu 24.04 со сломанным Nginx и бэкенд-приложением на Go. Необходимо провести полную диагностику по логам, исправить конфигурацию Nginx и systemd-юнита, устранить проблемы с правами доступа и ресурсными лимитами, восстановить устойчивый автозапуск после перезагрузки и добиться ответа 200 OK при обращении к прокси-серверу.
Формат:
🏆 инженер, который решит задачу быстрее всех, получит доступ к одному из практикумов стоимостью до 30 000 руб. на выбор
Восстанови работу прокси-сервера под нагрузкой и докажи, что готов к реальным авариям!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2
Медленный старт контейнера
Оптимизация образов Docker и прогон через CI
Сборка пайплайна длится 10 минут, поды стартуют 30 секунд. Образы занимают под гигабайт, каждый новый релиз тянет все зависимости заново. При масштабировании приложение замедляется из-за долгого подъёма контейнеров.
Это следствие неоптимальной сборки образов. Многие используют один Dockerfile, который устанавливает все пакеты, копирует весь исходный код и собирает приложение в одном слое. В результате образ разрастается, слои не кэшируются, каждый запуск требует загрузки гигабайтов из registry.
В CI проблема усугубляется: без кэширования слоёв каждый пайплайн скачивает базовые образы и зависимости заново. Это увеличивает время выполнения и расходует ресурсы.
🛠Решение
Многоступенчатая сборка (multi-stage build) и правильная стратегия кэширования. Разделяем сборку и исполнение: в первой стадии компилируем приложение и собираем артефакты, во второй - копируем только то, что необходимо для работы.
Классический Dockerfile для Go-приложения:
В финальный образ попадает только скомпилированный бинарник и минимальный набор системных библиотек. Размер сокращается с ~800 МБ до ~15 МБ. Под стартует за секунды вместо десятков секунд.
Для интерпретируемых языков (Python, Node.js) принцип аналогичен. Например, для Python создаём виртуальное окружение на этапе сборки, где есть компиляторы для пакетов с C-расширениями, а в финальный образ переносим только готовое окружение без компиляторов и лишнего мусора:
Теперь настраиваем кэширование в GitLab CI, чтобы не пересобирать зависимости при каждом коммите. Воспользуемся современным движком docker buildx, который умеет работать с кэшем напрямую в удаленном реестре (registry) без лишних движений вроде docker pull и docker tag:
Docker проверяет манифест удаленного кэша. Если в Dockerfile не изменились строки, влияющие на слой (например, requirements.txt или `go.mod`), тяжелые этапы установки зависимостей просто пропустятся.
Оптимизация образов Docker и прогон через CI
Сборка пайплайна длится 10 минут, поды стартуют 30 секунд. Образы занимают под гигабайт, каждый новый релиз тянет все зависимости заново. При масштабировании приложение замедляется из-за долгого подъёма контейнеров.
Это следствие неоптимальной сборки образов. Многие используют один Dockerfile, который устанавливает все пакеты, копирует весь исходный код и собирает приложение в одном слое. В результате образ разрастается, слои не кэшируются, каждый запуск требует загрузки гигабайтов из registry.
В CI проблема усугубляется: без кэширования слоёв каждый пайплайн скачивает базовые образы и зависимости заново. Это увеличивает время выполнения и расходует ресурсы.
🛠Решение
Многоступенчатая сборка (multi-stage build) и правильная стратегия кэширования. Разделяем сборку и исполнение: в первой стадии компилируем приложение и собираем артефакты, во второй - копируем только то, что необходимо для работы.
Классический Dockerfile для Go-приложения:
FROM golang:1.26 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# Флаги -s -w отсекают отладочную информацию, уменьшая бинарник
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server
# Финальная стадия — distroless содержит ca-certificates и tzdata,
# но не содержит shell и пакетного менеджера
FROM gcr.io/distroless/static:nonroot
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]
В финальный образ попадает только скомпилированный бинарник и минимальный набор системных библиотек. Размер сокращается с ~800 МБ до ~15 МБ. Под стартует за секунды вместо десятков секунд.
Для интерпретируемых языков (Python, Node.js) принцип аналогичен. Например, для Python создаём виртуальное окружение на этапе сборки, где есть компиляторы для пакетов с C-расширениями, а в финальный образ переносим только готовое окружение без компиляторов и лишнего мусора:
# Стадия сборки. здесь есть компиляторы для пакетов с C-расширениями
FROM python:3.13-slim AS builder
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends build-essential \
&& rm -rf /var/lib/apt/lists/*
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Финальная стадия. чистый slim без компиляторов
FROM python:3.13-slim
WORKDIR /app
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY app.py .
CMD ["python", "app.py"]
Теперь настраиваем кэширование в GitLab CI, чтобы не пересобирать зависимости при каждом коммите. Воспользуемся современным движком docker buildx, который умеет работать с кэшем напрямую в удаленном реестре (registry) без лишних движений вроде docker pull и docker tag:
stage: build
image: docker:latest
services:
- docker:dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
DOCKER_CACHE: $CI_REGISTRY_IMAGE:cache
script:
# Логинимся в registry. без этого не пройдёт ни --push, ни --cache-to
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
# Инициализируем buildx-билдер с драйвером docker-container (умеет писать кэш в registry)
- docker buildx create --use
# Собираем образ, читая удалённый кэш и сохраняя новые слои в него же
- docker buildx build
--cache-from type=registry,ref=$DOCKER_CACHE
--cache-to type=registry,ref=$DOCKER_CACHE,mode=max
--tag $DOCKER_IMAGE
--tag $CI_REGISTRY_IMAGE:latest
--push .
Docker проверяет манифест удаленного кэша. Если в Dockerfile не изменились строки, влияющие на слой (например, requirements.txt или `go.mod`), тяжелые этапы установки зависимостей просто пропустятся.
🔥12👏6❤3👍3
Дополнительный приём - разделение этапов внутри пайплайна, чтобы сборка запускалась только при изменении кода. Добавляем rules:changes в тот же джоб build, чтобы сборка запускалась только при изменении кода:
Если изменения затронули только документацию или README - сборку можно пропустить.
Порядок действий для оптимизации:
1. Пересмотреть Dockerfile: вынести установку зависимостей в отдельный слой до копирования исходников, чтобы изменения кода не инвалидировали кэш.
2. Использовать минимальные базовые образы (`-slim` или `alpine`), если приложение не требует специфичных системных библиотек.
3. Внедрить многоступенчатую сборку, чтобы финальный образ содержал только исполняемые файлы, рантайм и необходимые артефакты.
4. Настроить GitLab CI с кэшированием слоёв через buildx (параметры --cache-from и `--cache-to`).
5. Для больших монорепозиториев добавить условные правила rules:changes, чтобы собирать только изменившиеся сервисы.
💡 Эти изменения сокращают время пайплайна с 10 до 2–3 минут, а старт подов - до 2–3 секунд. Экономия ресурсов кластера и времени разработчиков очевидна.
Все нюансы сборки контейнеров, включая секьюрити, оптимизацию слоёв и работу с GitLab CI ты можешь найти на наших курсах.🔥 Открывай демодоступы бесплатно🔥 и начинай погружаться в технологию:
* Docker - устройство, сеть, хранение, продвинутые техники сборки
* Gitlab CI - пайплайны, артефакты, кэширование, интеграции
* Bash - скрипты для автоматизации сборки и деплоя
# ...весь script из блока 3 выше...
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- src/**/*
- go.mod
- go.sum
- requirements.txt
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Если изменения затронули только документацию или README - сборку можно пропустить.
Порядок действий для оптимизации:
1. Пересмотреть Dockerfile: вынести установку зависимостей в отдельный слой до копирования исходников, чтобы изменения кода не инвалидировали кэш.
2. Использовать минимальные базовые образы (`-slim` или `alpine`), если приложение не требует специфичных системных библиотек.
3. Внедрить многоступенчатую сборку, чтобы финальный образ содержал только исполняемые файлы, рантайм и необходимые артефакты.
4. Настроить GitLab CI с кэшированием слоёв через buildx (параметры --cache-from и `--cache-to`).
5. Для больших монорепозиториев добавить условные правила rules:changes, чтобы собирать только изменившиеся сервисы.
Все нюансы сборки контейнеров, включая секьюрити, оптимизацию слоёв и работу с GitLab CI ты можешь найти на наших курсах.
* Docker - устройство, сеть, хранение, продвинутые техники сборки
* Gitlab CI - пайплайны, артефакты, кэширование, интеграции
* Bash - скрипты для автоматизации сборки и деплоя
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤1
Keycloak: единая система авторизации вместо самописных решений в каждом сервисе
Каждый новый сервис получает собственную реализацию хранения паролей, JWT и ролей. Через полгода в компании накапливается пять разных систем авторизации, в каждой свои баги, и никто не берётся их чинить.
Практикум по Keycloak закрывает эту проблему: инженеры настраивают SSO, MFA и защиту API в Keycloak вместо самописной авторизации в каждом сервисе.
В программе:
🟢 Проектирование и внедрение систем Single Sign-On (SSO) на базе Keycloak для корпоративных и микросервисных приложений.
🟢 Настройка безопасной аутентификации пользователей с использованием протоколов OAuth 2.0, OIDC и SAML 2.0.
🟢 Разработка кастомных сценариев аутентификации (Authentication Flows) и интеграция многофакторной защиты (MFA).
🟢 Оптимизация и кастомизация интерфейсов авторизации Keycloak с использованием шаблонов FreeMarker и CSS.
🟢 Интеграция бэкенд и фронтенд сервисов с Keycloak, включая валидацию JWT-токенов через JWKS.
🟢 Администрирование и защита инстансов Keycloak: настройка политик паролей, сессий и защиты от Brute Force.
🟢 Управление правами доступа и ролевыми моделями (RBAC) на уровне организации с использованием Realms.
↘️ Подробная о программа
В финальном проекте участники защищают распределённую микросервисную систему: разворачивают Keycloak, настраивают изолированный Realm с ролевой моделью, подключают MFA для администраторов, кастомизируют страницу входа и закрывают REST API проверкой подписи JWT.
Практикум уровня Middle. Требуются базовые навыки Docker, понимание HTTP/REST и опыт работы с curl/openssl. Отдельно мы добавили тренажёры — это более сложные практические задачи на инфраструктуре.
🎁 До 19 июля действует скидка 5 000 рублей для новых участников
↘️ Купить практикум Keycloak
↘️ Купить практикум Keycloak + тренажёры
Если вы DevOps-инженер, backend-разработчик или системный администратор и хотите свести несколько самописных систем авторизации к одному стандарту — этот практикум для вас🤍
Каждый новый сервис получает собственную реализацию хранения паролей, JWT и ролей. Через полгода в компании накапливается пять разных систем авторизации, в каждой свои баги, и никто не берётся их чинить.
Практикум по Keycloak закрывает эту проблему: инженеры настраивают SSO, MFA и защиту API в Keycloak вместо самописной авторизации в каждом сервисе.
В программе:
В финальном проекте участники защищают распределённую микросервисную систему: разворачивают Keycloak, настраивают изолированный Realm с ролевой моделью, подключают MFA для администраторов, кастомизируют страницу входа и закрывают REST API проверкой подписи JWT.
Практикум уровня Middle. Требуются базовые навыки Docker, понимание HTTP/REST и опыт работы с curl/openssl. Отдельно мы добавили тренажёры — это более сложные практические задачи на инфраструктуре.
Если вы DevOps-инженер, backend-разработчик или системный администратор и хотите свести несколько самописных систем авторизации к одному стандарту — этот практикум для вас
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
🔥 Открыли демодоступ к новым практикумам июня 2026: Proxmox, Patroni, FreeIPA и другие
Заходите на платформу, активируйте доступ, начинайте проходить и выполнять задания.
🟢 Patroni
Настроите отказоустойчивый кластер PostgreSQL с автоматическим failover через Patroni, etcd и HAProxy.
🟢 Proxmox
Развернёте виртуальную инфраструктуру на Proxmox VE: кластер узлов, сети, хранилища и бэкапы.
🍻 FreeIPA
Поднимете централизованную систему идентификации для Linux-инфраструктуры: LDAP, Kerberos, DNS и управление доступом в одном месте.
🟢 Атака на Active Directory
Пройдёте путь атакующего в домене Windows: разведка через LDAP, Kerberoasting, эскалация привилегий и закрепление в инфраструктуре.
🟢 Docker Compose
Соберёте multi-container приложение с нуля: сети, volumes, зависимости между сервисами и продакшн-профили в одном файле.
🟢 Gateway API
Настроите маршрутизацию трафика в Kubernetes через Gateway API — преемника Ingress с более гибкими правилами и разделением ролей между командами.
🟢 Golang internal
Разберётесь, как устроен Go изнутри: планировщик горутин, garbage collector, работа с памятью и escape analysis.
🎁 В честь запуска — скидка -20% на эти программы до 31 июля
Как активировать демо:
🟢 Переходите по ссылке курса, доступ откроется автоматически всем зарегистрированным пользователям платформы
🟢 Слева вы увидите, какие модули и блоки открылись
🟢 Проходите в своём темпе, выполняйте задания и знакомьтесь с платформой
Проведите вечер с пользой🤍
Заходите на платформу, активируйте доступ, начинайте проходить и выполнять задания.
Настроите отказоустойчивый кластер PostgreSQL с автоматическим failover через Patroni, etcd и HAProxy.
Развернёте виртуальную инфраструктуру на Proxmox VE: кластер узлов, сети, хранилища и бэкапы.
🍻 FreeIPA
Поднимете централизованную систему идентификации для Linux-инфраструктуры: LDAP, Kerberos, DNS и управление доступом в одном месте.
Пройдёте путь атакующего в домене Windows: разведка через LDAP, Kerberoasting, эскалация привилегий и закрепление в инфраструктуре.
Соберёте multi-container приложение с нуля: сети, volumes, зависимости между сервисами и продакшн-профили в одном файле.
Настроите маршрутизацию трафика в Kubernetes через Gateway API — преемника Ingress с более гибкими правилами и разделением ролей между командами.
Разберётесь, как устроен Go изнутри: планировщик горутин, garbage collector, работа с памятью и escape analysis.
Как активировать демо:
Проведите вечер с пользой
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3❤2💯1
Linux Performance & HighLoad Fundamentals: тюнинг ядра вместо докупки серверов
Нагрузка выросла втрое, и через час падает база: OOM Killer выбрал не тот процесс, потому что oom_score_adj никто не выставил. Пакеты теряются на уровне ядра, диск отвечает с задержкой в разы выше нормы, а Docker-образ весит два гигабайта и собирается пять минут.
Практикум Linux Performance & HighLoad Fundamentals учит закрывать эти проблемы тюнингом системы, без докупки серверов: инженеры разбирают планировщик CFS, память, диск и сеть на реальных стендах с имитацией пиковой нагрузки.
В программе:
🟢 Профилирование системных вызовов процессов с помощью strace и vmstat
🟢 Изоляция ядер процессора и настройка CPU affinity через taskset
🟢 Конфигурирование виртуальной памяти, swappiness и приоритетов выживания OOM Killer
🟢 Тюнинг планировщиков ввода-вывода и параметров сброса грязных страниц
🟢 Оптимизация параметров sysctl сетевого стека для предотвращения SYN drops
🟢 Сборка оптимизированных multi-stage Docker-образов на Alpine Linux
🟢 Настройка веб-сервера Nginx с поддержкой HTTP/3 QUIC и ECC-сертификатов
↘️ Подробная о программа
В финальном проекте участники оптимизируют медленно работающее веб-приложение в тяжёлом Docker-образе: пересобирают его на Alpine Linux до размера менее 45 МБ, настраивают Nginx на HTTP/3 с ECC-сертификатами, тюнингуют ядро под сетевую и дисковую нагрузку и подтверждают результат ростом RPS на нагрузочном тесте.
Практикум уровня Middle. Нужен базовый опыт администрирования Linux (Ubuntu/Debian), понимание TCP/IP и HTTP/TLS, навыки запуска контейнеров в Docker. Отдельно добавили тренажёры — более сложные практические задачи на инфраструктуре.
🎁 До 19 июля действует скидка 5 000 рублей для новых участников
↘️ Купить практикум
↘️ Купить практикум + тренажёры
Если ты DevOps-инженер, SRE или системный администратор и хочешь обрабатывать больше трафика на тех же серверах — этот практикум для тебя🤍
Нагрузка выросла втрое, и через час падает база: OOM Killer выбрал не тот процесс, потому что oom_score_adj никто не выставил. Пакеты теряются на уровне ядра, диск отвечает с задержкой в разы выше нормы, а Docker-образ весит два гигабайта и собирается пять минут.
Практикум Linux Performance & HighLoad Fundamentals учит закрывать эти проблемы тюнингом системы, без докупки серверов: инженеры разбирают планировщик CFS, память, диск и сеть на реальных стендах с имитацией пиковой нагрузки.
В программе:
В финальном проекте участники оптимизируют медленно работающее веб-приложение в тяжёлом Docker-образе: пересобирают его на Alpine Linux до размера менее 45 МБ, настраивают Nginx на HTTP/3 с ECC-сертификатами, тюнингуют ядро под сетевую и дисковую нагрузку и подтверждают результат ростом RPS на нагрузочном тесте.
Практикум уровня Middle. Нужен базовый опыт администрирования Linux (Ubuntu/Debian), понимание TCP/IP и HTTP/TLS, навыки запуска контейнеров в Docker. Отдельно добавили тренажёры — более сложные практические задачи на инфраструктуре.
Если ты DevOps-инженер, SRE или системный администратор и хочешь обрабатывать больше трафика на тех же серверах — этот практикум для тебя
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤2👍1
Траблшутинг Nginx Reverse Proxy открыт! Задача доступна всем, приступай к решению и поборись за главный приз
Формат участия:
🟢 доступ к рабочей инфраструктуре
🟢 симулятор реального инцидента без искусственных ограничений
🟢 доступ к задаче открыт с 9 по 15 июля
🟢 в конце — эфир с разбором решения
Тебе предстоит подключиться к виртуальной машине Ubuntu 24.04 со сломанным Nginx и бэкенд-приложением на Go. Необходимо провести полную диагностику по логам, исправить конфигурацию Nginx и systemd-юнита, устранить проблемы с правами доступа и ресурсными лимитами, восстановить устойчивый автозапуск после перезагрузки и добиться ответа 200 OK при обращении к прокси-серверу.
🎁 Призы:
🏆 инженер, который решит задачу быстрее всех, получит доступ к одному из практикумов стоимостью до 30 000 руб. на выбор
🟢 среди остальных участников разыграем две годовые подписки на вебинары
↘️ Участвовать бесплатно
Всем удачи🤍
Формат участия:
Тебе предстоит подключиться к виртуальной машине Ubuntu 24.04 со сломанным Nginx и бэкенд-приложением на Go. Необходимо провести полную диагностику по логам, исправить конфигурацию Nginx и systemd-юнита, устранить проблемы с правами доступа и ресурсными лимитами, восстановить устойчивый автозапуск после перезагрузки и добиться ответа 200 OK при обращении к прокси-серверу.
🏆 инженер, который решит задачу быстрее всех, получит доступ к одному из практикумов стоимостью до 30 000 руб. на выбор
Всем удачи
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤2
1️⃣ Отправка событий безопасности из MS Windows в ELK-стек средствами Winlogbeat
Время проведения:
14 июля 2026, вторник, 19:00 по МСК
Программа практикума:
Кто ведёт?
Андрей Шабалин — Тренер Cisco / Huawei, инструктор академии Eltex и Астра-Университета
---------------------------------------------------------------------------------------
2️⃣ RAID массивы
Время проведения:
15 июля 2026, среда, 20:00 по МСК
Программа практикума:
Кто ведёт?
Андрей Буранов — системный администратор в департаменте VK Play, 10+ лет опыта работы с ОС Linux, 8+ лет опыта преподавания. Входит в топ 3 лучших преподавателей образовательных порталов
---------------------------------------------------------------------------------------
3️⃣ IPTables-2
Время проведения:
16 июля 2026, четверг, 19:00 по МСК
Программа практикума:
Кто ведёт?
Николай Лавлинский — Технический директор в ООО “Метод Лаб”. Веб-разработчик более 15 лет. Спикер конференций HighLoad++, РИТ++
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Делимся записью открытого практикума "Что такое ИИ-агенты и почему они сделали LLM полезным", где с Артуром Сапрыкиным разобрали, почему современные языковые модели — это больше, чем просто чат, как устроены ИИ-агенты и как они меняют подход к автоматизации.
20 июля у Артура стартует интенсив «ИИ-агенты для инженеров». Подробности тут: https://clck.ru/3UTeAG
Краткий конспект видео 👇🏼
🟢 Модель и агенты — важно разделять мыслительные функции и практическое исполнение. Большая языковая модель выступает в роли координатора, который планирует шаги, а агент является непосредственным исполнителем задач.
🟢 Ограничения базовых систем — стандартные текстовые генераторы без специальных надстроек не могут зайти в интернет, отправить электронное письмо или самостоятельно выполнить запрос к базе данных.
🟢 Вспомогательные инструменты — это программные модули, которые система вызывает для работы: код для построения графиков, доступ к корпоративным системам или почтовым серверам.
🟢 Планирование и логика — современные решения используют цепочки размышлений, чтобы разбивать сложную задачу на этапы. Система способна самостоятельно исправлять свои недочеты, анализируя полученные в процессе работы ошибки.
🟢 Долговременная память — помимо текущего контекста диалога, программы используют внешние хранилища и базы данных. Это позволяет им помнить предпочтения человека и специфику компании в течение длительного времени.
🟢 Совместная работа систем — несколько цифровых помощников могут объединяться для решения одной задачи, где один ищет данные, другой их анализирует, а третий составляет итоговый отчет.
🟢 Безопасность и мониторинг — чтобы предотвратить нежелательные действия, необходимо жестко ограничивать права доступа и использовать специальные инструменты для фиксации каждого шага программы. Для ответственных задач лучше применять заранее прописанные сценарии.
↘️ Смотреть в ВК
↘️ Смотреть в Youtube
Если тебе интересна тема ИИ-агентов и ты хочешь разобраться, как внедрить искусственный интеллект в разработку и автоматизацию инфраструктуры, то ждем тебя на живом интенсиве «ИИ-агенты для инженеров», где за 9 занятий ты пройдешь весь путь.
↘️ Узнать подробнее об интенсиве и записаться
20 июля у Артура стартует интенсив «ИИ-агенты для инженеров». Подробности тут: https://clck.ru/3UTeAG
Краткий конспект видео 👇🏼
Если тебе интересна тема ИИ-агентов и ты хочешь разобраться, как внедрить искусственный интеллект в разработку и автоматизацию инфраструктуры, то ждем тебя на живом интенсиве «ИИ-агенты для инженеров», где за 9 занятий ты пройдешь весь путь.
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
Что такое ИИ-агенты и почему они сделали LLM полезным
🔥Записаться на интенсив к Артуру Сапрыкину “ИИ-агенты для инженеров”: https://clck.ru/3USyRc 🔥Бесплатный демодоступ к практикуму “Прикладной LLM для инженеров”: https://clck.ru/3TFSmA Понравилась запись вебинара? Приходи на другие эфиры по DevOps и инфраструктуре:…
🔥9❤2👍1
Когда Argo CD не синхронизирует состояние
Развернул приложение через Argo CD, всё зелёное, синхронизация прошла успешно. Через час заходишь - висит статус OutOfSync. Непонятно, кто и что изменил. Вроде бы репозиторий не трогали, но кластер думает иначе.
Или другая ситуация: разработчик запушил изменения, Argo CD их подхватил, но деплой завис, потому что какой-то ресурс уже существует и его нельзя обновить. А на следующий день выясняется, что кто-то из коллег выполнил kubectl apply вручную, и теперь состояние кластера расходится с Git-репозиторием.
🤔 Главная проблема - непонимание источника истины. В GitOps источник истины - это Git-репозиторий. Любое изменение в кластере, сделанное в обход Git, создаёт рассинхрон. Argo CD это видит, но не знает, что с этим делать, если политики не настроены правильно.
🛠Решение - корректная настройка политик синхронизации
Для каждого приложения в Argo CD можно определить, как именно оно должно синхронизироваться с репозиторием. Вот пример конфигурации с тремя ключевыми параметрами:
🔹 `selfHeal: true` - самый важный параметр для борьбы с «ручными» правками. Он автоматически возвращает кластер к состоянию, описанному в Git, если кто-то изменил ресурс через kubectl edit или apply. Без этого параметра любое ручное вмешательство оставит приложение в статусе OutOfSync.
🔹 `prune: false` - осторожная настройка на этапе миграции. Мы запрещаем Argo CD удалять из кластера ресурсы, которые не описаны в Git. Это защита от случайной потери данных. Включать prune: true (что является стандартом для честного GitOps) стоит тогда, когда вы полностью уверены в чистоте своих манифестов.
🔹 `- CreateNamespace=true` - опция в syncOptions, которая указывает Argo CD автоматически создать целевой namespace в кластере, если его еще не существует. Избавляет от лишних ручных шагов.
😎Масштабируем подход: паттерн App-of-Apps
Для больших проектов используется паттерн App-of-Apps (приложение приложений). Это подход, при котором одно главное («рутовое») приложение Argo CD управляет набором других дочерних приложений.
Важно: Корневое приложение должно разворачивать дочерние манифесты строго в тот namespace, где работает сам контроллер Argo CD (обычно `argocd`), иначе система их не распознает.
Каждое дочернее приложение в директории apps/ описывается собственным YAML-файлом и может иметь свои уникальные политики. Например, для баз данных можно оставить prune: false, а для легковесного фронтенда - prune: true.
Дополнительно внутри дочерних ресурсов можно использовать Sync Waves (волны синхронизации), чтобы управлять очередью развертывания. Например, сначала гарантированно поднять базу данных, а только потом - зависимый бэкенд:
Ресурсы с меньшим значением волны (включая отрицательные числа) запускаются и проверяются на готовность раньше остальных.
Развернул приложение через Argo CD, всё зелёное, синхронизация прошла успешно. Через час заходишь - висит статус OutOfSync. Непонятно, кто и что изменил. Вроде бы репозиторий не трогали, но кластер думает иначе.
Или другая ситуация: разработчик запушил изменения, Argo CD их подхватил, но деплой завис, потому что какой-то ресурс уже существует и его нельзя обновить. А на следующий день выясняется, что кто-то из коллег выполнил kubectl apply вручную, и теперь состояние кластера расходится с Git-репозиторием.
🤔 Главная проблема - непонимание источника истины. В GitOps источник истины - это Git-репозиторий. Любое изменение в кластере, сделанное в обход Git, создаёт рассинхрон. Argo CD это видит, но не знает, что с этим делать, если политики не настроены правильно.
🛠Решение - корректная настройка политик синхронизации
Для каждого приложения в Argo CD можно определить, как именно оно должно синхронизироваться с репозиторием. Вот пример конфигурации с тремя ключевыми параметрами:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: guestbook
syncPolicy:
automated:
prune: false # Не удалять ресурсы, которых нет в Git
selfHeal: true # Автоматически возвращать состояние из Git при дрифте
syncOptions:
- CreateNamespace=true
🔹 `selfHeal: true` - самый важный параметр для борьбы с «ручными» правками. Он автоматически возвращает кластер к состоянию, описанному в Git, если кто-то изменил ресурс через kubectl edit или apply. Без этого параметра любое ручное вмешательство оставит приложение в статусе OutOfSync.
🔹 `prune: false` - осторожная настройка на этапе миграции. Мы запрещаем Argo CD удалять из кластера ресурсы, которые не описаны в Git. Это защита от случайной потери данных. Включать prune: true (что является стандартом для честного GitOps) стоит тогда, когда вы полностью уверены в чистоте своих манифестов.
🔹 `- CreateNamespace=true` - опция в syncOptions, которая указывает Argo CD автоматически создать целевой namespace в кластере, если его еще не существует. Избавляет от лишних ручных шагов.
😎Масштабируем подход: паттерн App-of-Apps
Для больших проектов используется паттерн App-of-Apps (приложение приложений). Это подход, при котором одно главное («рутовое») приложение Argo CD управляет набором других дочерних приложений.
Важно: Корневое приложение должно разворачивать дочерние манифесты строго в тот namespace, где работает сам контроллер Argo CD (обычно `argocd`), иначе система их не распознает.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-of-apps
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/org/infra.git
targetRevision: HEAD
path: apps/
destination:
server: https://kubernetes.default.svc
namespace: argocd # Обязательно указываем namespace Argo CD
syncPolicy:
automated:
prune: true
selfHeal: true
Каждое дочернее приложение в директории apps/ описывается собственным YAML-файлом и может иметь свои уникальные политики. Например, для баз данных можно оставить prune: false, а для легковесного фронтенда - prune: true.
Дополнительно внутри дочерних ресурсов можно использовать Sync Waves (волны синхронизации), чтобы управлять очередью развертывания. Например, сначала гарантированно поднять базу данных, а только потом - зависимый бэкенд:
metadata:
annotations:
argocd.argoproj.io/sync-wave: "1"
Ресурсы с меньшим значением волны (включая отрицательные числа) запускаются и проверяются на готовность раньше остальных.
👍3❤1
Практический план внедрения
1. Соберите манифесты: определите все ресурсы, которые должны управляться через Argo CD, и перенесите их в Git.
2. Настройте политики безопасности: начните с selfHeal: true и prune: false для продакшена, чтобы защитить данные. На стейдже сразу включайте prune: true.
3. Подключите уведомления: настройте Argo CD Notifications в Slack или Telegram, чтобы мгновенно узнавать о сбоях синхронизации.
4. Внедрите App-of-Apps: централизуйте управление всеми сервисами кластера через один корневой репозиторий.
5. Оптимизируйте Webhooks: настройте webhook от GitHub/GitLab к Argo CD, чтобы синхронизация начиналась мгновенно при пуше, не дожидаясь стандартного 3-минутного опроса (polling).
6. Договоритесь на берегу: обучите команду главному правилу GitOps — никогда не менять ресурсы в кластере напрямую. Только через git commit и git push.
Если нарушить этот принцип, Argo CD либо молча перезапишет ваши изменения (при `selfHeal`), либо оставит кластер в перманентном рассинхроне. Единственный правильный подход: commit в Git, а не apply в консоли.
Чтобы освоить GitOps на практике, включая работу с Helm-чартами, настройку мультикластерного деплоя и управление конфигурациями, 🔥открывай демодоступы бесплатно🔥 и начинай погружаться в технологию:
* Argo CD - установка, настройка, App-of-Apps, интеграция с Helm
* Git - продвинутая работа с репозиториями, ветвление, стратегии слияния
* Helm - создание чартов, управление зависимостями, шаблонизация
1. Соберите манифесты: определите все ресурсы, которые должны управляться через Argo CD, и перенесите их в Git.
2. Настройте политики безопасности: начните с selfHeal: true и prune: false для продакшена, чтобы защитить данные. На стейдже сразу включайте prune: true.
3. Подключите уведомления: настройте Argo CD Notifications в Slack или Telegram, чтобы мгновенно узнавать о сбоях синхронизации.
4. Внедрите App-of-Apps: централизуйте управление всеми сервисами кластера через один корневой репозиторий.
5. Оптимизируйте Webhooks: настройте webhook от GitHub/GitLab к Argo CD, чтобы синхронизация начиналась мгновенно при пуше, не дожидаясь стандартного 3-минутного опроса (polling).
6. Договоритесь на берегу: обучите команду главному правилу GitOps — никогда не менять ресурсы в кластере напрямую. Только через git commit и git push.
Если нарушить этот принцип, Argo CD либо молча перезапишет ваши изменения (при `selfHeal`), либо оставит кластер в перманентном рассинхроне. Единственный правильный подход: commit в Git, а не apply в консоли.
Чтобы освоить GitOps на практике, включая работу с Helm-чартами, настройку мультикластерного деплоя и управление конфигурациями, 🔥открывай демодоступы бесплатно🔥 и начинай погружаться в технологию:
* Argo CD - установка, настройка, App-of-Apps, интеграция с Helm
* Git - продвинутая работа с репозиториями, ветвление, стратегии слияния
* Helm - создание чартов, управление зависимостями, шаблонизация
🔥10
Что будет, если объединить FreeIPA + Bash + Ansible?
Обычно управление инфраструктурой держится на трёх разрозненных инструментах. Пользователей заводят вручную на каждой машине, единого каталога доступа нет, а рутинные задачи закрывают Bash-скриптами вместо того, чтобы оформить их в Ansible-роль и использовать на всех серверах.
Мы собрали FreeIPA, Bash и Ansible в один практикум: управление инфраструктурой и рабочими станциями, чтобы инженер мог настроить централизованный доступ, автоматизировать рутину через скрипты и роли и держать всю инфраструктуру под контролем из одной точки.
Тебя ждёт:
🟢 Развертывание отказоустойчивых кластеров FreeIPA и управление политиками доступа.
🟢 Интеграция Linux-инфраструктуры с Active Directory через trust-отношения.
🟢 Написание безопасных и отказоустойчивых Bash-скриптов для автоматизации задач.
🟢 Профессиональный парсинг и обработка сложных логов с помощью sed и awk.
🟢 Разработка, структурирование и тестирование Ansible-ролей с помощью Molecule.
🟢 Обеспечение качества IaC-кода через статический анализ и безопасное управление секретами.
↘️ Подробная о программа
Финальный проект
Собираешь все три навыка вместе: разворачиваешь отказоустойчивый домен FreeIPA, пишешь Bash-скрипты для сбора логов и автоматизируешь рабочие станции через Ansible.
🎁 До 19 июля действует скидка 7 500 рублей для новых участников
↘️ Купить практикум со скидкой
Если ты системный администратор, DevOps-инженер или инженер инфраструктуры и хочешь навести порядок в доступах и автоматизации — этот практикум для тебя🤍
Обычно управление инфраструктурой держится на трёх разрозненных инструментах. Пользователей заводят вручную на каждой машине, единого каталога доступа нет, а рутинные задачи закрывают Bash-скриптами вместо того, чтобы оформить их в Ansible-роль и использовать на всех серверах.
Мы собрали FreeIPA, Bash и Ansible в один практикум: управление инфраструктурой и рабочими станциями, чтобы инженер мог настроить централизованный доступ, автоматизировать рутину через скрипты и роли и держать всю инфраструктуру под контролем из одной точки.
Тебя ждёт:
Финальный проект
Собираешь все три навыка вместе: разворачиваешь отказоустойчивый домен FreeIPA, пишешь Bash-скрипты для сбора логов и автоматизируешь рабочие станции через Ansible.
Если ты системный администратор, DevOps-инженер или инженер инфраструктуры и хочешь навести порядок в доступах и автоматизации — этот практикум для тебя
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2
⏳ Завтра последний день — траблшутинг Nginx Reverse Proxy закрывается 15 июля.
📖 Открыли теорию: разобрали, как nginx находит upstream и откуда берётся классический 502, почему сервис не стартует с виду правильным конфигом, и как ловить OOM Killer раньше, чем это сделает продакшен.
Ещё есть время подключиться к живому серверу и починить прокси, который перестал пускать клиентов дальше себя.
🏆 Инженер, который быстрее всех решит задачу, получит любой модуль стоимостью до 30 000 рублей
🟢 Среди остальных участников разыграем две годовые подписки на вебинары
↘️ Решить задачу
Эфир с разбором задачи проведем 17 июля, регистрация уже открыта: https://clck.ru/3Umgcp
📖 Открыли теорию: разобрали, как nginx находит upstream и откуда берётся классический 502, почему сервис не стартует с виду правильным конфигом, и как ловить OOM Killer раньше, чем это сделает продакшен.
Ещё есть время подключиться к живому серверу и починить прокси, который перестал пускать клиентов дальше себя.
🏆 Инженер, который быстрее всех решит задачу, получит любой модуль стоимостью до 30 000 рублей
Эфир с разбором задачи проведем 17 июля, регистрация уже открыта: https://clck.ru/3Umgcp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥1
Настройка kube-prometheus-stack
Развернул kube-prometheus-stack, дашборды в Grafana зелёные. Проходит неделя - и выясняется, что прод упал ещё вчера в 3 часа ночи. Метрики есть, графики зафиксировали момент, но никто не получил уведомление. Или наоборот: каждые пять минут приходит алерт о том, что под перезапустился. Команда перестаёт реагировать на оповещения, а когда случается реальная проблема - её замечают пользователи, а не инженеры.
Стандартная установка kube-prometheus-stack поставляется с сотнями предустановленных правил. Многие команды либо отключают их все из-за шума, либо оставляют как есть и тонут в бесконечном потоке уведомлений. В результате мониторинг перестаёт быть инструментом и становится источником раздражения.
Проблема не в том, что метрики не собираются. Они собираются, и даже слишком много. Проблема в том, что алерты не настроены под конкретную архитектуру, а Alertmanager не умеет правильно маршрутизировать оповещения.
Шаг1️⃣ Кастомизируем правила и убираем шум
Решение начинается с осознания: мониторинг - это про то, чтобы узнать о проблеме до того, как её заметит пользователь. И для этого нужны три вещи: правильные правила, умная маршрутизация и контроль над шумом.
Начнём с правил. Оставляем пять-десять действительно важных. Каждый алерт должен иметь чёткое действие. Если на оповещение нельзя ответить действием - это не алерт, это шум.
Создаём PrometheusRule с базовым набором. Обратите внимание на алерт PodCrashLooping: вместо капризной функции rate, которая сбрасывает таймер, как только под затих, мы используем точечный фильтр по статусу CrashLoopBackOff.
Это минимальный базовый набор. PodCrashLooping, NodeNotReady и HighErrorRate покрывают большинство критических сценариев, когда в кластере что-то ломается.
Тяжёлые запросы и Recording Rules
Если вы часто используете сложные вычисления в дашбордах, они создают высокую нагрузку на Prometheus. Используем recording rules - они вычисляют выражение один раз по расписанию и сохраняют результат как новую готовую метрику:
Теперь вместо того чтобы каждый раз нагружать CPU вычислением этого агрегата при открытии Grafana, Prometheus моментально отдаёт уже записанное значение.
Шаг2️⃣ Настраиваем Alertmanager
Даже самые правильные алерты бесполезны, если они приходят не тем людям или в неподходящее время. Настроим Alertmanager.
Настраиваем маршрутизацию по уровню критичности (`severity`) в нативном формате Alertmanager. Критические алерты отправляем в PagerDuty, предупреждения - в Slack, а для непредвиденных ситуаций оставляем дефолтный маршрут:
Развернул kube-prometheus-stack, дашборды в Grafana зелёные. Проходит неделя - и выясняется, что прод упал ещё вчера в 3 часа ночи. Метрики есть, графики зафиксировали момент, но никто не получил уведомление. Или наоборот: каждые пять минут приходит алерт о том, что под перезапустился. Команда перестаёт реагировать на оповещения, а когда случается реальная проблема - её замечают пользователи, а не инженеры.
Стандартная установка kube-prometheus-stack поставляется с сотнями предустановленных правил. Многие команды либо отключают их все из-за шума, либо оставляют как есть и тонут в бесконечном потоке уведомлений. В результате мониторинг перестаёт быть инструментом и становится источником раздражения.
Проблема не в том, что метрики не собираются. Они собираются, и даже слишком много. Проблема в том, что алерты не настроены под конкретную архитектуру, а Alertmanager не умеет правильно маршрутизировать оповещения.
Шаг
Решение начинается с осознания: мониторинг - это про то, чтобы узнать о проблеме до того, как её заметит пользователь. И для этого нужны три вещи: правильные правила, умная маршрутизация и контроль над шумом.
Начнём с правил. Оставляем пять-десять действительно важных. Каждый алерт должен иметь чёткое действие. Если на оповещение нельзя ответить действием - это не алерт, это шум.
Создаём PrometheusRule с базовым набором. Обратите внимание на алерт PodCrashLooping: вместо капризной функции rate, которая сбрасывает таймер, как только под затих, мы используем точечный фильтр по статусу CrashLoopBackOff.
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kubernetes-essential
namespace: monitoring
spec:
groups:
- name: kubernetes.essential
rules:
- alert: PodCrashLooping
expr: kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"} == 1
for: 10m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} is crash looping"
- alert: NodeNotReady
expr: kube_node_status_condition{condition="Ready",status="true"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Node {{ $labels.node }} is not ready"
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m])) by (service) /
sum(rate(http_requests_total[5m])) by (service) > 0.05
for: 10m
labels:
severity: critical
annotations:
summary: "{{ $labels.service }} has {{ $value | humanizePercentage }} error rate"
Это минимальный базовый набор. PodCrashLooping, NodeNotReady и HighErrorRate покрывают большинство критических сценариев, когда в кластере что-то ломается.
Тяжёлые запросы и Recording Rules
Если вы часто используете сложные вычисления в дашбордах, они создают высокую нагрузку на Prometheus. Используем recording rules - они вычисляют выражение один раз по расписанию и сохраняют результат как новую готовую метрику:
- name: recording.rules
rules:
- record: namespace:pod_cpu:rate5m
expr: sum(rate(container_cpu_usage_seconds_total[5m])) by (namespace, pod)
Теперь вместо того чтобы каждый раз нагружать CPU вычислением этого агрегата при открытии Grafana, Prometheus моментально отдаёт уже записанное значение.
Шаг
Даже самые правильные алерты бесполезны, если они приходят не тем людям или в неподходящее время. Настроим Alertmanager.
Настраиваем маршрутизацию по уровню критичности (`severity`) в нативном формате Alertmanager. Критические алерты отправляем в PagerDuty, предупреждения - в Slack, а для непредвиденных ситуаций оставляем дефолтный маршрут:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
route:
group_by: ['alertname', 'namespace']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: default
routes:
- matchers:
- severity = critical
receiver: pagerduty
- matchers:
- severity = warning
receiver: slack
receivers:
- name: default
- name: pagerduty
pagerduty_configs:
- routing_key: <your-routing-key>
- name: slack
slack_configs:
- channel: '#alerts'
api_url: <webhook-url>
Важный момент - группировка. Параметр group_by: ['alertname', 'namespace'] объединяет похожие алерты в одно компактное уведомление. Вместо десяти отдельных сообщений в Slack о том, что разные поды упали в одном сис-окружении, вы получите всего одно емкое оповещение.
Также не забывайте про Inhibition rules (правила взаимоподавления). Если узел (`NodeNotReady`) стал недоступен, все алерты о падении конкретных подов на этом узле должны подавляться автоматически. Нет никакого смысла читать спам о смерти пяти контейнеров, если упал весь сервер, на котором они были запущены.
Практический план внедрения
1️⃣ Установить kube-prometheus-stack через Helm с кастомным values-файлом.
2️⃣ Отключить или переопределить избыточные стандартные правила, оставив только критический минимум. Добавить свои правила через additionalPrometheusRulesMap.
3️⃣ Настроить recording rules для тяжёлых графиков, которые выводятся на главные экраны.
4️⃣ Сконфигурировать Alertmanager: задать маршрутизацию по severity, настроить группировку и правила подавления (inhibition).
5️⃣ Подключить каналы уведомлений (`receivers`): Slack/Telegram для предупреждений, PagerDuty или Opsgenie — для ночных критических звонков.
6️⃣ Включить нотификации в тестовом режиме на пару дней и откалибровать пороги срабатывания.
7️⃣ Постепенно добавлять новые алерты, но только тогда, когда старые перестали давать ложные срабатывания.
Правильно настроенный мониторинг - это когда вы узнаёте о проблеме до того, как она повлияла на бизнес, и получаете ровно столько уведомлений, сколько ваша команда способна обработать без выгорания.
🔥Открывай демодоступы бесплатно и начинай разбираться:
🔹 Kube Prometheus Stack - полный стек мониторинга на практике: Prometheus, Alertmanager, Grafana, ServiceMonitor, PrometheusRule.
🔹 Grafana - визуализация, продвинутые дашборды, алертинг и интеграции.
🔥11