Kubernetes и управляемые платформы

Что это такое

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

Почему это важно

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

Ключевые идеи

Плоскость управления — как раз то, чем не стоит владеть

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

провайдер: плоскость управления (обновляется, наблюдается, аутентифицируется)
вы:        пулы узлов, нагрузки, квоты, сетевые политики

Управляемые среды выполнения идут на ступень выше

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

Идентичность дотягивается до кластера

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

Автомасштабирование имеет две независимые оси

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

Переносимость реальна, но частична

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

Практика

Выберите подходящую ступень

Возьмите небольшой HTTP-сервис и выберите между управляемым кластером, управляемой средой выполнения и виртуальной машиной. Для каждого назовите операционную работу, которая остаётся.

Готово, когда: вы можете обосновать средний выбор требованием, а не модой, или обосновать, почему он отпадает.

Назначьте запросы по измерению

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

Готово, когда: вы можете назвать поведение перезапуска на лимите и почему запрос не был выставлен равным лимиту.

Частые ошибки

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

Что читать дальше