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-

posted @ 2024-07-01 00:12  little小新  阅读(95)  评论(0编辑  收藏  举报