首页 文章

Kubernetes在目录中并行化多个样本

提问于
浏览
1

我能够在AKS上运行kubernetes工作(使用docker hub image处理生物样本,然后将输出上传到blob存储 - 这是通过我在yaml文件的args部分提供的bash命令完成的) . 但是,我有20个样本,并且想要启动20个节点,以便我可以并行处理样本(每个节点一个样本) . 如何将每个样本发送到不同的节点? yaml文件中的“parallelism”选项处理20个节点中每个节点上的所有20个样本,这不是我想要的 .

感谢您的帮助 .

2 回答

  • 1

    样品的存储方式/位置?您可以将它们(或指向实际样本的指针)加载到像Kafka这样的队列中,让应用程序检索每个样本一次,然后在计算后将其上传到blob . 然后,您甚至可以确保如果计算失败,另一个pod将拾取它并重新开始计算 .

  • 0

    如果您希望作业的每个实例都在不同的节点上,您可以使用daemonSet,这正是它所做的,为每个工作节点提供1个pod .

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: fluentd-elasticsearch
      namespace: kube-system
      labels:
        k8s-app: fluentd-logging
    spec:
      selector:
        matchLabels:
          name: fluentd-elasticsearch
      template:
        metadata:
          labels:
            name: fluentd-elasticsearch
        spec:
          tolerations:
          - key: node-role.kubernetes.io/master
            effect: NoSchedule
          containers:
          - name: fluentd-elasticsearch
            image: k8s.gcr.io/fluentd-elasticsearch:1.20
            resources:
              limits:
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
            volumeMounts:
            - name: varlog
              mountPath: /var/log
            - name: varlibdockercontainers
              mountPath: /var/lib/docker/containers
              readOnly: true
          terminationGracePeriodSeconds: 30
          volumes:
          - name: varlog
            hostPath:
              path: /var/log
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
    

    https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

    另一种方法 - 使用pod antiaffinity:

    affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - zk
              topologyKey: "kubernetes.io/hostname"
    

    requiredDuringSchedulingIgnoredDuringExecution字段告诉Kubernetes Scheduler它永远不应该在topologyKey定义的域中共同定位两个具有app标签为zk的Pod . topologyKey kubernetes.io/hostname表示域是单个节点 . 使用不同的规则,标签和选择器,您可以扩展此技术,以跨物理,网络和电源故障域传播整体

相关问题