Managed Kubernetes на Selectel: Terraform, Ingress, StorageClass

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

Управляемый Kubernetes в Selectel: где ломается инфраструктура

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

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

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

Восстановление после сбоя без репетиции — лотерея. Копия состояния кластера не проверялась, StorageClass с политикой удаления тома уносит данные вместе с PVC, порядок подъёма зависимых сервисов никто не фиксировал. Тогда простой измеряется не часами плановых работ, а сутками экспериментов.

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

Эффект от выделенного кластера: что меняется в эксплуатации

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

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

Кластер разворачиваем на Selectel: управляющая часть и отказоустойчивость узлов — на стороне провайдера, а за описание инфраструктуры, маршрутизацию и политики хранения отвечаем мы. Опишите задачу — вернёмся с оценкой и планом перехода.

Режимы работы управляемого кластера: сравнение вариантов

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

Ниже — четыре режима, между которыми реально выбирают в управляемом Kubernetes.

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

Что остаётся общим при любом режиме

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

Как проходит внедрение: этапы инженерных работ

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

Порядок работ

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

Что остаётся у заказчика: конфигурации, схемы, регламенты

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

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

Любой пункт можно оставить нам на сопровождение, но критерий сдачи другой: команда без нашего участия разворачивает копию окружения, проводит обновление и восстанавливается после сбоя.

Кейс: перенос сервисов в кластер и метрики до и после

Что было до переезда

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

Что изменили

Инфраструктуру перевели в декларативное описание: Terraform создаёт кластер, пулы узлов и сеть, Ingress живёт отдельным объектом, StorageClass с политикой хранения привязан к томам баз данных. Приложения собираются в образы с неизменяемыми тегами, миграции схемы идут отдельной задачей перед раскаткой, пробы готовности не пускают трафик на непрогретый под. Живой трафик переключали через балансировщик, поэтому переезд прошёл без простоя.

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

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

Чем описание инфраструктуры как кода лучше ручной настройки

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

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

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

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

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

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

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

Как разграничить права между командами и подрядчиками?

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

Какой класс хранения выбрать под базы и под логи?

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

Обновления проходят без простоя?

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

Что с резервным копированием и восстановлением?

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

Обсудим задачу: с чего начинается работа

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

Возвращаемся с планом работ, в котором:

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

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

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

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

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