20、k8s-污点(Taints)--针对node设置和容忍(Toleration)--针对pod设置
污点(Taints):
·前面的调度方式都是站在pod上添加属性、来确定pod是否要调整到指定的Node上、其实我们也可以站在Node的角度上、通过添加污点属性、来决定是否允许pod调度过来
·Node被设置上污点后就和pod之间存在了一种相斥的关系、进而拒绝pod调度进来、甚至可以将已存在的pod驱逐出去
·污点的格式为:key=value:effect、key和value是污点的标签、effect是描述污点的作用的、支持如下三个选项:
·PreferNoSchedule:kubernetes将尽量避免把pod调度到具有该污点的Node上、除非没有其它污点可以调度
·NoSchedule:kubernetes将不会把pod调度到具有该污点的node上、但不会影响当前的node上已存在的pod
·NoExecute:kubernetes将不会把pod调度到具有该污点的node上、同时也会将node上已存在的pod驱离
#设置污点: kubectl taint nodes node1 key=value:effect #去除污点 kubectl taint nodes node1 key:effect- #去除所有的污点 kubectl taint nodes node1 key- ##PreferNoSchedule :表示尽量不要调度到node-1上、如果是在没地方去才能调度过来 1、为node-1节点添加一个污点:chen=taixin:PreferNoSchedule ·添加污点:kubectl taint nodes node-1 chen=taixin:PreferNoSchedule ·查看node的污点:kubectl describe nodes node-1 ··找到这一行:Taints: chen=taixin:PreferNoSchedule ·创建一个pod-1(看pod-1会不会被调度到node-1上去) ·创建pod-1:kubectl run pod-1 --image=nginx:1.17.1 -n dev ·查看pod-1是否成功运行在node-1节点上:kubectl get pods -n dev -o wide ##Noschedule :表示不能调度到我这个节点上、原来已经在node-1节点上的没事 2、为node-1节点添加一个污点:chen=taixin:NoSchedule ·先取消node-1上的preferNoScheddule污点:kubectl taint nodes node-1 chen:PreferNoSchedule- ·再添加污点: kubectl taint nodes node-1 chen=taixin:NoSchedule ·添加pod-2(看pod-2是否可以正常调度到node节点):kubectl run pod-2 --image=nginx:1.17.1 -n dev ·查看新建的pod-2是否正常再node-1节点上运行:kubectl get pods -ndev -o wide ··发现pod-2节点的状态是"Pending"、NODE是<none> #NoExecute:表示不能调度到我这个节点上、原来已经在node-1节点上的所有pod都会被删掉 3、为node-1节点添加一个污点:chen=taixin:NoExecute ·先去掉node-1上的污点:taint nodes node-1 chen:NoSchedule- ·再给node-1添加污点:kubectl taint nodes node-1 chen=taixin:NoExecute ·查看dev上的pod发现都已经停止或者被删除了:kubectl get pods -ndev -o wide ·创建pod-3后(看是否能正常运行):kubectl run pod-3 --image=nginx:1.17.1 -n dev ·查看新建的pod-3是否正常再node-1节点上运行:kubectl get pods -ndev -o wide ··发现pod-3节点的状态是"Pending"、NODE是<none>
扩展:
注意:master节点上是有污点的、所以pod才不会被调度到master上
#查看master的信息:kubectl describe nodes master
#@Taints: node-role.kubernetes.io/master:NoSchedule
====================================容忍---针对pod设置=======================
上面介绍到了污点的作用、我们可以再node上添加污点用于拒绝pod调度上来、相应的如果pod身上设置0容忍模式就可以不介意node身上有污点、这样有容忍的大度的pod就可以调度到有污点的node上去了
#在上面、已经给node-1添加了污点NoExecute、此时的pod是调度不上去的 #给pod添加容忍 1、创建yaml文件:vim pod-toleration.yaml -------------------------------- apiVersion: v1 kind: Pod metadata: name: pod-toleration namespace: dev spec: containers: - name: nginx image: nginx:1.17.1 tolerations: #添加容忍 - key: "chen" #要容忍的污点 operator: "Equal" #操作符 等于 chen=taixin value: "taixin" #要容忍污点的值 effect: "NoExecute" #添加容忍的规则、这里的规则必须和污点的规则一样 ------------------------------------------------------------------------------------ 2、创建pod:kubectl create -f pod-toleration.yaml 3、查看pod信息:kubectl get pods pod-toleration -ndev -o wide 4、去掉node-1的污点:kubectl taint nodes node-1 chen:NoExecute-
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/17653082.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步