0

所以我不确定我是否错误地使用了这个功能,或者它是“反亲和”的限制,但我不知所措。我有一批要运行的作业,每个作业都有自己的节点。应该比较简单,加反亲和只运行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
4

1 回答 1

1

因此,作为一个在黑暗中拍摄的镜头,我将我的集群从 1.20 升级到了 1.21,它神奇地自我修复了。所以这可能只是一个 1.20 的问题。我在 kubernetes github 上有一个问题要调查,但我只能说,如果您使用的是 1.20 并且在 pod 级别的反关联性方面遇到问题,可以尝试升级。

于 2021-08-07T16:05:01.243 回答