Об DevOps и архитектуру

Kubernetes

Последнее обновление: 03 Aug 2021

Kubernetes – это runtime для написания распределенных инфраструктурных приложений, к которому сбоку сами разработчики кубера написали opinionated оркестратор для контейнеров. (Исторически это могло происходить в обратном порядке, но большой роли это не играет).

Из этого сразу вытекает много особенностей:

  • этот рантайм нужно уметь запускать и поддерживать, и это не очень тривиально
  • много внутренностей рантайма видны пользователю, хотя никогда не будут использованы (повышенная когнитивная нагрузка)
  • достаточно сложный пользовательский интерфейс – интерфейс к рантайму/API, а не к пользовательской функциональности (повышенная когнитивная нагрузка)
  • средства программирования под него достаточно скудные – наиболее распространены препроцессоры/шаблонизаторы (повышенная когнитивная нагрузка и вероятность ошибок). Высокоуровневые есть, но их мало кто умеет
  • большое число “знающих кубер” умеют лишь работать с его API и писать под него только на препроцессоре
  • чаще всего интерфейс для команд разработки к нему останется на уровне “сложные и непонятные API, завернутые в протекающую абстракцию”, либо “обратитесь к своему девопс-инженеру и он вам все сделает”

Из плюсов:

  • сейчас много инфраструктурного софта разрабатывается с расчетом того, что будет ставиться в кубер (это минус софту, но плюс куберу)
  • есть managed варианты (для других оркестраторов это далеко не всегда так)
  • оркестратор мощнее, чем аналоги
  • модульный и его можно расширять, наверное, бесконечно (если вам это нужно и вы это умеете)
  • большое сообщество как в плане найма, так и поддержки
  • в него нативно интегрируются Открытые стандарты

Главные условия использования Kubernetes:

  • Оценить в числах экономику использования (в т.ч. продуктивности использования программистами и поддержки) – как затраты, так и преимущества
  • Спроектировать платформу, которая на нем будет строиться, или заложить точки расширения для ее строительства в будущем:
    • Инфраструктурные слои:
      • инструменты управления для каждого слоя
      • расположение кода для каждого слоя
      • способы раскатки каждого слоя
      • зоны ответственности команд за тот или иной слой
    • Доработать процессы разработки продуктовых команд под использование кубера:
      • интерфейсы к платформе для команд (деплой, отладка, мониторинг логирование). Не путать интерфейсы и инструменты.
      • процесс разворачивания песочниц для команд
      • прочие рабочие процессы команд (обновление приложения в песочнице, отладка приложения в песочнице, хотфиксы приложения в песочнице и т.д.)

Проектировать и реализовывать необходимо одновременно как продакшн, так и песочницы. И то и другое может быть как простой, так и сложной задачей в зависимости от конкретного случая. Если не реализовать песочницы, они никогда в полной мере не будут реализованы, а разработчики будут страдать и их продуктивность работы будет снижена.

Для успешности использования Kubernetes необходим человек, который даст ответ на все эти вопросы.