首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

K8s scheduler 调度:NodeName、NodeSelector与Taint

1

前言

上篇介绍了k8s调度的预选和优选策略,K8s scheduler 调度:预选和优选策略。

本篇介绍三个影响pod调度的配置:NodeName、NodeSelector与Taint。

2

NodeName

NodeName是根据node的名称调度pod。可用于强制约束Pod跳过默认的Kubernetes调度规则,直接调度Pod到指定的Node节点上。参数Pod.spec.nodeName。

例如我们有3台k8s节点,其中249.11状态是notReady,我们将nginx的deploy设置nodeName:192-168-249-11。

尽管249.12节点是正常的,但是nginx pod仍然会调度到249.11。所以除了测试或开发期间,我们最好不要使用 nodeName。

3

NodeSelector

使用 nodeSelector 可以约束 Pod 在有特定标签的节点上运行,例如我们在249.11打上 A=a的标签

然后给nginx打上参数Pod.spec.nodeSelector:A:a。

这时由于249.11节点是notReady的,所以pod状态仍然为pending。通过kubectl describe pod可以查看pod的event信息。

这时候我们给249.12也打上 A=a的标签,那么nginx的pod就可以调度到249.12上了,状态也变成running。

4

污点taint

可以通过如下命令给node设置污点

如果设置NoSchedule的污点,则node上面的pod仍然会继续运行,只是新建的pod无法调度到 192-168-249-12上。

如果设置污点为NoExecute,则node上面运行的无法容忍node污点的pod将立即被驱逐。如下图,nginx pod在node打完污点后立即变成pending状态。

此时node上仍然是有nodeSelector的,说明taint污点的优先级高于nodeSelector。

我们可以通过如下在pod上设置tolerations的方式容忍node污点。

设置完tolerations容忍污点后可以发现,pod又可以调度到有污点的node上,状态为running。

点个赞

再走吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230519A05POY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券