首页 > 解决方案 > 在不同主机上使用复制容器安排作业

问题描述

我正在尝试运行一个 Kubernetes 作业,它将在每个主机上部署相同的 pod 并在每个 pod 中运行相同的命令(相同的执行)。集群中有 5 个工作人员worker01, worker02, ..., worker05。此定义在随机主机上安排一个 pod:

apiVersion: batch/v1
kind: Job
metadata:
  name: hdd-integrity
  labels:
    job: hdd-integrity
spec:
  template:
    spec:
      containers:
        - name: hdd-integrity
          image: some-image
          imagePullPolicy: IfNotPresent
          command: ["python", "check.py"]
          args:
            - "--threads=88"
            - "--md5=2a3f98b6eb50326cf69257c5c5fc7e35"
            - "--dir=/mnt"
          volumeMounts:
            - name: store
              mountPath: /mnt
      restartPolicy: Never
      volumes:
        - name: store
          persistentVolumeClaim:
            claimName: subgrp1-subvol1-pvc
            readOnly: false
  backoffLimit: 1

所有 pod 都应该挂载到同一个 pvc 上。不确定实现这一目标的最佳方法是什么。守护程序集将无法工作,因为它们不提供restartPolicy: Never

标签: kuberneteskubernetes-jobs

解决方案


如果您想为特定应用程序的每个节点安排一个 pod,在 Kubernetes 中这样做的正确方法是使用Daemonset

DaemonSet 确保所有(或部分)节点运行 Pod 的副本。随着节点被添加到集群中,Pod 也被添加到它们中。当从集群中删除节点时,这些 Pod 会被垃圾回收。删除 DaemonSet 将清理它创建的 Pod。

此外,如果您想将每个 pod 安排在不同的节点中,您可以查看pod 反亲和性概念。


推荐阅读