我正在尝试运行Kubernetes作业,该作业将在每个主机上部署相同的pod,并在每个pod中运行相同的命令(相同的执行)。集群worker01、worker02、...、worker05中有5个工作进程。此定义在随机主机上调度一个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所有pods都应安装到相同的pvc。不确定什么是实现这一目标的最佳方法。守护程序集将不起作用,因为它们不提供restartPolicy: Never
发布于 2021-01-28 14:34:37
一个作业将被调度到一个随机节点,这是设计好的。要在每个节点中运行工作负载,请使用daemonset。
DaemonSet可确保所有(或部分)节点运行Pod的副本。当节点添加到集群中时,Pod也会添加到这些节点中。当节点从群集中删除时,这些Pod将被垃圾收集。删除DaemonSet会清理它创建的Pod。
发布于 2021-01-28 14:36:21
如果您希望为特定应用程序为每个节点调度一个pod,在Kubernetes中正确的方法是使用Daemonset。
DaemonSet可确保所有(或部分)节点运行Pod的副本。当节点添加到集群中时,Pod也会添加到这些节点中。当节点从群集中删除时,这些Pod将被垃圾收集。删除DaemonSet会清理它创建的Pod。
此外,如果您希望在不同的节点中调度每个pod,您可以查看pod anti-affinity概念。
发布于 2021-01-29 11:38:47
DaemonSets没有restartPolicy: Never,但是这个作业只需要运行一次。因此,一个简单的解决方案是使用jinja2模板:
{%- 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 %}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 -https://stackoverflow.com/questions/65932058
复制相似问题