Кубернетес со множеством рабочих мест - PullRequest
0 голосов
/ 01 октября 2019

Новичок в kubernetes. Я пытаюсь переместить текущий конвейер, который у нас есть, используя систему очередей без k8s.

У меня есть скрипт perl, который генерирует список пакетных заданий (yml-файлов) для каждого изобразцы, которые я должен обработать. Затем я запускаю kubectl apply --recursive -f 16S_jobscripts/

Например, каждый образец должен обрабатываться последовательно и проходить различную обработку

Пример:

SampleA -> clean -> quality -> some_calculation

SampleB -> clean -> quality -> some_calculation

и т. Д. Для 300 выборок.

Поэтому идея состоит в том, чтобы подготовить все файлы yml и запустить их последовательно. Это работает.

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

Каков наилучший подход в таком случае, запустить каждый образец независимо ?? how?

В приведенном ниже yml описан один образец для одной работы. Вы можете видеть, что я использую счетчик (mergereads-1 для sample1 (A))

apiVersion: batch/v1
kind: Job
metadata:
  name: merge-reads-1
  namespace: namespace-id-16s
  labels:
    jobgroup: mergereads
spec:
  template:
    metadata:
      name: mergereads-1
      labels:
        jobgroup: mergereads
    spec:
      containers:
        - name: mergereads-$idx
          image: .../bbmap:latest
          command: ['sh', '-c']
          args: ['
          cd workdir &&

          bbmerge.sh -Xmx1200m in1=files/trimmed/1.R1.trimmed.fq.gz in2=files/trimmed/1.R2.trimmed.fq.gz  out=files/mergedpairs/1.merged.fq.gz  merge=t mininsert=300 qtrim2=t minq=27 ratiomode=t &&
          ls files/mergedpairs/ 
          ']

          resources:
            limits:
              cpu: 1
              memory: 2000Mi
            requests:
              cpu: 0.8
              memory: 1500Mi
          volumeMounts:
            - mountPath: '/workdir'
              name: db
      volumes:
        - name: db
          persistentVolumeClaim:
            claimName: workdir
      restartPolicy: Never

1 Ответ

1 голос
/ 02 октября 2019

Если я вас правильно понимаю, вы можете использовать параллельные задания с использованием шаблонов заданий .

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

Также вы можете рассмотреть возможность использования Argo. https://github.com/argoproj/argo

Argo Workflows - это собственный рабочий процесс контейнера с открытым исходным кодом для организации параллельных заданий в Kubernetes. Рабочие процессы Argo реализованы в виде пользовательского определения ресурса Kubernetes CRD.

Пожалуйста, дайте мне знать, если это поможет.

...