我无法真正理解pod亲和力中topologyKey的目的和用法。文件说:
TopologyKey是节点标签的键。如果两个节点都标有此键并且该标签具有相同的值,则调度程序会将这两个节点视为处于同一拓扑中。调度程序尝试将均衡数量的 Pod 放入每个拓扑域中。
示例用法如下:
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: topology.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: topology.kubernetes.io/zone
containers:
- name: with-pod-affinity
image: k8s.gcr.io/pause:2.0
Run Code Online (Sandbox Code Playgroud)
那么topology.kubernetes.io/zone从哪里来呢?我如何知道我应该在 yaml 文件中为这个TopologyKey字段提供什么值,以及如果我只是在此处放置一个随机字符串会发生什么?我应该标记我的节点并在topologyKey字段中使用该标签的键吗?
谢谢。
Dre*_*rew 21
作为affinity.podAffinity或affinity.podAntiAffinity 规范部分的一部分,topologyKey字段是必需的,调度程序使用topologyKey 字段来确定Pod 放置的域。
topologyKey域用于确定正在调度的 Pod 相对于...labelSelector.matchExpressions部分标识的 Pod 的相对位置。
使用podAffinity,Pod将被调度在与匹配表达式的 Pod 相同的域中。
两个常见的标签选项是topology.kubernetes.io/zone和kubernetes.io/hostname。其他内容可以在 Kubernetes知名标签、注释和污点文档中找到。
对于podAntiAffinity,情况正好相反:Pod不会被调度到与表达式匹配的 Pod 相同的域中。
Kubernetes 文档将 Pod 分配给节点文档(Pod 间亲和性和反亲和性部分)提供了额外的解释。
The*_*ool 11
拓扑键实际上只是您分配给节点或云提供商已分配的标签。
目的是指示某些拓扑特征,例如可用区域或服务器机架。但它们实际上是任意的。
它被记录在这里。
例如,您希望将 Pod 分布在 3 个不同的可用区中。拓扑密钥可以帮助您实现这一点,因为它可以防止它们被随机调度在同一区域中。
以下是文档中的 2 个示例:
例如,您可以使用 requiredDuringSchedulingIgnoredDuringExecution 亲和性来告诉调度程序将两个服务的 Pod 共同定位在同一云提供商区域中,因为它们彼此之间进行了大量通信。同样,您可以使用 PreferredDuringSchedulingIgnoredDuringExecution 反关联性将 Pod 从服务传播到多个云提供商区域。
| 归档时间: |
|
| 查看次数: |
15716 次 |
| 最近记录: |