Production-ready Azure Kubernetes Service: настройка AKS с Terraform

Кластер начинает сбоить не из-за кода, а из-за инфраструктуры: не хватает ресурсов, срываются обновления, теряются доступы. Мы настраиваем Azure AKS под ключ — от проектирования контура до передачи регламентов, — чтобы рост нагрузки не превращался в аварии. Изменения доходят до боевой среды заметно быстрее, а отказы уходят из привычного списка.
Часто задаваемые вопросы

Кластер Azure AKS: что ломается при росте нагрузки

Кластер Azure AKS ведёт себя предсказуемо ровно до того момента, пока нагрузка держится в привычных рамках. На пике — распродажа, утренний наплыв пользователей, пакетная обработка — узлы упираются в потолок по процессору и памяти, планировщик не находит места для новых копий сервиса, и начинаются перезапуски контейнеров. Формально кластер жив, все узлы в статусе готовности, но сервис отвечает в разы медленнее. Часть запросов не дожидается ответа, пользователь видит ошибку, а дежурный получает лавину однотипных оповещений вместо одной понятной причины.

Второе узкое место кластера — ручные правки. Кто-то поправил границы ресурсов через консоль, кто-то ночью вручную добавил узлы, кто-то ослабил проверки готовности «чтобы поднималось быстрее». Всё это живёт до следующего развёртывания: фактическое состояние расходится с описанием инфраструктуры, и собрать ту же конфигурацию на чистом окружении уже не выходит.

Отсюда — нестабильные окружения. Тестовый контур живёт по одним правилам, продуктивный по другим, и деградация при росте нагрузки воспроизводится только в бою. Цена такой схемы — ночные разборы, откаты релизов и осторожность вместо развития продукта. Ниже разбираем, как это закрывается.

Что даёт управляемый кластер: эффект в сроках и отказах

Управляемый кластер берёт на себя то, что не создаёт ценности продукту: обновление управляющего слоя, замену узлов, ротацию сертификатов. Декларативное описание Azure Kubernetes Service фиксирует состояние кластера в конфигурации, а не в памяти дежурного инженера. Отсюда — предсказуемая эксплуатация: одинаковый результат на стенде и в промышленной среде.

Скорость выката новой версии сервиса

Поочерёдная замена экземпляров с проверкой готовности позволяет выпускать релиз без окна простоя: трафик уходит на новую версию только после того, как она подтвердила работоспособность. Новая версия встаёт в работу за минуты, а не за ночные согласования — порядок замены и совместимость описаны в манифестах. Возврат к предыдущей версии — тоже команда, а не аварийный созвон.

Управляемое восстановление после сбоя узла

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

Устранённый класс отказов из-за ручных правок

Правки через веб-консоль — самая частая причина расхождения сред: кто-то поправил лимиты, кто-то — правило сети, и воспроизвести это уже нельзя. Когда изменения проходят только через конфигурацию и проверку в системе контроля версий, целый класс отказов исчезает. Расхождение стенда и промышленной среды видно до релиза, а не в момент инцидента.

Варианты развёртывания Azure AKS: что и когда подходит

Подходов к развёртыванию Azure AKS три, и выбор между ними определяется не размером команды, а тем, сколько сред нужно поддерживать и как часто меняется конфигурация. Сравним их, а затем разберём крайние случаи подробнее.

Вариант Когда подходит Ограничения
Ручной контур: портал и CLI Пилот, разовая проверка гипотезы, одна среда Конфигурация живёт в истории команд; кластер не повторить один в один; расхождение настроек не отслеживается
Инфраструктура кодом на Terraform Несколько сред, регулярные релизы, требования к воспроизводимости и аудиту Нужны компетенции и контроль состояния; первичная настройка дольше
Гибридный подход Ядро — сеть, узлы, роли — кодом, прикладные надстройки вручную Без регламента границы расхождение возвращается

Для каких задач нужен ручной контур

Ручной контур оправдан, когда кластер нужен один и ненадолго: проверить гипотезу, прогнать нагрузочный тест, обучить команду работе с управляемым контуром. Собирается быстро, компетенции в описании инфраструктуры не требуются. Ограничение одно, но жёсткое: воспроизвести ту же конфигурацию через месяц не получится, а откат после неудачного изменения сводится к пересборке вручную.

Где оправдано полное описание инфраструктуры кодом

