所以我不确定我是否错误地使用了这个功能,或者它是“反亲和”的限制,但我不知所措。我有一批要运行的作业,每个作业都有自己的节点。应该比较简单,加反亲和只运行hostname+label不存在的pod。尽管如此,我仍然在同一个节点上有多个 pod。
我现在最好的猜测是,因为我使用kubectl apply -f ./folder
命令一次创建所有作业,调度程序不会将处于“容器创建”状态的节点上的 pod 计数为反关联规则的触发器,并将另一个调度到节点。
每个作业都需要一个稍微不同的命令行,所以在 1.22 发布作业索引之前,我不能只使用一个具有并行规范的作业文件。
下面是工作 yaml,以防我遗漏了一些东西。
apiVersion: batch/v1
kind: Job
metadata:
name: testjob-$SHARD
spec:
backoffLimit: 1
template:
metadata:
labels:
run: testjob
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: run
operator: In
values:
- testjob
topologyKey: "kubernetes.io/hostname"
containers:
- name: testjob
imagePullPolicy: Always
image: image
resources:
requests:
memory: "3072Mi"
limits:
memory: "4Gi"
command: ["./foo"]
securityContext:
privileged: true
restartPolicy: OnFailure