Сборщик данных и толкатель данных в модуле или задании - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь записать блок обработки данных в kubernetes.

Для каждого блока процесса есть довольно похожий рабочий процесс:

  1. Извлечение данных из хранилища объектов и монтирование тома /input в контейнер
  2. Процессор запускает коддля обработки данных в томе и вывода данных в /output том
  3. Pusher отправляет данные в томе /output в хранилище объектов снова

Таким образом, у каждого модуля или задания должен быть контейнер какпушер данных и пулер данных, которые упоминаются в здесь общим объемом.Но как я могу сделать процесс как pull -> process -> push sequence?

Прямо сейчас я могу использовать способ обмена томами с общим доступом, чтобы заставить его работать: сначала я могу позволить пуллеру начать работать и дать процессору данных ждать, пока он не найдет созданный файл pull-законченный.txt.Затем пусть толкатель начнет работать, когда найдет созданный файл process-законченный.Но для этого может потребоваться заставить контейнер обработки данных ОТ какого-либо изображения или использовать какую-то конкретную точку входа, а это не то, что мне нужно.Есть ли более элегантный способ сделать эту работу?

1 Ответ

0 голосов
/ 12 июня 2018

Как уже упоминалось в комментариях Суреш Вишной и Яноша Ленарта , наилучшим подходом является использование Заданий для обработки данных из очереди или входного тома,и init-контейнеры для последовательных шагов по обработке данных.

Вот хороший пример использования init-контейнеров из документации Kubernetes:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

Еще один хорошийпример вы можете найти в ответе , предоставленном Janos Lenart

...