Как только сред больше одной или релизы идут регулярно, ручное сопровождение перестаёт масштабироваться. Terraform показывает план изменений до применения, изменения проходят ревью, а состояние кластера хранится централизованно — расхождение видно раньше, чем попадёт в рабочую среду. Второй кластер поднимается тем же описанием с другими параметрами: восстановление среды занимает минуты.

Этапы работ: от аудита кластера до передачи контура

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

  1. Аудит кластера. Снимаем фактическое состояние: состав и размеры узловых пулов, политики обновлений, права доступа, что описано в коде, а что настроено руками через консоль. На выходе — карта рисков и перечень расхождений между декларацией и реальностью.
  2. Схема окружений и сетей. Фиксируем, сколько контуров нужно, как разделяются подсети и адресация сервисов, какие маршруты открыты наружу и внутрь. Схему согласуем до первых изменений — переделывать сеть на живом контуре дороже всего.
  3. Настройка кластера. Конфигурация переносится в описание инфраструктуры: узловые пулы, автомасштабирование, окна обновлений, изоляция рабочих нагрузок, секреты и ролевые доступы. После этого ручные правки не нужны — состояние приводится к описанному и воспроизводится с нуля.
  4. Проверка отказоустойчивости. Управляемо выводим узел из строя, смотрим поведение при отказе зоны, при обновлении версии и при восстановлении из копии. Фиксируем метрики и время возврата в норму, а не только факт успешного запуска.
  5. Регламент эксплуатации. Описываем типовые операции: выкат, откат, плановое обслуживание, реакцию на аварию. Команда получает инструкции под свои задачи, а не общую документацию продукта.
  6. Передача контура. Разбираем с инженерами заказчика устройство кластера, права доступа и порядок изменений, проводим обучение на реальных сценариях. Дальше контур живёт без нашей постоянной поддержки.

Каждый этап заканчивается артефактом, который можно проверить: карта рисков, схема, описание инфраструктуры, отчёт о проверках, регламент. Такой порядок позволяет остановиться на любом шаге и понимать, что именно уже сделано и чем это подтверждено.

Комплект поставки: конфигурации, схемы и регламенты

Работа заканчивается не запуском кластера, а передачей артефактов, по которым его можно сопровождать и воспроизвести с нуля. Всё хранится в репозитории под контролем версий: изменения проходят проверку и применяются автоматизированно, а не руками из консоли. Ниже — комплект, который остаётся у заказчика.

  • Конфигурации кластера — Terraform-модули: пулы узлов, автомасштабирование, зоны, надстройки. Переменные разнесены по окружениям, значения по умолчанию описаны.
  • Файл состояния Terraform — удалённое хранилище, блокировки, отдельное состояние на каждое окружение: параллельные применения не ломают инфраструктуру.
  • Схемы сетей — виртуальная сеть, подсети узлов и подов, маршрутизация, точки выхода наружу: видно, какой трафик куда допустим.
  • Политики доступа — роли и привязки, отдельные права для людей и сервисов, сетевые политики между пространствами имён, запрет привилегированных контейнеров.
  • Документация кластера — развёртывание с нуля, добавление окружения, где смотреть метрики и логи, какие алерты заведены и что делать при срабатывании.
  • Регламент обновлений — окна обслуживания, порядок обновления узлов и надстроек, обкатка на стенде, критерии отката.
  • План восстановления — резервные копии состояния и хранилищ, пошаговый возврат к последней рабочей версии и проверка восстановления на стенде.

Кейс: кластер под пиковую нагрузку интернет-магазина

Интернет-магазин с суточной неровностью спроса: тихие ночные часы и пики распродаж, когда число одновременных покупателей вырастало в разы за считанные минуты. Кластер в Azure Kubernetes Service собирали вручную через портал, часть настроек жила в переписке, и любое изменение перед акцией превращалось в отдельный риск. Задача формулировалась просто: пик должен проходить без падения корзины и без дежурного у консоли.

Что именно переделывали

Описание инфраструктуры перенесли в Terraform: кластер, пулы узлов, сетевые политики, права доступа. Конфигурация стала воспроизводимой, изменение проходит ревью и откатывается одной командой, а не «по памяти».

Автомасштабирование настроили по двум сигналам сразу — по фактической нагрузке и по расписанию: ночной минимум и предварительный разогрев узлов к утреннему пику, чтобы холодный старт не съедал первые минуты распродажи. Пробы готовности и распределение подов по зонам доступности сделали так, что узел уходит из ротации без обрыва активных запросов.

Метрики до и после

