首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不同主机上的复制容器调度作业

使用不同主机上的复制容器调度作业
EN

Stack Overflow用户
提问于 2021-01-28 14:29:39
回答 3查看 57关注 0票数 0

我正在尝试运行Kubernetes作业,该作业将在每个主机上部署相同的pod,并在每个pod中运行相同的命令(相同的执行)。集群worker01worker02、...、worker05中有5个工作进程。此定义在随机主机上调度一个pod:

代码语言:javascript
复制
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

所有pods都应安装到相同的pvc。不确定什么是实现这一目标的最佳方法。守护程序集将不起作用,因为它们不提供restartPolicy: Never

EN

回答 3

Stack Overflow用户

发布于 2021-01-28 14:34:37

一个作业将被调度到一个随机节点,这是设计好的。要在每个节点中运行工作负载,请使用daemonset

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

票数 1
EN

Stack Overflow用户

发布于 2021-01-28 14:36:21

如果您希望为特定应用程序为每个节点调度一个pod,在Kubernetes中正确的方法是使用Daemonset

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

此外,如果您希望在不同的节点中调度每个pod,您可以查看pod anti-affinity概念。

票数 1
EN

Stack Overflow用户

发布于 2021-01-29 11:38:47

DaemonSets没有restartPolicy: Never,但是这个作业只需要运行一次。因此,一个简单的解决方案是使用jinja2模板:

代码语言:javascript
复制
{%- set workers = ["worker01", "worker02", "worker03", "worker04", "worker05"]
%}
{%- for w in workers %}
{%- set worker = w %}
---
apiVersion: batch/v1
kind: Job
metadata:
  name: hdd-integrity-job-{{ worker }}
  labels:
    job: hdd-integrity
    tag: "0.0.6"
spec:
  template:
    spec:
      containers:
        - name: hdd-integrity
          image: my-image
          imagePullPolicy: IfNotPresent
          command: ["/bin/bash", "-c", "--"]
          args:
            - "time python check.py --threads=3"
          volumeMounts:
            - name: cephfs-store
              mountPath: /mnt
      nodeSelector:
        node: {{ worker }}
      restartPolicy: Never
      volumes:
        - name: cephfs-store
          persistentVolumeClaim:
            claimName: subgrp1-subvol1-pvc
            readOnly: false
  backoffLimit: 0
{%- endfor %}
代码语言:javascript
复制
pip install jinja2  
alias render_template='python -c "from jinja2 import Template; import sys; print(Template(sys.stdin.read()).render());"' 
cat hdd-integrity.yaml.j2 | render_template | kubectl apply -f -
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65932058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档