Аддоны
Для кластеров Cloud Containers доступны различные аддоны (дополнительные сервисы). Их можно выбрать в любой комбинации и установить либо при создании кластера с помощью Terraform, либо позднее в уже существующий кластер. Процесс установки автоматизирован и требует минимального вмешательства пользователя.
-
Аддоны устанавливаются на worker-узлы кластера и потребляют их вычислительные ресурсы.
Ниже приведены системные требования аддонов, исходящие из стандартных значений requests и limits для ресурсов Kubernetes в коде настройки аддона. При использовании нестандартных значений системные требования аддонов изменятся.
-
Аддоны могут быть установлены на выделенную группу worker-узлов или на выбранные планировщиком Kubernetes worker-узлы. Использование первого подхода позволяет исключить влияние аддонов на работу production-сервисов, развернутых в кластере.
Вычислительных ресурсов выделенной группы worker-узлов должно быть достаточно для всех аддонов, даже если каждый аддон потребляет максимум ресурсов, указанных в системных требованиях. Рекомендуется настроить автоматическое масштабирование для такой группы узлов.
-
Установка аддонов возможна в трех вариантах:
- Стандартная установка на выбранные планировщиком Kubernetes worker-узлы с изменением кода настройки аддона.
- Установка на выделенные worker-узлы с изменением кода настройки аддона.
- Быстрая установка на выбранные планировщиком Kubernetes worker-узлы без изменения кода настройки аддона (с настройками по умолчанию).
Не все аддоны поддерживают все три варианта установки.
Процесс установки описан в разделе Установка и настройка аддонов.
Доступность конкретных аддонов зависит от региона, в котором планируется разместить кластер.
Argo CD — это инструмент непрерывной доставки (continuous delivery, CD) для Kubernetes, который использует подход GitOps. Он автоматически развертывает и обновляет приложения в кластере, отслеживая их конфигурацию в Git-репозитории. Преимущества Argo CD:
- Ускоряются и упрощаются процессы GitOps: сокращается время на запуск, масштабирование и доставку изменений, а также снижается сложность их внедрения.
- Повышается надежность и управляемость кластеров: минимизируются ручные действия и ошибки при изменении конфигурации. Argo CD автоматически замечает такие расхождения и возвращает кластер к состоянию, описанному в его Git-репозитории.
- Действия в кластере становятся более прозрачными, и повышается его безопасность за счет контроля над всеми изменениями с возможностью отслеживания и аудита через Git.
Для корректной работы Argo CD требуется стабильный доступ к Git-репозиториям, в которых содержится конфигурация кластеров. Также аддон должен иметь права на создание приложений в кластере, настроенные в Kubernetes через модель разграничения доступа (Role Based Access Control, RBAC), иначе возможны ошибки синхронизации состояния кластера.
Кластеры Kubernetes позволяют организовать логическое разделение ресурсов на уровне отдельных пространств имен (namespaces). Однако этого может быть недостаточно, чтобы организовать разделение и изоляцию ресурсов в сложных сценариях. Например, нужно предоставить разным командам разработчиков разные наборы ресурсов. Для этого можно создать отдельные кластеры для каждой команды, но если таких кластеров много, ими сложно управлять.
Capsule позволяет изолировать наборы ресурсов в рамках одного кластера с помощью тенантов (tenants). Тенант представляет собой пространства имен в сочетании с ограничениями на создание и потребление ресурсов Kubernetes, назначенные определенной группе пользователей. Движок политик Capsule (policy engine) не только следит за соблюдением политик по использованию ресурсов в рамках тенанта, но и обеспечивает изоляцию одного тенанта от другого. Так можно организовать работу нескольких команд в одном мультитенантном кластере (multi-tenant cluster) без необходимости администрировать дополнительные кластеры.
С помощью инструмента cert-manager можно управлять сертификатами в кластерах Kubernetes:
-
Выпускать сертификаты, в том числе самоподписанные (self-signed). Для этого
cert-managerотправляет запросы к источникам, выступающим в роли центра сертификации (certificate authority, CA).Примеры источников:
- провайдеры решений по кибербезопасности, такие как Venafi;
- провайдеры сертификатов, такие как Let’s Encrypt;
- хранилища секретов, такие как HashiCorp Vault;
- локальные контейнеры, содержащие внутри себя публичную часть сертификата и приватный ключ.
-
Автоматически перевыпускать сертификаты с истекающим сроком действия.
Выпущенный с помощью cert-manager сертификат будет доступен другим ресурсам Kubernetes. Например, его можно использовать для Ingress.
Container Storage Interface для S3 (S3-CSI) — драйвер Container Storage Interface для Kubernetes, который позволяет монтировать S3-совместимые объектные хранилища (VK Object Storage, AWS S3, MinIO и другие) как постоянные тома (Persistent Volumes, PV).
S3-CSI основан на высокопроизводительной файловой системе GeeseFS, которая работает на базе FUSE. Аддон имеет почти полную POSIX-совместимость и поддерживает следующие действия с объектами:
- чтение и запись;
- блокировка;
- переименование и удаление.
S3-CSI работает на уровне бакетов объектного хранилища и может функционировать в двух режимах:
- Динамическое создание бакетов (dynamic provisioning). При создании PVC (Persistent Volume Claim) с указанным классом хранения (Storage Class) аддон автоматически создает новый бакет в целевом S3-совместимом хранилище. После создания PVC этот бакет сразу готов к использованию как PV.
- Использование существующих бакетов (static provisioning). Вы можете использовать заранее созданный бакет в любом S3-совместимом хранилище. Для этого аддон создает PV с указанием имени существующего бакета, и затем PVC связывается с этим PV.
S3-CSI может создавать бакеты в любом S3-совместимом хранилище, которое вы укажете при установке.
Реестр Docker предназначен для размещения и хранения образов Docker. Работает в отказоустойчивой конфигурации (high availability, HA). Образы из реестра можно использовать при развертывании сервисов в кластере.
Подробнее в разделе Подключение к реестру Docker.
Fluent Bit позволяет настраивать сбор логов в кластерах Cloud Containers, чтобы затем анализировать их в сервисе Cloud Logging, например, с помощью плагинов Elasticsearch или Loki. Основное преимущество аддона — возможность более гибкой настройки под нужды пользователя.
Источниками логов выступают службы kubelet и поды (pods), расположенные на узлах кластера.
Fluent Bit в комбинации со специальными фильтрами, написанными на языке Lua, позволяет организовать доставку логов из кластера Cloud Containers в сервис Cloud Logging для их дальнейшего анализа.
Источниками логов выступают службы kubelet и поды (pods), расположенные на узлах кластера. Подробнее о том, как работает аддон, читайте в разделах про его установку для кластеров первого и кластеров второго поколений.
GPU Operator позволяет управлять GPU на узлах кластера для выполнения машинного обучения или обработки больших данных.
Доступны следующие варианты использования GPU в кластере:
- Один под использует один или несколько GPU.
- Аддон распределяет один GPU между несколькими подами по стратегии MIG.
- Аддон распределяет один GPU между несколькими подами по стратегии MPS.
Состав аддона:
-
NVIDIA GPU Operator для управления GPU.
-
Служебные валидаторы для проверки CUDA (Compute Unified Device Architecture) после изменения конфигурации.
-
Средства самостоятельной диагностики оператора.
-
NVIDIA device plugin для автоматизации привязки и выделения ресурсов GPU.
-
Node Feature Discovery для определения и регистрации функций, доступных на узлах кластера. Компонент содержит следующие службы:
- NFD-Master отвечает за подключение к серверу API Kubernetes и обновление объектов узлов.
- NFD-Worker подключается к службе NFD-Master для объявления аппаратных функций.
- NFD Garbage-Collector гарантирует, что все объекты Node Feature Discovery имеют соответствующие узлы, и удаляет устаревшие объекты для несуществующих узлов.
Подробнее об аддоне и его компонентах: NVIDIA GPU Operator, NVIDIA device plugin, Node Feature Discovery.
Ingress-контроллер на базе NGINX работает в качестве обратного прокси (reverse proxy) и позволяет организовать единую точку входа для сервисов в кластере, которые работают по HTTP или HTTPS.
При наличии контроллера достаточно создать ресурс Ingress, чтобы такие сервисы стали доступны извне кластера Kubernetes.
Ingress-контроллер тесно интегрируется с платформой VK Cloud. Подробнее в разделе Сеть в кластере.
Istio — это фреймворк, реализующий концепцию сервисной сетки (service mesh), при которой для взаимодействия между сервисами приложения выделяется отдельный слой. Использование Istio обеспечивает для сервисов управление трафиком без изменения кода самих сервисов (используются sidecar-контейнеры). Преимущества Istio:
-
Расширяются возможности для безопасной передачи трафика:
- можно настраивать политики для трафика;
- можно использовать TLS для коммуникации между сервисами.
-
Расширяются возможности мониторинга трафика.
-
Возможна сложная маршрутизация и балансировка трафика между сервисами.
В распределенных системах, основанных на микросервисах, постоянно идет обмен запросами (requests). Платформа Jaeger создана для распределенной трассировки запросов. Jaeger отслеживает путь потока запросов через микросервисы и позволяет:
- собирать информацию о взаимосвязях компонентов системы с точки зрения потока запросов;
- обнаруживать проблемы с запросами или узкие места в архитектуре системы, связанные с обработкой потока запросов.
Такой инструмент необходим, потому что факторы, связанные с запросами, могут значительно влиять на поведение и производительность этих систем в целом. Недостаточно обеспечить наблюдение только за отдельными микросервисами.
Jaeger выполняет трассировку запросов на основе данных, которые получает от микросервисов. Поэтому в микросервисы необходимо интегрировать инструментальный стек OpenTelemetry для отправки данных о запросах. Познакомиться с интеграцией OpenTelemetry в микросервисное приложение можно на примере HotROD в разделе Использование Jaeger.
Kgateway — инструмент для маршрутизации и управления трафиком в Kubernetes с использованием Gateway API. Его преимущества:
- Обеспечивает публикацию сервисов Kubernetes и проксирование запросов к внешним сервисам.
- Автоматически масштабируется под нагрузку.
- Сокращает время запуска приложений и сервисов.
- Позволяет централизованно задавать точки входа, TLS, маршруты и политики доступа.
Подробнее о работе с аддоном в разделе Использование Kgateway.
Kube Prometheus Stack — система мониторинга состояния кластера и развернутых в нем сервисов, реализованная на базе Prometheus и инструмента визуализации Grafana. Подробнее в разделе Подключение к Grafana для просмотра метрик кластера.
VK Cloud предоставляет две версии аддона Kube Prometheus Stack: базовую и с доработками от компании VK Tech (версия с суффиксом vk в номере). Аддон с доработками содержит дополнительные встроенные функции, в частности, прогнозирование потребления ресурсов кластера.
Vertical Pod Autoscaler (VPA) — инструмент для автоматической настройки ресурсов (CPU и RAM) для контейнеров Kubernetes. Задачи VPA:
- Проанализировать нагрузку и данные использования ресурсов.
- Предоставить рекомендации и, если настроено, автоматически применить их к запросам ресурсов новых и уже запущенных подов.
VPA состоит из трех компонентов:
-
Recommender: анализирует текущее и прошлое потребление ресурсов и на основе этого рекомендует, как изменить запросы ресурсов пода для наибольшей эффективности. Recommender — единственный компонент, который включен по умолчанию при работе с VPA.
-
Updater: получает рекомендации, обновляет объекты VPA и следит за тем, чтобы рекомендованные ресурсы были доступны для новых и уже существующих подов. В зависимости от режима работы компонент Updater отправляет запрос компоненту Admission Controller на создание или обновление существующего пода. Режимы работы компонента Updater:
Off— выключен, работает только компонент Recommender. Рекомендации создаются, но не применяются ни к новым, ни к уже существующим подам.Recreate— работает в полном объеме. В режимеRecreateкомпонент Updater удаляет под, если запрашиваемые ресурсы этого пода не соответствуют тем, которые для него вычислил Recommender. После этого он отправляет компоненту Admission Controller запрос на повторное создание этого пода с рекомендованными значениями. Новые поды создаются сразу с рекомендованными значениями. Подробнее о работе в режимеRecreateв разделе Использование Vertical Pod Autoscaler.Initial— работает только для новых подов. Компонент Admission Controller обновляет запросы ресурсов согласно рекомендациям VPA только у новых подов, но не инициирует удаление, повторное создание или обновление ресурсов уже существующих подов.
-
Admission Controller: работает на этапе создания или обновления подов в зависимости от режима работы компонента Updater. Компонент Admission Controller применяет рекомендации VPA к новым подам при их создании, а также к уже запущенным подам, игнорируя значения, заданные вручную.