И снова про Kubernetes
Kubernetes – это runtime для для написания распределенных инфраструктурных приложений с использованием Operator pattern, плюс оркестратор контейнеров.
Ключевые составляющие:
- Хранилище описаний объектов.
- Модель нотификаций об изменениях как описаний, так и самих объектов.
- Готовые простые инструменты для работы с хранилищем и событиями.
- Мутноватый, но в целом неплохой stdlib для того, чтобы это было применимо к реальным вещам (запуск контейнеров, модель прав доступа и ограничений ресурсов и т.д.).
- Встроенный оркестратор контейнеров, за счет которого появляется возможность через эти механизмы достраивать самого себя.
Иными словами, это state-machine, интегрированная с оркестратором. За счет этого у него появляются свойства, которые по-отдельности отсутствуют как у оркестраторов, так и у state-machine.
Из этого сразу вытекает много особенностей:
- Этот рантайм нужно уметь запускать и поддерживать, и это не очень тривиально.
- Много внутренностей рантайма видны пользователю, хотя никогда не будут использованы (повышенная когнитивная нагрузка).
- Достаточно сложный пользовательский интерфейс – интерфейс к рантайму/API, а не к пользовательской функциональности (повышенная когнитивная нагрузка).
- Средства программирования под него достаточно скудные – наиболее распространены препроцессоры/шаблонизаторы (повышенная когнитивная нагрузка и вероятность ошибок). Высокоуровневые есть (Operator pattern), но их мало кто "умеет".
- Большое число "знающих кубер" умеют лишь работать с его API и писать под него только на препроцессоре.
- Чаще всего интерфейс для команд разработки к нему останется на уровне "сложные и непонятные API, завернутые в протекающую абстракцию", либо "обратитесь к своему девопс-инженеру и он вам все сделает".
Из плюсов:
- Сейчас много инфраструктурного софта разрабатывается с расчетом того, что будет ставиться в кубер (это минус софту, но плюс куберу).
- Есть managed варианты (для других оркестраторов это далеко не всегда так).
- Оркестратор мощнее, чем аналоги.
- Модульный и его можно расширять, наверное, бесконечно (если вам это нужно и вы это умеете).
- Большое сообщество как в плане найма, так и поддержки.
- В него нативно интегрируются Открытые стандарты.
Главные условия использования Kubernetes:
1.Оценить в числах экономику использования (в т.ч. продуктивности использования программистами и поддержки) – как затраты, так и преимущества/ 2.Спроектировать платформу, которая на нем будет строиться, или заложить точки расширения для ее строительства в будущем: a) Инфраструктурные слои: - инструменты управления для каждого слоя; - расположение кода для каждого слоя; - способы раскатки каждого слоя; - зоны ответственности команд за тот или иной слой. 3.Доработать процессы разработки продуктовых команд под использование кубера: - интерфейсы к платформе для команд (деплой, отладка, мониторинг логирование). Не путать интерфейсы и инструменты; - процесс разворачивания песочниц для команд; - прочие рабочие процессы команд (обновление приложения в песочнице, отладка приложения в песочнице, хотфиксы приложения в песочнице и т.д.).
Проектировать и реализовывать необходимо одновременно как продакшн, так и песочницы. И то, и другое может быть как простой, так и сложной задачей в зависимости от конкретного случая. Если не реализовать песочницы, они никогда в полной мере не будут реализованы, а разработчики будут страдать, и их продуктивность работы будет снижена.
Для успешности использования Kubernetes необходим человек, который даст ответ на все эти вопросы.
Больше полезных материалов смотрите в моем блоге.