Kubernetes 在库伯内特斯,首选的豆荚间亲缘关系从未受到尊重
我有一个Kubernetes 在库伯内特斯,首选的豆荚间亲缘关系从未受到尊重,kubernetes,Kubernetes,我有一个jenkinspod,标签是app:jenkins master 这驻留在jenkins名称空间中 我希望部署的nginxpod(在另一个命名空间上,default)与上述pod并置 因此,我在其规范中添加了以下内容: spec: affinity: podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm:
jenkins
pod,标签是app:jenkins master
这驻留在jenkins
名称空间中
我希望部署的nginx
pod(在另一个命名空间上,default
)与上述pod并置
因此,我在其规范中添加了以下内容:
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
降落在同一个节点上
我知道这是首选的计划,但这种行为正常吗
使用v1.15.9-GKE.24“
编辑1:我已经更改了拓扑:“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"
我认为您使用了topologyKey:“kubernetes.io/os”
是一个错误,如果您在集群中混合使用操作系统(例如:混合Linux和Windows节点),则会使用该选项
您应该使用:topologyKey:“kubernetes.io/hostname”
,其中Kubelet用主机名填充此标签。我认为您在使用topologyKey:“kubernetes.io/os”
时犯了一个错误,如果您在集群中混合使用操作系统(例如:混合Linux和Windows节点)
您应该使用:topologyKey:“kubernetes.io/hostname”
,其中Kubelet用主机名填充此标签。我假设您知道拓扑
指的是在集群初始化时自动提供给节点的一些标签
因此,topology
将节点分组为一个节点(通过这些标签),因此当您说topologyKey:“kubernetes.io/os”
时,您是说选择属于该组的节点,并在其上安排pod。因为您的所有节点可能都有相同的操作系统,所以对于您的调度程序来说,它是一个可以运行的有效节点。所以,是的,这是故意的行为
请注意,这仍然是一个首选项,但如果有足够的资源,它仍将尝试在正确的节点上进行调度
你要做的是什么是建议omricoco<代码>拓扑键:“kubernetes.io/hostname”
。您需要让调度程序按主机名分组,因此每个组只有1个节点,并且要调度的pod将位于同一节点上 我假设您知道,拓扑
指的是在集群初始化时自动为节点提供的一些标签
因此,topology
将节点分组为一个节点(通过这些标签),因此当您说topologyKey:“kubernetes.io/os”
时,您是说选择属于该组的节点,并在其上安排pod。因为您的所有节点可能都有相同的操作系统,所以对于您的调度程序来说,它是一个可以运行的有效节点。所以,是的,这是故意的行为
请注意,这仍然是一个首选项,但如果有足够的资源,它仍将尝试在正确的节点上进行调度
你要做的是什么是建议omricoco<代码>拓扑键:“kubernetes.io/hostname”。您需要让调度程序按主机名分组,因此每个组只有1个节点,并且要调度的pod将位于同一节点上 我的问题是:即使有多个节点匹配
topologyKey:“kubernetes.io/os”
约束,为什么满足标签匹配条件的节点不占上风?顺便说一句,更改为topologyKey:“kubernetes.io/hostname”
并不能帮助您的节点拥有相同的标签,所以他们都很满意。你说没有帮助是什么意思?有房间,但没有安排在那里?然后设置一个要求。我的问题如下:即使有多个节点匹配topologyKey:“kubernetes.io/os”
约束,为什么满足标签匹配条件的节点不占上风?顺便说一句,更改为topologyKey:“kubernetes.io/hostname”
并不能帮助您的节点拥有相同的标签,所以他们都很满意。你说没有帮助是什么意思?有房间,但没有安排在那里?然后设置一个需求。当您从preferred
更改为required
时,是否也会发生同样的情况?根据设计,调度器应尽可能在同一节点上部署带有拓扑的POD:“kubernetes.io/hostname”。当您从prefered
更改为required
时,是否也会发生同样的情况?根据设计,调度器应尽可能在同一节点上部署带有拓扑的POD:“kubernetes.io/hostname”。