k8s的pod调度之污点与污点容忍以及pod指定调度
目录
k8s的污点介绍
Taints案例,给节点添加污点
污点容忍, Tolerations
案例
删除污点
nodeName
k8s的污点介绍
基于节点标签分配是站在Pod的角度上,通过在Pod上添加属性,来确定Pod是否要调度到指定的Node上,其实我们也可以站在 Node的角度上,通过在Node上添加污点属性,来避免Pod被分配到不合适的节点上。 Taints:避免Pod调度到特定Node上 Tolerations:允许Pod调度到持有Taints的Node上 注意:master默认有污点,主要原因是处于安全性考虑,可以让master节点不运行业务容器Taints案例,给节点添加污点
第一步:给节点添加污点 格式:kubectl taint node [node] key=value:[effect]
例如: kubectl taint node k8s-node1 gpu=yes:NoSchedule
查看污点命令: kubectl describe node |grep Taint
验证:
kubectl describe node k8s-node1 |grep Taint
其中[effect] 可取值:
• NoSchedule :一定不能被调度(新来的不要来,在这的就别动了)
• PreferNoSchedule:尽量不要调度(尽量不要来,除非没办法)
• NoExecute:不仅不会调度,还会驱逐Node上已有的Pod(新的不 要来,在这的赶紧走)
新建一个pod测试
kubectl run pod1 --image=nginx
自动被分配到了没有污点的node2
注意:如果所有节点都有污点,那新建pod状态会为pending,无法被分配
用途:一般作为负载比较多了的节点打上污点不让节点在分配
污点容忍, Tolerations
污点容忍是指在写pod的yaml文件时,写入污点容忍配置来允许pod被分配到已经打了污点的节点上 添加污点容忍(tolrations)字段到Pod配置中案例
先把所有节点打上污点
写入一个创建pod的yaml,yaml的逻辑是将pod分配到一个污点名为tt,值为vv2的节点上去
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod1 name: pod-tolerations spec: tolerations: - key: "tt" operator: "Equal" value: "vv2" effect: "NoSchedule" containers: - image: nginx # 主容器 name: web其中,作为污点容忍的主要是这一句
tolerations: - key: "tt" operator: "Equal" value: "vv2" effect: "NoSchedule可以看到,pod被分配到已经打了污点的node2上
删除污点
kubectl taint node [node] key:[effect]-
例如
kubectl taint node k8s-node1 tt:NoSchedule-
nodeName
nodeName:指定节点名称,用于将Pod调度到指定的Node上,不经过调度器。 使用场景:一般做测试用 案例:apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod1 name: pod-nodename spec: nodeName: k8s-node1 containers: - image: nginx # 主容器 name: web负责调度的是这一句,因为直接指定节点,所以不经过调度器,污点以及标签适配对他无效,直接被分配到指定的node1 nodeName: k8s-node1
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
