Архитектура сервиса

Обновлена 15 апреля 2024 г. в 08:50

Архитектура сервиса

В основе платформы VK Cloud лежит OpenStack. Архитектура сервиса Cloud Containers, опираясь на OpenStack, дает пользователям широкие возможности для работы, обеспечивает отказоустойчивость, масштабируемость и интеграцию с другими сервисами платформы.

Кластер Kubernetes состоит из двух типов узлов (nodes) — master-узлов и worker-узлов:

Master-узлы хранят информацию о состоянии всего кластера и управляют распределением рабочей нагрузки по worker-узлам.

Worker-узлы выполняют рабочую нагрузку (workload). Они могут быть организованы в группы worker-узлов. Для повышения отказоустойчивости разместите группы в разных зонах доступности.

Отказоустойчивость кластера зависит от количества master-узлов. Возможные конфигурации:

Кластер Cloud Containers с одним master-узлом.

Такой кластер не отказоустойчив: даже если worker-узлов несколько и они организованы в группы, при потере единственного master-узла кластер станет неработоспособен.

Кластер Cloud Containers из нечетного числа master-узлов (не менее трех).

Такой кластер отказоустойчив: при потере нескольких master-узлов он сохранит свою работоспособность, пока есть хотя бы один работающий master-узел. Дальнейший уровень отказоустойчивости зависит от числа и конфигурации групп worker-узлов.

Вне зависимости от выбранной топологии кластера master-узлы используют распределенное хранилище «ключ-значение» etcd для хранения информации о состоянии кластера:

Кластер с одним master-узлом имеет один экземпляр etcd.
В кластерах с несколькими master-узлами есть несколько экземпляров etcd, работающих в кластерном режиме для отказоустойчивости.
Под каждый экземпляр etcd выделен отдельный высокопроизводительный SSD-диск (High-IOPS). Это позволяет организовать максимально быстрое взаимодействие с API-эндпоинтом кластера при минимальных задержках.

Для отказоустойчивости на уровне worker-узлов рекомендуется создать несколько групп worker-узлов в разных зонах доступности и размещать реплики приложения на этих узлах так, чтобы реплики тоже были в разных зонах доступности.

На master- и worker-узлах используются следующие операционные системы:

CentOS (до версии Kubernetes 1.20).
AlmaLinux (начиная с версии Kubernetes 1.21). AlmaLinux является форком (fork) CentOS.

Кластер запускает контейнеры через Kubernetes Container Runtime Interface (CRI) с помощью CRI-O (начиная с версии Kubernetes 1.20).

Подробнее в разделе Доступные версии Kubernetes и политика поддержки версий.

Все взаимодействие с кластером происходит через Kubernetes API.

API-эндпоинт кластеров Cloud Containers размещен за отдельным балансировщиком нагрузки, поэтому доступ к API кластера можно получить по одному и тому же IP-адресу вне зависимости от количества master-узлов.

Интеграция с платформой VK Cloud осуществляется через стандартные интерфейсы Kubernetes:

Container Storage Interface (CSI) — интеграция с сервисами хранения данных.

Позволяет использовать в кластерах хранилище VK Cloud в виде постоянных томов (persistent volumes). Доступно использование Persistent Volume Claim (PVC).

Интеграция достигается с помощью OpenStack Cinder API. Подробнее в разделе Хранилище в кластере.

Container Network Interface (CNI) — интеграция с сетевыми сервисами.

В каждом кластере Cloud Containers присутствует плагин Calico, поддерживающий этот интерфейс. Этот плагин обеспечивает:

сетевую связность между контейнерами, подами и узлами кластера;
применение и соблюдение сетевых политик (Network Policies) Kubernetes.

Calico интегрируется с платформой VK Cloud с помощью OpenStack Neutron API. Подробнее в разделе Сеть в кластере.

Начиная с версии 1.21, в кластеры Cloud Containers встроен Open Policy Agent Gatekeeper. Он позволяет применять политики безопасности для ресурсов Kubernetes. Также в таких кластерах действуют политики безопасности по умолчанию.

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

Кластер Cloud Containers имеет встроенные возможности масштабирования master-узлов и worker-узлов.

В том числе поддерживается автоматическое масштабирование: если оно настроено, то в кластере автоматически регулируется количество worker-узлов в зависимости от потребностей рабочей нагрузки.