Метрика До После
Доля успешных запросов в часы распродажи просадка до двухзначной стабильно на уровне целевой
Восстановление после отказа узла несколько часов, вручную минуты, автоматически
Ручные вмешательства за месяц десятки единичные

Кластер перестал быть узким местом: пики планируют заранее, а инженеры занимаются развитием платформы, а не тушением ночных отказов.

Что делать, если кластер уже развёрнут вручную?

Кластер, собранный вручную, обычно держит продовую нагрузку, поэтому логика «разберём и соберём заново» здесь не подходит. Рабочий путь — не пересборка, а инвентаризация: сначала описываем то, что фактически существует, затем постепенно переводим ресурсы под управление описаниями, не останавливая сервисы. Пока описание не совпадает с реальностью, применять его нельзя — иначе инструмент попытается пересоздать уже работающие объекты.

Начинаем с импорта существующих ресурсов в файл состояния и сверки плана изменений с фактической конфигурацией. Критерий готовности к переходу простой: план должен быть пустым — это и есть обратная совместимость, при которой управление описаниями ничего не ломает. Пока разница не сведена к нулю, в кластер не применяется ни одно изменение.

Дальше — постепенный переход по слоям. Первыми идут вещи, не несущие трафик: квоты, политики доступа, конфигурации. Затем рабочие нагрузки, и только в конце — то, что трогать рискованнее всего: сетевые правила, внешние точки входа, диски с данными. Каждый слой переводится отдельной итерацией, с отдельной проверкой и возможностью вернуться к предыдущему набору описаний.

Перевод без простоя обеспечивается тем, что новые узлы добавляются параллельно существующим, нагрузка переезжает по мере их готовности, а старые выводятся контролируемо и только после подтверждения, что всё работает. Откат в такой схеме — это возврат прежних описаний: состояние восстанавливается, а ручные правки, сделанные до перехода, не теряются.

Через несколько итераций кластер оказывается описан целиком, без ручных настроек, которые невозможно воспроизвести. Дальше любые изменения проходят одинаковый путь: описание, проверка плана, применение. Если нужно оценить объём такой работы на вашем контуре — опишите задачу, вернёмся с планом перехода.

Технические сомнения: сеть, доступы и обновления

Сеть, доступы и порядок обновлений — то, что чаще всего всплывает перед выводом кластера в рабочий контур. Ниже — ответы на вопросы, которые задают до старта, чтобы границы работ были понятны заранее.

Как обновляются узлы, если сервис работает круглосуточно?

Обход идёт по одному узлу: он выводится из балансировки, нагрузка уходит на оставшиеся, поды переезжают по правилам допустимого числа недоступных реплик. Окна обслуживания ставим в часы минимального трафика, а сервисам, не переживающим перезапуск, заранее настраиваем несколько реплик и корректные проверки готовности.

Как изолированы среды — тестовая, предпродуктивная и рабочая?

Каждая живёт в отдельном пространстве имён со своими секретами, квотами и лимитами. Сетевые политики по умолчанию запрещают трафик между средами, разрешения выдаём точечно. Стенды не видят рабочие базы и не могут писать в них по ошибке.

Что входит в резервное копирование?

Снимки персистентных томов и манифестов по расписанию, копии — в отдельном хранилище. Восстановление проверяем на учениях: разворачиваем среду из копии и сверяем результат, чтобы «копия есть» означало подтверждённое время восстановления.

Где граница ответственности между вами и нашей командой?

На нас — платформа: конфигурация кластера, обновления, сетевые политики, мониторинг и алерты по инфраструктуре. На вашей стороне — код приложения, релизы, содержимое секретов и права пользователей. Границы фиксируем схемой и регламентом на этапе передачи, чтобы при инциденте было понятно, кто что смотрит.

Обсудим задачу: вернёмся с оценкой и планом работ

Расскажите, как сейчас устроен кластер: сколько нодовых пулов, какая сетевая модель, где хранится состояние Terraform и кто вносит изменения в обход конфигурации. По такому описанию уже видно большую часть узких мест — от ручных правок до отсутствия проверок перед применением.

На первом разговоре уточняем:

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

К ответу приложим схему работ по этапам с точками приёмки, состав команды с ролями и зонами ответственности и порядок старта: что делаем на первой неделе, что понадобится от вашей стороны.

Опишите задачу в свободной форме — текущую конфигурацию, что не устраивает и какой результат нужен. Вернёмся с оценкой, планом работ и понятными сроками.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141