我有一个pod,它同时具有节点亲和性和pod亲和性。可以帮助我理解在这种情况下事情是如何表现的吗?
节点1:
label:
schedule-on : gpu节点2:
label:
schedule-on : gpu节点3:
label:
schedule-on : non-gpu清单
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/name: test
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app.kubernetes.io/name: test
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: schedule-on
operator: In
values:
- gpu
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- test
topologyKey: schedule-on上面的输出是:在不同的节点node1上调度Pods,node2
理想输出: Pod需要调度在同一节点node1上
这是我的发现。
发现1:我认为节点亲和性优先,而pod亲和性被忽略
发布于 2021-12-03 14:46:08
它是节点亲和性和pod亲和性的结合。因为两个pod具有相同的拓扑密钥域。因此,使它们处于相同的托管位置,可以在不同的节点中调度pod,但在相同的托管位置中。
匹配拓扑密钥并放置pod时。键的值也会被考虑。
发布于 2021-12-21 13:27:57
我想在你的回答中添加一些定义。
首先,来自this article
节点亲和性是一组规则。调度程序使用它来决定pod可以放置在群集中的哪个位置。使用节点上的标签和pods定义中指定的标签选择器来定义规则。节点亲和性允许pod指定对其可以调度到的一组节点的亲和性。
来自here
如果新pod上的标签选择器与当前pod上的标签匹配,则
Pod affinity可以告诉调度程序在与其他pod相同的节点上定位新pod。
在您的场景中:正如您所写的,两个pod具有相同的拓扑密钥域。这一事实使它们处于相同的托管位置,因此pods可以在不同的节点但在相同的托管位置中进行调度。
Here也是一些关于topologyKey的词
TopologyKey是节点标签的关键字。如果两个节点使用此键进行了标记,并且具有相同的标签值,则调度程序会将这两个节点视为处于同一拓扑中。调度器尝试在每个拓扑域中放置均衡数量的Pod。
https://stackoverflow.com/questions/70215961
复制相似问题