美文网首页
k8s调度之 污点(Taints)和容忍度(Toleration

k8s调度之 污点(Taints)和容忍度(Toleration

作者: Rami | 来源:发表于2022-10-20 11:39 被阅读0次

    1.理论详解

    1.1 NodeAffinity节点亲和性,是在pod上定义的一种属性,使pod能够按照我们要求调度到某个node上。而Taints正好相反,它可以让node拒绝pod,甚至驱逐。

    1.2 Taints(污点)是node上定义的一种属性,给node设置完污点后,k8s不会将pod调度到这个node上,于是k8s就给pod设置了另一种属性Tolerations(容忍),只要pod能够容忍node上的污点,那么k8s就会忽略node上的污点,就能够(不是必须)把pod调度到有污点的node上。
    因此 Taints(污点)通常与Tolerations(容忍)配合使用。

    2.设置污点

    kubectl taint node [node] key=value[effect]
    其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
    NoSchedule :一定不能被调度。
    PreferNoSchedule:尽量不要调度。
    NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。

    示例:

    [root@k8s-master ~]# kubectl describe node k8s-node1 |grep Taints
    Taints:             <none>
    [root@k8s-master ~]# kubectl taint node k8s-node1 key=value:NoSchedule
    node/k8s-node1 tainted
    [root@k8s-master ~]# kubectl describe node k8s-node1 |grep Taints
    Taints:             key=value:NoSchedule
    

    3.取消污点

    去除指定key及其effect:
    kubectl taint nodes node_name key:[effect]- #(这里的key不用指定value)
    去除指定key所有的effect:
    kubectl taint nodes node_name key-

    示例:

    #比如先设置污点:
    kubectl taint node k8s-node1 key=value:NoSchedule
    kubectl  taint node k8s-node1 key=value:NoExecute
    
    #去除指定key及其effect:
    [root@k8s-master ~]# kubectl  taint node k8s-node1 key:NoExecute-
    node/k8s-node1 untainted
    [root@k8s-master ~]# kubectl  taint node k8s-node1 key:NoSchedule-
    node/k8s-node1 untainted
    
    #去除指定key所有的effect: 
    [root@k8s-master ~]# kubectl  taint node k8s-node1 key-
    node/k8s-node1 untainted
    

    4.示例

    给k8s-node1 设置一个污点,该Taint(污点)的键为dev,值为yundi,Taint的效果是NoSchedule。这意味着pod明确声明可以容忍这个taint(污点),否则就不会调度到这个node上。

    kubectl taint node k8s-node1 dev=yundi:NoSchedule
    

    然后需要在pod上声明Tolerations(容忍度),下面的Tolerations表示可以容忍具有该taint的node,使pod能够调度到有该污点的node上。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test
    spec:
      tolerations:
      - key: "dev"
        operator: "Equal"
        value: "yundi"
        effect: "NoSchedule"
      containers:
        - name: test
          image: busybox:latest
    

    也可以写成这种

    tolerations:
    - key: "dev"
      operator: "Exists"
      effect: "NoSchedule"
    

    相关文章

      网友评论

          本文标题:k8s调度之 污点(Taints)和容忍度(Toleration

          本文链接:https://www.haomeiwen.com/subject/ilcuzrtx.html