Современные веб-приложения запускаются в контейнерах уже как стандарт. Это удобно для разработки, доставки, так и для распределения ресурсов в среде выполнения. Явные преимущества использования контейнеров:
- Всё в одном. Собираемый образ (image) содержит в себе всё необходимое для запуска приложения: файлы приложения, используемые библиотеки, конфиги и т.д.
- Воспроизводимый процесс. Весь процесс сборки описывается скриптами в специальном файле и позволяет в точности воспроизвести результат.
- Ничего лишнего. Нет необходимости выполнять дополнительную настройку и установку пакетов на целевой системе, где будет запускаться контейнер. Всё что нужно — это запуск Docker, или аналогов.
- Переиспользование готового. В процессе сборки образов, сборочные шаги представляют из себя слои, которые можно использовать заново. Это позволяет значительно ускорять процесс.
Есть ещё масса преимуществ. Каждый может увидеть своё в процессе реализации и использовать в полной мере.
Когда продукт на стадии стартапа, нет необходимости выбирать сложную систему для оркестрации контейнеров. Это может быть необоснованно с точки зрения затрат времени и финансов на запуск и отладку сложной системы. Достаточно использовать docker compose, или docker swarm, как наиболее доступные, с невысоким порогом входа. Как правило, программисты любят локальную разработку и для них не составит труда написать конфигурацию для запуска приложения в упомянутых системах.
Kubernetes (он же K8s) — это система с открытым исходным кодом, позволяющая автоматизировать доставку, масштабирование и управление приложениями, запускаемыми в контейнерах.
Внедрение Kubernetes — это естественный этап в процессе эволюции продуктовой команды. По мере увеличения популярности приложения, повышаются требования к отказоустойчивости компонентов приложения, а также пропускной способности. Всплывают специфичные особенности выбранной реализации, с которыми нужно как-то научиться жить.
Какие возможности предлагает Kubernetes.
- Операторы. Все процессы в кластере производят программы, называемые операторами. Они позволяют расширять функционал кластера при необходимости на различных уровнях.
- Автоматическое масштабирование. Поддерживается увеличение количества экземпляров компонентов приложения (реплик) через горизонтальное масштабирование (HPA), либо увеличение размера ресурсов, выделенных реплике через вертикальное масштабирование (VPA). Так же есть возможность добавлять ноды (сервера) в кластер автоматически для увеличения вычислительных ресурсов. Масштабирование работает как в сторону увеличения, так и уменьшения.
- Приоритеты. Возможность выдать приоритеты определённым компонентам инфраструктуры, или приложения. Это позволяет избежать непредсказуемого поведения в ситуации ограниченности ресурсов.
- Безопасность. Отлаженная система ролевой модели доступа к API и возможность расширения функционала хранения чувствительных данных при помощи операторов. Это даёт неоспоримое преимущество по сравнению с другими системами оркестрации контейнеров.
- Наблюдаемость. Благодаря открытой архитектуре, в k8s доступен богатый ассортимент инструментов по сбору логов, метрик, состояний.
- Отказоустойчивость и самовосстановление. K8s предоставляет инструменты для минимизации риска отказа приложения. К таким можно отнести мультинодовую архитектуру кластера, пробы (Startup, Liveness, Readiness), описание распределения компонентов по нодам (affinity), автомасштабирование компонентов приложения или нод кластера. Однако, если всё же часть кластера по каким-то причинам перестала быть доступной, недостающие компоненты и реплики приложения будут стремиться к запуску, в том числе вытесняя менее приоритетные приложения и компоненты. Когда связь с недостающими нодами будет восстановлена, они начнут принимать на себя рабочую нагрузку.
Если подитожить то, что предоставляет Kubernetes, то можно описать это словами гибкость и надёжность. Kubernetes обладает способностью к расширению функционала. Существует масса инструментов, которые дают новые возможности на любом уровне жизненного цикла приложения. Здесь, как раз и участвуют операторы. Так как Kubernetes достаточно популярен, вокруг него собралась большая аудитория, в которой есть энтузиасты, создающие операторы для свободного использования в своём кластере.