具有多个作业计数器的 kubernetes

kubernetes with multiple jobs counter

我是 kubernetes 的新手,我正在尝试移动我们使用没有 k8s 的排队系统的当前管道。

我有一个 perl 脚本,它为我必须处理的每个样本生成一个批处理作业列表(yml 文件)。 然后我运行kubectl apply --recursive -f 16S_jobscripts/

比如每个样本需要按顺序处理,经过不同的处理

示例:

样品 A -> 清洁 -> 质量 -> some_calculation

样品 B -> 清洁 -> 质量 -> some_calculation

依此类推 300 个样本。

所以我们的想法是准备所有的 yml 文件并 运行 按顺序。这是有效的。

但是,使用这种方法我需要等待所有样本都被处理(假设所有清洁工作需要在我 运行 下一个工作质量之前完成)。

在这种情况下最好的方法是什么,运行 每个样本都是独立的??怎么样?

下面的 yml 描述了一项工作的一个样本。你可以看到我正在使用一个计数器 (mergereads-1 for 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

如果我理解正确,你可以使用 parallel-jobs with a use of Job Patterns

It does support parallel processing of a set of independent but related work items.

也可以考虑使用Argo。 https://github.com/argoproj/argo

Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition).

如果有帮助,请告诉我。