⚡️ Делимся новостью наших друзей
Получите статус сертифицированного инженера данных
Скоро в программе сертификации Yandex Cloud появятся два новых экзамена для инженеров данных. Пока они не запущены официально, мы проводим серию пилотных тестирований — чтобы собрать статистику и доработать экзамены. Те, кто успешно сдадут экзамен, получат статус сертифицированных специалистов в числе первых.
Что за экзамены?
1️⃣ Yandex Cloud Certified Data Engineer — базовый уровень, подтверждает навыки работы с сервисами платформы данных.
2️⃣ Yandex Cloud Certified Lakehouse Data Engineer — продвинутый уровень, проверяет компетенции по построению Lakehouse-платформ.
Пилоты проводятся до 4 июля. Участие бесплатное, но количество мест ограничено.
Заполняйте эту форму, чтобы зарегистрироваться. Детали на этой странице.
Получите статус сертифицированного инженера данных
Скоро в программе сертификации Yandex Cloud появятся два новых экзамена для инженеров данных. Пока они не запущены официально, мы проводим серию пилотных тестирований — чтобы собрать статистику и доработать экзамены. Те, кто успешно сдадут экзамен, получат статус сертифицированных специалистов в числе первых.
Что за экзамены?
1️⃣ Yandex Cloud Certified Data Engineer — базовый уровень, подтверждает навыки работы с сервисами платформы данных.
2️⃣ Yandex Cloud Certified Lakehouse Data Engineer — продвинутый уровень, проверяет компетенции по построению Lakehouse-платформ.
Пилоты проводятся до 4 июля. Участие бесплатное, но количество мест ограничено.
Заполняйте эту форму, чтобы зарегистрироваться. Детали на этой странице.
👍12
🔥Интенсив Network Security с Андреем Шабалиным стартует уже через 2 дня. Придержали место специально для тебя 😉
За 8 живых занятий с Андреем ты получишь все самые необходимые навыки по работе с сетями и научишься:
• проектировать и настраивать сети в эмуляторе GNS3
• управлять межсетевым экраном Eltex ESR
• настраивать фильтрацию трафика с помощью ACL
• конфигурировать Source NAT и Destination NAT
• настраивать мониторинг сетевых устройств по протоколам Syslog и SNMP
• конфигурировать xFlow и зеркалирование трафика (SPAN)
• управлять сетевым доступом через AAA
↘️ Занять место
Тебя ждёт:
🟢 8 живых занятий с Андреем Шабалиным
🟢 7 практических заданий с проверкой
🟢 Практика на виртуальных образах Eltex vESR в среде GNS3
🟢 Чат с Андреем и участниками интенсива
🟢 Глубокий разбор логики работы Firewall (Class-map, Policy-map)
🟢 Фокус на безопасности управления (Control Plane Hardening).
🟡 Начало занятий — 1 июля
🎁 Сейчас действует скидка 3 000 руб. А для участников прошлого интенсива с Андреем дополнительная скидка 2 000 руб.
↘️ Узнать подробности и занять место
За 8 живых занятий с Андреем ты получишь все самые необходимые навыки по работе с сетями и научишься:
• проектировать и настраивать сети в эмуляторе GNS3
• управлять межсетевым экраном Eltex ESR
• настраивать фильтрацию трафика с помощью ACL
• конфигурировать Source NAT и Destination NAT
• настраивать мониторинг сетевых устройств по протоколам Syslog и SNMP
• конфигурировать xFlow и зеркалирование трафика (SPAN)
• управлять сетевым доступом через AAA
Тебя ждёт:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👏1
🤖 Какие ИИ-агенты нужны инженерам для работы? Уже завтра на бесплатном вебинаре разберём с Артуром Сапрыкиным.
LLM сама по себе умеет отвечать на вопросы. Но как только нужно сходить в API, прочитать лог, запустить команду и принять решение по результату — одной модели мало. Эту разницу и закрывают агенты.
На вебинаре «Агенты ИИ. Что это такое и почему они сделали LLM полезным?» разберём:
🟢 что на самом деле стоит за словом «ИИ-агент»
🟢 почему голой LLM недостаточно для рабочих задач
🟢 какую роль агенты играют в современных ИИ-решениях
🟢 примеры применения в реальных продуктах
🟢 почему ChatGPT — это не только LLM
👨💻 Ведёт: Артур Сапрыкин, основатель и CEO Maglosya. 17 лет в IT, 10 из них в ИИ, 7 лет преподаёт. Начинал с desktop-приложений для госучреждений на .NET и C++, сейчас проектирует архитектуру ИИ-систем: агенты, LLM, компьютерное зрение, аудио-аналитика.
📆 1 июля, 20:00 мск
📍 Zoom
↘️ Регистрируйся бесплатно
Ждём именно тебя🤍
LLM сама по себе умеет отвечать на вопросы. Но как только нужно сходить в API, прочитать лог, запустить команду и принять решение по результату — одной модели мало. Эту разницу и закрывают агенты.
На вебинаре «Агенты ИИ. Что это такое и почему они сделали LLM полезным?» разберём:
👨💻 Ведёт: Артур Сапрыкин, основатель и CEO Maglosya. 17 лет в IT, 10 из них в ИИ, 7 лет преподаёт. Начинал с desktop-приложений для госучреждений на .NET и C++, сейчас проектирует архитектуру ИИ-систем: агенты, LLM, компьютерное зрение, аудио-аналитика.
📆 1 июля, 20:00 мск
📍 Zoom
Ждём именно тебя
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤1
А ты уже сделал своего ИИ-агента для автоматизации инфраструктуры? Если нет — ждём на интенсиве «ИИ-агенты для инженеров», где за 9 живых занятий соберешь агента под свои рабочие задачи.
Рынок уходит от простых чатов к автономным агентам, которые сами доводят задачу до результата по циклу Reason+Act. MCP, интеграция в CI/CD и контроль расходов на LLM уже встречаются в требованиях вакансий.
Программу интенсива собрали специально для DevOps, SRE и backend-инженеров, где ты научишься:
🟢 внедрять автономных coding-агентов: Aider, opencode для рефакторинга и написания тестов
🟢 разрабатывать собственные MCP-серверы на FastMCP для связи LLM с внутренней инфраструктурой
🟢 снижать расходы на API через связку Architect/Editor и мониторинг в Langfuse
🟢 генерировать и валидировать Helm-чарты и Kubernetes-манифесты силами агента
🟢 защищать агентов от Prompt Injection и утечки секретов через Docker-изоляцию
🟢 подключать AI-ревьюеров в GitHub Actions
🟢 управлять контекстом в длинных проектах через иерархическую память
↘️ Подробная программа
Тебя ждёт:
🟢 9 живых эфиров с Артуром Сапрыкиным
🟢 8 заданий с проверкой
🟢 упор на self-hosted решения и open-source агентов — Aider, opencode
🟢 чат с Артуром и участниками интенсива, записи эфиров
🟢 реальные сценарии DevOps: работа с Terraform, Helm и логами систем
🟢 разбор безопасности и изоляции AI-процессов
🟢 блок про экономику: как не слить бюджет на API в первый же день
👨💻 Автор и ведущий практикума — Артур Сапрыкин, основатель и CEO Maglosya
17 лет в IT, 10 из них в ИИ, 7 лет преподаёт. Начинал с desktop-приложений для госучреждений на .NET и C++, сейчас проектирует архитектуру ИИ-систем: агенты, LLM, компьютерное зрение, аудио-аналитика.
🟡 Начало занятий — 20 июля
🎁 Сейчас действует скидка 10 000 руб. А для участников практикума «LLM для инженеров» дополнительная скидка 3 000 руб.
↘️ Узнать подробности и занять место
✉️ Чтобы получить дополнительную скидку, напиши нашим менеджерам в телеграм, они подробно расскажут о программе и помогут с оплатой.
Рынок уходит от простых чатов к автономным агентам, которые сами доводят задачу до результата по циклу Reason+Act. MCP, интеграция в CI/CD и контроль расходов на LLM уже встречаются в требованиях вакансий.
Программу интенсива собрали специально для DevOps, SRE и backend-инженеров, где ты научишься:
Тебя ждёт:
👨💻 Автор и ведущий практикума — Артур Сапрыкин, основатель и CEO Maglosya
17 лет в IT, 10 из них в ИИ, 7 лет преподаёт. Начинал с desktop-приложений для госучреждений на .NET и C++, сейчас проектирует архитектуру ИИ-систем: агенты, LLM, компьютерное зрение, аудио-аналитика.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2
🔥Пять задач по 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