Запустите kubernetes pod memory в зависимости от объема данных работы - PullRequest
0 голосов
/ 28 июня 2018

Есть ли способ динамически масштабировать объем памяти модуля Pod в зависимости от размера задания данных (мой вариант использования)?

В настоящее время у нас есть Job и Pod, которые определены с объемом памяти, но мы не знаем, насколько большими будут данные для данного отрезка времени (иногда 1000 строк, иногда 100 000 строк).
Так что он сломается, если данные будут больше, чем память, выделенная нами ранее.

Я думал об использовании срезов по объему данных, т. Е. При разрезании на каждые 10 000 строк, мы будем знать требования к памяти для обработки фиксированного количества строк. Но мы пытаемся агрегировать по времени, отсюда и потребность во временном интервале.

Или любые другие решения, такие как Spark на kubernetes?

Другой взгляд на это:
Как мы можем реализовать реализацию Cloud Dataflow в Kubernetes на AWS

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Рекомендуется всегда определять resources в вашем контейнере, в частности:

  • limits: верхний уровень процессора и памяти
  • requests: минимальный уровень процессора и памяти

Это позволяет планировщику принять лучшее решение и облегчает назначение Качество обслуживания (QoS) для каждого модуля (https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/), который подразделяется на три возможных класса:

  • Гарантировано (наивысший приоритет): когда запросы = ограничения
  • Burstable : когда запрашивает <пределы </em>
  • BestEffort (самый низкий приоритет): когда запросы и ограничения не установлены .

QoS включает критерий для уничтожения модулей, когда система перегружена.

0 голосов
/ 11 июля 2018

Если вы не знаете требования к памяти для вашего модуля a priori для заданного временного интервала, то для автоматического масштабирования Kubernete Cluster Autoscaler будет сложно автоматически масштабировать пул узлов в соответствии с этой документацией [1]. Поэтому оба ваших предложения, такие как запуск Cloud Dataflow или Spark в Kubernete с Kubernete Cluster Autoscaler, могут не сработать для вашего случая.

Однако вы можете использовать пользовательское масштабирование в качестве обходного пути. Например, вы можете экспортировать связанные с памятью показатели модуля в Stackdriver, а затем развернуть ресурс HorizontalPodAutoscaler (HPA), чтобы масштабировать приложение как [2].

[1] https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#how_cluster_autoscaler_works

[2] https://cloud.google.com/kubernetes-engine/docs/tutorials/custom-metrics-autoscaling

0 голосов
/ 02 июля 2018

Я нашел частичное решение для этого.
Обратите внимание, что есть 2 части этой проблемы.
1. Сделайте, чтобы Pod запросил правильный объем памяти в зависимости от размера задания данных
2. Убедитесь, что этот Pod может найти узел для запуска.

Кластер Kubernetes Autoscaler (CA) может решить часть 2.
https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler

Согласно readme:
Cluster Autoscaler - это инструмент, который автоматически настраивает размер кластера Kubernetes, когда в модуле не удалось запустить модули из-за недостатка ресурсов.

Таким образом, если существует задание с данными, которому требуется больше памяти, чем доступно в работающих в данный момент узлах, оно запустит новый узел, увеличив размер группы узлов.
Детали:
https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md

Я все еще не уверен, как выполнить пункт 1.

Альтернативой пункту 1 является запуск контейнера без специального запроса или ограничения памяти: https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#if-you-don-t-specify-a-memory-limit

Если вы не указали ограничение памяти для Контейнера, то один из них применяется ситуация:

The Container has no upper bound on the amount of memory it uses. 
or
The Container could use all of the memory available on the Node where it is running.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...