目录
1. 如何将特定 Pod 调度到指定的节点?
可以使用下列方法中的任何一种来选择 K8s 对特定 Pod 的调度:
①
与节点标签匹配的 nodeSelector:
在 Pod 的规范中使用 nodeSelector 字段来指定节点标签,以便将 Pod 调度到具有特定标签的节点。例如,nodeSelector: { "disktype": "ssd" } 会将 Pod 调度到标签为 disktype=ssd 的节点。
②
亲和性与反亲和性:
-
节点亲和性 (Node Affinity):比 nodeSelector 更灵活,可以定义软性和硬性亲和规则。
例如,nodeAffinity 可以通过 requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution 来设置硬性和软性规则。
-
Pod 亲和性与反亲和性:定义 Pod 的调度规则以便它们能够与或避免与其他 Pod 一起运行。
例如,podAffinity 可以确保某个 Pod 和其他 Pod 在同一节点上,而 podAntiAffinity 则可以防止它们在同一节点上运行。
③ nodeName 字段:
在 Pod 的规范中直接指定 nodeName,将 Pod 调度到特定的节点。这个方法是硬编码的,因此不具备动态调度的灵活性。例如,nodeName: "node1" 会将 Pod 调度到名为 node1 的节点。
④ Pod 拓扑分布约束:
使用 topologySpreadConstraints 来控制 Pod 在集群中节点的分布,以实现高可用性或负载均衡。例如,可以指定每个节点上最多只能有一定数量的 Pod,以避免资源集中在少数节点上。
2. 什么是节点的亲和性?
-
节点亲和性(
Node Affinity)是 Pod
的一种属性,它使
Pod
被吸引到一类特定的节点(可能出于一种偏好,也可能是硬性要求)。
- 节点亲和性概念上类似于 nodeSelector,可以根据节点上的标签来约束 Pod 可以调度到哪些节点上。
3. 什么是污点,它的主要用途是什么?
- 与节点亲和性不同,
污点(
Taint)使得节点能够排斥一类特定的 Pod。
-
污点和容忍度相互配合,可以用来避免 Pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个污点,这意味着对于那些不能容忍这些污点的 Pod,是不会被该节点接受的。
- 容忍度(Toleration)是应用于 Pod 上的。
-
容忍度允许调度器调度带有对应污点的
Pod。
- 容忍度允许调度但并不保证调度:作为其功能的一部分,调度器也会评估其他参数。