文章都可以转载、引用,标明转载出处即可。

kubernetes污点

Kubernetes Mr.c 140℃ 0评论

  K8S集群node节点打标签(labels)可以将pod调度至指定的node节点上,这个很容易理解,关键在于特定场景,比如该node节点是测试环境专用,或者是GPU机器,单纯的打标签这种方式在该节点资源充足的情况下,其他pod还是会被调度到该节点。

这里就需要采用污点(taint)的方式实现。
  污点(taint)是设置到节点上的,同时设置了污点后需要在对应的pod设置容忍度(toleration),才能将指定的pod调度到该污点,且不让其他pod调度到该污点。
先查看下通过kubeadm或者云厂商开通的K8S在master上标记的污点信息:

[root@k8s-master-1 ~]#  kubectl describe node k8s-master-1 | grep Taints
Taints:             node-role.kubernetes.io/master:NoSchedule

可以看到该节点上有污点node-role.kubernetes.io/master:NoSchedule
这里的格式是<key>=<value>:污点类型
污点类型有以下几种:

NoSchedule: 
  属于强制约束;
  不能容忍该污点的新pod不能调度到当前节点;
  该节点上现有pod不受影响。
PreferNoSchedule: 
  属于柔性约束;
  不能容忍该污点的新pod尽量不要调度过来,若无其他节点可调度,也可以调度过来;
  该节点上现有pod不受影响。
NoExecute:
  属于强制约束;
  不能容忍该污点的新pod不能调度到当前节点;
  该节点上现存pod若不满足容忍条件将被驱逐。

这里给node节点加上一个污点标签,定义key为node-type 值为gpu,类型为NoSchedule:

kubectl taint nodes k8s-worker-3  node-type=gpu:NoSchedule

接下来在yam文件中定义容忍度toleration 将该pod调度到node节点

pod容忍度通过spec.tolerations字段添加

tolerations:
  - effect: NoSchedule
    key: node-type
    operator: Equal
    value: gpu

其中effect、key、value的值与node上污点一致;
operator:
  Equal 代表key和value之前关系是等于;
  Exists 代表value的值可以省略;
  默认Equal。

  通过污点的方式就可以实现仅让满足需求的pod调度到指定节点,而其他pod无法被调度到该节点,实现node节点专属某一类pod。

删除污点

删除单个键值的指定类型污点

kubectl taint nodes k8s-worker-3  node-type:NoSchedule-

删除单个键值所有污点

kubectl taint nodes k8s-hz12082cluster  node-type-

 

转载请注明:菜鸟运维网 » kubernetes污点

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址