[CKA认证]Kubernetes Pod调度

2019年10月15日16:31:43 发表评论 96 views

介绍

Pod的调度在默认情况下是 Scheduler Controller 采用默认算法的全自动调度,在实际使用中并不满足我们的需求,因为并不能事先掌握pod被调度到哪个Node之上,所以kubernetes又提供了好几种方式让我们自已选择调度到什么Node中,比如有NodeSelector(定向调度)NodeAffinity(Node亲和性)PodAffinity(Pod亲和性)Taints

NodeSelector调度算法比较简单,NodeSelector 只调度到某个拥有特定标签的Node上,如果没有满足条件的Node,那么此Pod将不会被运行,即使在集群中还有可用Node列表,这就限制了它的使用场景,现在基本上被NodeAffinity取代了,NodeAffinity在NodeSelector的基础之上的进行了扩展,使调度更加灵活,除了有一个必须要满足条件的Node之外,还要可设置优先条件,下面来看下NodeAffinity的使用方式:

当前节点:

当前Pod:

1、nodeName

通过主机名指定pod调度到指定节点

2、nodeSelector

Kubernetes中常用label来管理集群的资源,nodeSelector可通过标签实现pod调度到指定节点上。

举列:使用 nodeSelector 将 pod 调度到 k8s-node2 节点上

Step1:给k8s-node2打标签

Step2:nodeSelector设置对应标签

3、nodeAffinity

node 节点 Affinity ,从字面上很容易理解nodeAffinity就是节点亲和性,Anti-Affinity也就是反亲和性。节点亲和性就是控制pod是否调度到指定节点,相对nodeSelector来说更为灵活,可以实现一些简单的逻辑组合。

场景1:必须部署到有test=nginx(k8s-node2)标签的节点

场景2:最好部署到有test=nginx(k8s-node2)标签的节点

场景3:不能部署在k8s-node2节点

Kubernetes中的operator提供了下面几种过滤条件:

3、podAffinity

nodeSelector 和 nodeAffinity 都是控制 pod 调度到节点的操作,在实际项目部署场景中,希望根据服务与服务之间的关系进行调度,也就是根据 pod 之间的关系进行调度,比如同一个项目的前后端,希望可以在同一个节点上,Kubernetes的podAffinity就可以实现这样的场景,podAffinity的调度策略和nodeAffinity类似也有:

场景:希望新建的pod-affinity 与 node-affinity运行在同一个节点上

4、podAntiAffinity

Pod反亲和性

场景:希望新建的pod-affinity 与 node-affinity运行在不同节点

5、Taints & tolerations

Taints:污点,

tolerations:容忍

在实际项目实践中有时候不希望某些服务调度到指定节点上,比如带GPU节点只运行带GPU需求的组件,其他不需要GPU服务不希望调度到GPU上。这种场景只需要在GPU节点设置一个污点。

场景1:k8s-node1不带GPU,k8s-node2带GPU,希望Pod可以调度到带GPU的节点

Step1:给k8s-node1节点打污点

Step2:指定Pod创建时指定去 GPU 值为 "yes" 的节点

Step3:删除污点并更改 GPU 为 yes

设置了污点怎么调度?

如果设置了污点还是希望某些pod能够调度上去,可以给pod针对污点加容忍

  • 微信小程序
  • 关注微信小程序
  • weinxin
  • 微信公众号
  • 关注微信公众号
  • weinxin
Honest1y

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: