Kubernetes 集群 Pod 调度与故障排查指南
1. Pod 拓扑:亲和性与反亲和性
Pod 拓扑指的是每个 Pod 被放置到哪个物理节点上。默认情况下,Kubernetes 会将 Pod 调度到任何能容纳它的地方,不会询问用户希望将其放置在哪里。不过,虽然对 Pod 拓扑进行微观管理不是好做法,但很多时候用户至少会对 Pod 的放置有一些偏好。例如,不希望一个服务中的所有 Pod 都被调度到同一个节点上,因为这样整个服务会受该节点故障的影响。
Pod 拓扑的两个基本概念是 Pod 亲和性和反亲和性。Pod 亲和性告诉 Kubernetes 某个特定 Pod 应该靠近哪些其他 Pod,而 Pod 反亲和性则告诉 Kubernetes 某个特定 Pod 不应该靠近哪些 Pod。要靠近(或不靠近)的 Pod 列表由标准标签选择器定义。“靠近”的判定标准是节点上的标签是否相等,这被称为拓扑键(topologyKey)。一个常见且支持良好的拓扑键是 kubernetes.io/hostname ,它应设置为节点的名称。
需要注意的是,可以要求强制执行这些规则(而不是通过权重来偏好设置),但这意味着如果 Kubernetes 无法满足要求,Pod 将不会被调度。
2. 节点污点和封锁
Kubernetes 有污点(taints)和容忍度(tolerations)系统,用于优先允许或禁止 Pod 在节点上运行。与基于节点上运行的其他 Pod 的亲和性不同,污点更为直接。它对于让 DaemonSet 做出例外情况也很有用,这样它们就不会在每个节点上运行。不过,Kubernetes 的完整污点系统超出了本文范围,这
超级会员免费看
订阅专栏 解锁全文
7万+

被折叠的 条评论
为什么被折叠?



