Можно ли монтировать разные тома на модули одного и того же развертывания? - PullRequest
0 голосов
/ 04 января 2019

У меня есть кластер gce airflow (composer) с кучей рабочих:

$ kubectl get pods
NAME                                 READY     STATUS    RESTARTS   AGE
airflow-redis-0                      1/1       Running   0          7h
airflow-scheduler                    2/2       Running   0          7h
airflow-sqlproxy                     1/1       Running   0          8h
airflow-worker                       50/50     Running   0          7h
composer-fluentd-daemon              1/1       Running   0          7h
composer-fluentd-daemon              1/1       Running   0          7h

У меня также есть куча уникальных постоянных томов NFS, в которых есть данные, требующие обработки.Существует ли способ динамического монтирования разных томов NFS для каждого из соответствующих рабочих.

В качестве альтернативы, возможно ли, чтобы DockerOperator, вызываемый внутри работника, монтировал том NFS, относящийся к его конкретной рабочей нагрузке.

Теоретически рабочий процесс будет выглядеть следующим образом: Spin up 1x worker per Dataset> Get Dataset> Run Dataset through Model> Dump results

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

В конечном итоге мы планируем поместить все эти данные в BigTable, но мне нужно продемонстрировать концепцию с использованием томовс несколькими сотнями гигабайт данных, прежде чем мы получим зеленый свет, чтобы раскрутить кластер BigTable с несколькими ТБ данных в нем.

Вклад приветствуется.Сказать мне, что я делаю это неправильно с лучшим решением, также является жизнеспособным ответом.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Рабочий процесс, который вы описываете, лучше соответствует модели Job , чем простой (длительный) Pod.Вам нужно будет создать отдельную спецификацию задания для каждой задачи, указывающей на соответствующие данные, и, если ваш кластер выполняет другую работу, вам нужно позаботиться о том, чтобы ваши модули массовой обработки данных не перегружали доступные вычислительные ресурсы.

У вас есть отдельные тома NFS (имена серверов / экспортированные каталоги) или просто много файловых деревьев в одном томе NFS?Если последнее, другой путь, который мог бы работать для вас, - это настроить систему очередей, такую ​​как RabbitMQ , и загрузить все пути в очередь там.Затем вы должны написать длительный процесс, который последовательно считывает из очереди один элемент, выполняет с ним все необходимые операции, записывает его результат, фиксирует рабочий элемент и повторяет его (в одном потоке).Затем вы масштабируете это с помощью Deployment до желаемого количества параллельной обработки.

В любом случае, ваш вывод предполагает, что вы работаете напрямую с пустыми модулями и пытались масштабировать рабочих, имея много параллельныхрабочие контейнеры в одной капсуле.Лучше использовать один из контроллеров более высокого уровня (чаще всего Deployment ) и использовать элемент управления replicas: для запуска нескольких копий описанного модуля.Помимо прочего, это позволит вам распределить нагрузку по нескольким узлам и позволит выполнить непрерывное обновление, при котором модули будут перезапускаться постепенно, избегая сбоев, если вы измените базовое изображение или другие детали модуля.

0 голосов
/ 04 января 2019

Развертывание по определению использует набор идентичных реплик в качестве модулей (т. Е. ReplicaSet).Поэтому все модули развертывания будут иметь PodSpec, указывающий на один и тот же том.

Звучит так, будто вам нужно самостоятельно написать какую-то собственную логику для организации запуска новых рабочих нагрузок (например, заданий) с разными томами.

Вы можете сделать это, просто развернув bash-скрипт, который вызывает kubectl (по умолчанию kubectl внутри модуля может работать напрямую) в цикле.Или вы можете написать что-то, что использует Kubernetes API и выполняет некоторые вызовы API, чтобы обнаружить новые тома, создать рабочие нагрузки для их обработки (а затем, возможно, очистить тома).

...