我能够在AKS上运行kubernetes工作(使用docker hub image处理生物样本,然后将输出上传到blob存储 - 这是通过我在yaml文件的args部分提供的bash命令完成的) . 但是,我有20个样本,并且想要启动20个节点,以便我可以并行处理样本(每个节点一个样本) . 如何将每个样本发送到不同的节点? yaml文件中的“parallelism”选项处理20个节点中每个节点上的所有20个样本,这不是我想要的 .
感谢您的帮助 .
样品的存储方式/位置?您可以将它们(或指向实际样本的指针)加载到像Kafka这样的队列中,让应用程序检索每个样本一次,然后在计算后将其上传到blob . 然后,您甚至可以确保如果计算失败,另一个pod将拾取它并重新开始计算 .
如果您希望作业的每个实例都在不同的节点上,您可以使用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表示域是单个节点 . 使用不同的规则,标签和选择器,您可以扩展此技术,以跨物理,网络和电源故障域传播整体
2 回答
样品的存储方式/位置?您可以将它们(或指向实际样本的指针)加载到像Kafka这样的队列中,让应用程序检索每个样本一次,然后在计算后将其上传到blob . 然后,您甚至可以确保如果计算失败,另一个pod将拾取它并重新开始计算 .
如果您希望作业的每个实例都在不同的节点上,您可以使用daemonSet,这正是它所做的,为每个工作节点提供1个pod .
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
另一种方法 - 使用pod antiaffinity:
requiredDuringSchedulingIgnoredDuringExecution字段告诉Kubernetes Scheduler它永远不应该在topologyKey定义的域中共同定位两个具有app标签为zk的Pod . topologyKey kubernetes.io/hostname表示域是单个节点 . 使用不同的规则,标签和选择器,您可以扩展此技术,以跨物理,网络和电源故障域传播整体