Настройка параметров переносимых сервисов через ConfigMap

Лимиты и параметры развёртывания микросервисов из переносимых сервисов в модулях можно задавать с помощью ConfigMap — ресурса Kubernetes для работы с конфигурационными данными. Это позволяет:

  • ограничить выделяемые ресурсы;
  • определить количество экземпляров микросервисов, которые разворачиваются в Kubernetes;
  • включить их автомасштабирование;
  • настроить распределение подов микросервисов по узлам кластера;
  • передать секреты Kubernetes в переносимые сервисы.

Вы можете задать глобальные настройки для переносимых сервисов, созданных во всех модулях системы, а также указать индивидуальные настройки для определённого сервиса.

ConfigMap используется:

  • для тонкой настройки развёртывания микросервиса — можно задать значения параметров, недоступных при редактировании переносимого сервиса в модуле;
  • для изменения настроек без редактирования модуля — полезно для платных модулей. Например, можно задать количество экземпляров микросервиса, поскольку параметр в ConfigMap приоритетнее, чем значение, установленное разработчиком при создании модуля.

Настройка ConfigMap состоит из двух этапов:

  1. Включить использование ConfigMap.
  2. Задать параметры в ConfigMap.

Шаг 1. Включить использование ConfigMap

Чтобы для настройки переносимых сервисов применялся ConfigMap, нужно включить переменную окружения ELMA365_BABYSITTER_ENABLE_CONFIGMAP_WATCHER для сервиса babysitter. Для этого вносятся изменения в конфигурационный файл values-elma365.yaml:

  1. Создайте резервную копию файла values-elma365.yaml, заполненного при установке ELMA365. Это требуется перед редактированием, так как некорректная настройка параметров может привести к сбоям в работе приложения ELMA365.
  2. В конфигурационном файле values-elma365.yaml включите параметры:

global:
...
# Включение переносимых сервисов
   managedServices:
       enabled: true
...
# Использование ConfigMap
       watchableConfigMap:
         enabled: true

  1. Обновите приложение ELMA365 с помощью команды:

helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m

После этого автоматически создастся файл, в котором хранятся параметры ConfigMap. Он добавится в namespace, где размещаются переносимые сервисы, по умолчанию — elma365-applets. В файле преднастроен ConfigMap с именем elma365-babysitter-config. Для корректной работы рекомендуем не изменять заданное имя.

Теперь вы можете задать параметры в ConfigMap.

Чтобы вернуться к параметрам по умолчанию и начать настройку заново, удалите файл cfg.yaml и примените команду для его повторного создания:

kubectl apply -f cfg.yaml -n elma365-applets

Где elma365-appletsnamespace для размещения переносимых сервисов.

 

Шаг 2. Задать параметры в ConfigMap

  1. Откройте файл ConfigMap для редактирования, используя команду:

kubectl edit configmap elma365-babysitter-config -n elma365-applets

Где:

  • elma365-babysitter-config — название ConfigMap в файле cfg.yaml;
  • elma365-applets — namespace, в котором размещаются переносимые сервисы.
  1. В открывшемся файле задайте:
    • глобальные параметры — применяются по умолчанию к переносимым сервисам во всех модулях. Задаются в блоке global;
    • параметры для определённого сервиса — для их настройки добавьте блок с именем сервиса, сформированным по шаблону: {company}.ext_{id}.{unique_name}, где:
      • company — код компании ELMA365. Можно получить из её URL‑адреса;
      • id — идентификатор модуля, в котором настроен переносимый сервис. Можно скопировать из URL‑адреса модуля в ELMA365;
      • unique_name — уникальное имя переносимого сервиса из настроек модуля.

Обратите внимание, значения параметров из блока определённого переносимого сервиса имеют приоритет над значениями глобальных параметров. Если параметр на уровне переносимого сервиса не задан, используется значение из блока global.

Пример содержания ConfigMap

Доступные параметры:

  1. Ресурсы (resources):
    • requests — ресурсы памяти и CPU, которые нужно выделить для микросервиса;
    • limits — максимальные значения выделяемых ресурсов.

Подробнее о возможных значениях этих параметров читайте в официальной документации Kubernetes.

начало примера

Пример

resources:
  requests:
    memory: "512Mi"
    cpu: "500m"
  limits:
    memory: "2048Mi"
    cpu: "1000m"

конец примера

 

  1. Количество экземпляров (replicaCount) — сколько подов запустить для микросервиса. Доступные значения: 0–32к.

начало примера

Пример

replicaCount: 4

конец примера

  1. Автомасштабирование (autoscaling):
    • enabled — включает автомасштабирование;
    • minReplicas — минимальное количество экземпляров микросервиса. Доступные значения: 0–32к;
    • maxReplicas — максимальное количество экземпляров. Доступные значения: 0–32к;
    • targetMemoryUtilizationPercentage — желаемое использование памяти в процентах. Доступные значения: 0–100;
    • targetCPUUtilizationPercentage — желаемое использование ресурсов CPU в процентах. Доступные значения: 0–100.

начало примера

Пример

autoscaling:
  enabled: true
  minReplicas: 1
  maxReplicas: 9
  targetMemoryUtilizationPercentage: 80
  targetCPUUtilizationPercentage: 80

конец примера

  1. Выбор узлов для размещения подов (nodeSelector) — настройте размещение подов микросервисов на определённых узлах кластера с помощью специальных меток.

Подробнее об использовании параметра читайте в официальной документации Kubernetes.

начало примера

Пример

nodeSelector:
  role: elma365
  disk: ssd

конец примера

  1. Разрешения для размещения подов (tolerations) — установите для подов микросервисов разрешения (tolerations), чтобы они могли размещаться на узлах с соответствующими ограничениями (taints).

Подробнее об инструментах taints и tolerations читайте в официальной документации Kubernetes.

начало примера

Пример

tolerations:
  - effect: NoSchedule
    key: dedicated
    operator: Equal
    value: monitoring

конец примера

  1. Получение секретов Kubernetes (secretMappings) — если в переносимый сервис требуется передать чувствительную информацию, например строку подключения к базе данных, сначала сохраните такую информацию в секрете Kubernetes, а затем в параметре secretMappings задайте правило его получения. Подробнее читайте в статье «Передать секреты Kubernetes в переносимые сервисы через ConfigMap».
  1. После внесения изменений примените их с помощью команды с указанием namespace, в котором размещаются переносимые сервисы:

kubectl apply -f cfg.yaml -n elma365-applets

Параметры применятся автоматически, так как сервис babysitter отслеживает изменения в ConfigMap. Все микросервисы, для которых изменились настройки, перезапустятся.