Распределённая сервисная архитектура позволяет масштабировать решение более гибко и запускать сервисы приложения в несколько экземпляров. Обмен информацией между сервисами происходит по протоколу gRPC. Балансировку и шифрование gRPC трафика при масштабировании сервисов ELMA365 выполняет компонент дополнений Linkerd. HorizontalPodAutoscaler используется для автомасштабирования сервисов приложения ELMA365. Вы также можете включить поддержку дополнительного средства автомасштабирования KEDA, управляемого на основе событий.
Процесс включения автомасштабирования для приложения ELMA365 состоит из пяти этапов:
- Подготовка Service Mesh.
- Внесение изменений в конфигурационный файл.
- Применение параметров автомасштабирования для ELMA365 Enterprise.
- Включение перераспределения нагрузки в Kubernetes-кластере (опционально).
- Включение кэширования DNS-запросов в Kubernetes-кластере (опционально).
Шаг 1: Подготовка Service Mesh
В качестве Service Mesh для ELMA365 используется Linkerd. Этот компонент нужен для обеспечения сетевой связанности приложения ELMA365. Без установленного Service Mesh Linkerd балансировка трафика микросервисов недоступна.
Подробнее о настройке и установке Service Mesh Linkerd читайте в статье «Установка Linkerd».
- В рамках статьи приложение ELMA365 установлено в
namespace: elma365
. Добавьте аннотацию наnamespace
с приложением ELMA365 для автоматической инъекции контейнеров Linkerd-proxy в сервисы ELMA365 командой:
kubectl annotate namespace elma365 linkerd.io/inject=enabled
- Перезапустите все сервисы приложения ELMA365 командой:
kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]
Шаг 2: Внесение изменений в конфигурационный файл values-elma365.yaml
Начало внимание
Внесение изменений происходит в уже существующий конфигурационный файл values-elma365.yaml
, который был получен и заполнен при установке ELMA365. Необдуманное изменение параметров в этом файле может привести к потере работоспособности приложения ELMA365. Перед внесением изменений в файл values-elma365.yaml
рекомендуем создать его резервную копию.
Конец внимание
- Заполните конфигурационный файл
values-elma365.yaml
для включения автомасштабирования.
Чтобы включить поддержку автомасштабирования, укажите true
в параметре global.autoscaling.enabled
. Задайте в этом параметре нужный инструмент автомасштабирования:
- hpa — Horizontal Pod Autoscaler. Используется по умолчанию. При увеличении нагрузки развёртывается больше экземпляров модулей приложения. Чтобы включить этот инструмент, не требуется настройка дополнительных компонентов;
- keda — Kubernetes Event-driven Autoscaling. Дополнительное средство автомасштабирования, управляемое событиями. С помощью KEDA вы можете управлять масштабированием в зависимости от нагрузки и от количества событий, которые необходимо обработать. Чтобы включить этот инструмент, предварительно установите и настройте модуль дополнений KEDA.
- Задайте минимальное и максимальное количество реплик сервисов приложения ELMA365. Глобально для всех сервисов значения устанавливаются в параметрах
global.autoscaling.minReplicas
иglobal.autoscaling.maxReplicas
.
global:
...
## автомасштабирование сервисов
autoscaling:
enabled: true
## выбор метода автомасштабирования
type: "hpa"
## минимальное и максимальное количество реплик
minReplicas: 1
maxReplicas: 9
...
Вы также можете задать индивидуальные параметры репликации для каждого сервиса.
Шаг 3: Применение параметров автомасштабирования для ELMA365 Enterprise
Выполните обновление параметров приложения ELMA365 с использованием конфигурационного файла values-elma365.yaml
. Обновление параметров занимает 10-30 минут. Дождитесь обновления параметров приложения ELMA365 Enterprise.
Начало внимание
При выполнении обновления параметров нужно:
- Определить версию чарта, с помощью которого было установлено или обновлено приложение ELMA365.
- Использовать ту же версию чарта для применения новых параметров, чтобы исключить побочное влияние обновления на работоспособность приложения.
Конец внимание
Для обновления через интернет
- Определите версию чарта, с помощью которого было установлено приложение ELMA365:
helm show chart elma365/elma365
Пример выполнения команды:
В строке version
указана версия чарта, с помощью которого было установлено приложение ELMA365. Далее это значение необходимо указать для флага --version
(подставить вместо <elma365-chart-version>
).
- Обновите параметры с указанием установленной версии приложения ELMA365 и использованием конфигурационного файла
values-elma365.yaml
:
helm upgrade --install elma365 elma365/elma365 -f values-elma365.yaml --version <elma365-chart-version> --timeout=30m --wait [-n namespace]
Для офлайн-обновления без доступа в интернет
Перейдите в каталог с загруженным чартом ELMA365 и выполните команду:
helm upgrade --install elma365 ./elma365 -f values-elma365.yaml --timeout=30m --wait [-n namespace]
Шаг 4: Включение перераспределения нагрузки в Kubernetes-кластере (опционально)
Descheduler используется для перебалансировки кластеров путём вытеснения подов, которые потенциально могут быть запущены на более подходящих узлах.
Начало внимание
Если в Вашем Kubernetes-кластере три и более ноды, рекомендуется установить компонент дополнения Descheduler.
Конец внимание
Пример работы Descheduler:
В Kubernetes-кластере из-за проблем с электропитанием стала недоступна одна из нод. Все сервисы приложения ELMA365, которые размещались на недоступной ноде, запустятся на оставшихся в работе нодах. После устранения проблем с электропитанием, нода вернётся в кластер, но сервисы приложения ELMA365 продолжат работу на других нодах. Descheduler периодически проверяет размещение подов в кластере Kubernetes. Descheduler перераспределит поды между нодами Kubernetes-кластера, используя набор преднастроенных стратегий. Перераспределение подов приведёт к выравниванию нагрузки на нодах кластера.
Подробнее о настройке и установке Descheduler читайте в статье «Установка Descheduler».
Шаг 5: Включение кеширования DNS-запросов в Kubernetes-кластере (опционально)
NodeLocal DNS Cache позволяет снизить нагрузку по DNS-запросам в кластере Kubernetes. NodeLocal DNS позволяет повысить стабильность преобразования DNS имён, что в свою очередь позволит избежать правил DNAT, connection tracking и ограничений по количеству соединений.
Начало внимание
Если в Вашем Kubernetes-кластере более одной ноды, рекомендуется установить компонент дополнения NodeLocal DNS Cache.
Конец внимание
Подробнее о настройке и установке NodeLocal DNS Cache читайте в статье «Установка NodeLocal DNS Cache».