跳到主要内容

调度

1)NodeSelector:定向调度,当需要手动指定将Pod调度到特定Node上,可以通过Node的标签(Label)和Pod的nodeSelector属性相匹配; 2)NodeAffinity亲和性调度:亲和性调度机制极大的扩展了Pod的调度能力,目前有两种节点亲和力表达:硬规则,必须满足指定的规则,调度器才可以调度Pod至Node上(类似nodeSelector,语法不同);软规则,优先调度至满足的Node的节点,但不强求,多个优先级规则还可以设置权重值; 3)Taints和Tolerations(污点和容忍):Taint:使Node拒绝特定Pod运行;Toleration:为Pod的属性,表示Pod能容忍(运行)标注了Taint的Node;

4)资源限制调度(Resource Limit Scheduling):Kubernetes可以根据Pod对CPU、内存和其他资源的需求来进行调度。节点的资源使用情况会被监控,Pod将被调度到具有足够资源的节点上,以确保正常运行;

5)云提供商特定的调度方式:不同的云提供商可能提供特定的调度方式,用于优化资源利用或满足特定的业务需求。例如,AWS提供了Fargate调度器,可以将Pod调度到AWS Fargate服务器上,而无需管理底层的虚拟机实例。

亲和性:

nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: example.com/zone
operator: In
values:
- us-west

这个示例表示 Pod 希望被调度到带有标签 example.com/zone: us-west 的节点上。

podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- database
topologyKey: kubernetes.io/hostname

这个示例表示带有标签 app: database 的 Pod 应该被调度到与其他拥有相同 topologyKey(通常是节点主机名)的 Pod 所在的节点上。

Node Anti-Affinity(节点反亲和性)

nodeAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: example.com/zone
operator: In
values:
- us-east

这个示例表示 Pod 应尽量避免被调度到带有标签 example.com/zone: us-east 的节点上。

Pod Anti-Affinity(Pod反亲和性):指定一个 Pod 应该尽量避免被调度到与其他 Pod 具有特定标签的节点上

podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- frontend
topologyKey: kubernetes.io/hostname

这个示例表示带有标签 app: frontend 的 Pod 应该尽量避免被调度到与其他拥有相同 topologyKey(通常是节点主机名)的 Pod 所在的节点上。

  1. 污点(Taints): 污点是对节点的标记,用于表示节点的限制或特性。这些限制可以是例如:不希望在该节点上运行特定类型的 Pod,或者要求特定的条件才能在节点上调度 Pod。

添加污点:通过在节点上添加污点,管理员可以指定这些节点的特殊属性或限制。例如,可以给节点添加污点,要求节点上只能运行特定的 Pod。

示例:管理员可以添加一个污点,限制节点上的 Pod,如下:

kubectl taint nodes node1 key=value:NoSchedule 1 这将给名为 node1 的节点添加一个 key=value 的污点,并指定 NoSchedule。这表示只有那些有对应容忍设置的 Pod 才能在这个节点上被调度。

  1. 容忍(Tolerations): 容忍是指定 Pod 允许容忍的污点,即使节点被标记有特定的污点,也可以让特定的 Pod 在这些节点上调度。

为 Pod 添加容忍:通过在 Pod 的定义中添加 tolerations 字段,可以允许 Pod 在拥有特定污点的节点上运行。

示例:为 Pod 添加对特定污点的容忍设置,如下:

tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"

这个例子表示 Pod 具有对 key=value 污点的容忍,即使节点被标记为 NoSchedule,该 Pod 也能够被调度到该节点上。

污点和容忍的应用场景: 节点分离不同类型的工作负载:允许一些节点专门用于运行特定类型的工作负载,例如专用节点用于机器学习任务。

维护节点:暂时从节点中移除 Pod,使其可以进行维护工作。

这些机制允许管理员更加精细地控制集群中 Pod 的调度行为,以及哪些节点应该运行哪些类型的工作负载。