В данном подразделе описывается архитектура модулей, входящих в подсистему Kubernetes & Scheduling платформы Deckhouse Kubernetes Platform (DKP).
В подсистему Kubernetes & Scheduling входят следующие модули:
В подразделе также описывается архитектура control plane и агента kubelet.
В Deckhouse Kubernetes Platform (DKP) используется стандартный («vanilla») кластер Kubernetes. Control plane кластера включает в себя следующие базовые компоненты:
1. kube-apiserver — API-сервер Kubernetes. Обрабатывает REST-запросы, предоставляет интерфейс доступа к общему состоянию кластера, через который взаимодействуют все остальные компоненты, валидирует ресурсы Kubernetes API и сохраняет их в хранилище etcd. Включает следующие контейнеры:
2. etcd — распределённое хранилище типа «ключ-значение», где хранится вся конфигурация и ресурсы Kubernetes-кластера.
3. kube-scheduler — планировщик Kubernetes. Анализирует ресурсы узлов и размещает поды с учетом ограничений и правил, таких как affinity и taints.
4. kube-controller-manager — диспетчер контроллеров Kubernetes. Запускает циклы контроллеров, которые отслеживают и корректируют состояние стандартных ресурсов Kubernetes, приводя их к желаемому состоянию. Примеры контроллеров, которые поставляются с Kubernetes: replication controller, endpoints controller, namespace controller и ServiceAccount controller.
Взаимодействие компонентов control plane Kubernetes изображено на схеме архитектуры модуля control-plane-manager.
Kubelet не является компонентом control plane, но играет ключевую роль в работе Kubernetes-кластера.
Kubelet — это агент, который работает на каждом узле Kubernetes-кластера. Он обеспечивает запуск контейнеров в подах и их работу в соответствии со спецификациями. Kubelet непрерывно взаимодействует с kube-apiserver, проверяя и поддерживая состояние узлов и контейнеров. Kubelet также отвечает за запуск компонентов control plane.
Взаимодействия kubelet изображены на схеме архитектуры модуля control-plane-manager.
Kubelet взаимодействует со следующими компонентами:
1. kubernetes-api-proxy — проксирует запросы к kube-apiserver, отправляемые на адрес localhost. Входит в состав модуля control-plane-manager.
2. kube-apiserver-healthcheck — проверяет состояние kube-apiserver.
C kubelet взаимодействуют следующие компоненты:
1. kube-apiserver:
2. prometheus-main — собирает метрики kubelet.
Управление компонентами control plane кластера осуществляется с помощью модуля control-plane-manager, который запускается на всех master-узлах кластера (узлах с лейблом node-role.kubernetes.io/control-plane: "").
Функции управления control plane:
- размещение подов приложений организации хранилища данных ближе к самим данным;
- приоритизация узлов в зависимости от их состояния (сетевой нагрузки, состояния подсистемы хранения и т. д.);
- разделение узлов на зоны, и т. п.
Для упрощения схемы приняты следующие допущения: На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой. Поды могут быть запущены в нескольких репликах. однако на схеме все поды изображены в одной реплике.
Архитектура модуля control-plane-manager на уровне 2 модели C4 и его взаимодействия с другими компонентами изображены на следующей диаграмме:
Модуль состоит из следующих компонентов:
1. d8-control-plane-manager (DaemonSet) — управляет компонентами control plane кластера и запускается на всех master-узлах. Состоит из следующих контейнеров:
2. kubernetes-api-proxy (статические поды) — на каждом master-узле настраивается дополнительный прокси-сервер, отвечающий на запросы к localhost. По умолчанию проксирует запросы к локальному экземпляру kube-apiserver, а в случае его недоступности последовательно опрашивает остальные экземпляры kube-apiserver. Включает в себя следующие контейнеры:
3. d8-etcd-backup (CronJob) — периодически выполняет резервное копирование базы данных etcd кластера. Состоит из контейнера:
Модуль взаимодействует со следующими компонентами:
1. kube-apiserver:
2. etcd:
С модулем взаимодействуют следующие внешние компоненты:
1. kubelet — запросы к kube-apiserver, отправляемые на адрес localhost, проксируются компонентом kubernetes-api-proxy модуля.
Мониторинг control plane кластера осуществляется с помощью модуля monitoring-kubernetes-control-plane, который обеспечивает безопасный сбор метрик и предоставляет базовый набор правил мониторинга следующих компонентов кластера:
Модуль состоит из одного компонента:
1. control-plane-proxy (DaemonSet) — запускается на всех master-узлах кластера и состоит из одного контейнера:
Control-plane-proxy взаимодействует со следующими компонентами:
1. kube-apiserver — авторизация запросов на получение метрик.
2. Компоненты control plane кластера — control-plane-proxy пересылает авторизованные запросы на метрики до:
С control-plane-proxy взаимодействует prometheus-main для сбора метрик компонентов control plane.
Взаимодействие модуля monitoring-kubernetes-control-plane с control plane кластера изображено на приведенной выше схеме архитектуры модуля control-plane-manager.
Метрики kube-apiserver собираются prometheus-main напрямую. Модуль monitoring-kubernetes-control-plane добавляет правила сбора этих метрик в конфигурацию prometheus-main.
VPA может работать в двух режимах:
Чтобы использовать режим InPlaceOrRecreate в Kubernetes до версии 1.33, включите экспериментальную функцию (feature gate) InPlacePodVerticalScaling в настройках модуля control-plane-manager.
При использовании VPA и включении соответствующего режима, запрашиваемые ресурсы устанавливаются автоматически на основе данных из Prometheus.
Перед использованием вертикального масштабирования (VPA) необходимо учитывать ряд ограничений:
- Обновление запрашиваемых ресурсов — экспериментальная функция, каждый раз при изменении ресурсов VPA пересоздаёт под, и он может быть назначен на другой узел;
- Поды могут пересоздаваться на других узлах.
- VPA не рекомендуется использовать совместно с HPA по CPU и памяти;
- VPA можно использовать с HPA с custom/external метриками.
При использовании VPA рекомендуется настроить Pod Disruption Budget.
VPA состоит из 3 компонентов:
При изменении ресурсов компонентом Updater это происходит с помощью Eviction API, поэтому учитываются Pod Disruption Budget для обновляемых подов.
Опишите вашу задачу, и мы поможем вам ее решить