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。
- 容忍度允許調度但并不保證調度:作為其功能的一部分,調度器也會評估其他參數。