我有一个jenkins吊舱,标签是app: jenkins-master
它驻留在jenkins命名空间中。
我希望部署的nginx吊舱(位于另一个名称空间,default上)与上面的吊舱并置。
因此,我在其规范中添加了以下内容:
spec:
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
namespaces:
- all
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- jenkins-master
topologyKey: "kubernetes.io/os"我有一个由8个节点组成的GKE集群。
在我创建/删除部署的5-6次中,nginx pod实际上从未将降落在与jenkins-master相同的节点上。
我知道这是preferred调度,但这种行为正常吗?
用"v1.15.9-gke.24"开发GKE
编辑1:我已经按照下面几个答案中的建议更改了topologyKey: "kubernetes.io/hostname",但这也没有多大帮助。
编辑2:这些是为调度jenkins-master pod的节点分配的资源
Resource Requests Limits
cpu 1691m (43%) 5013m (127%)
memory 4456Mi (33%) 8902Mi (66%)由于调度是基于请求的,所以我不明白下面的部署为什么不能配置,所以我提出的请求是最小的
resources:
limits:
memory: "1Gi"
cpu: "100m"
requests:
memory: "100Mi"
cpu: "50m"发布于 2020-04-28 14:39:15
我认为您在使用topologyKey: "kubernetes.io/os"时犯了错误,如果您在集群中混合操作系统(例如:混合Linux和Windows节点),就会使用它。
您应该使用:topologyKey: "kubernetes.io/hostname",其中Kubelet用主机名填充这个标签。
发布于 2020-04-28 18:37:09
我假设您知道,topology指的是在集群初始化时自动给节点的一些标签。
因此,topology将节点分组为一个节点(通过这些标签),所以当您说topologyKey: "kubernetes.io/os"时,您是说选择一个属于这个组的节点,并在其上安排结荚。因为您的所有节点都有相同的操作系统,所以对调度程序来说,它是一个可以运行的有效节点。所以,是的,这是故意的行为。
注意,这仍然是一个首选项,但是如果有足够的资源,它仍然会尝试在正确的节点上调度。
您要做的是建议您使用omricoco;topologyKey: "kubernetes.io/hostname"。您需要让调度程序组按主机名,这样每个组只有一个节点,而要调度的吊舱将位于同一个节点上。
https://stackoverflow.com/questions/61482159
复制相似问题