19、Kubernetes 調度器 - 污點

Taint 和 Toleration

節點親和性,是pod的一種屬性(偏好或硬性要求),它使pod被吸引到一類特定的節點。Taint 則相反,它使節點能夠排斥一類特定的 pod
Taint 和 toleration 相互配合,可以用來避免 pod 被分配到不合適的節點上。每個節點上都可以應用一個或多個taint ,這表示對於那些不能容忍這些 taint 的 pod,是不會被該節點接受的。如果將 toleration 應用於 pod上,則表示這些 pod 可以(但不要求)被調度到具有匹配 taint 的節點上

污點(Taint)

1、污點 ( Taint ) 的組成

使用kubectl taint命令可以給某個 Node 節點設置污點,Node 被設置上污點之後就和 Pod 之間存在了一種相斥的關係,可以讓 Node 拒絕 Pod 的調度執行,甚至將 Node 已經存在的 Pod 驅逐出去
key=value:effect
每個污點有一個 key 和 value 作爲污點的標籤,其中 value 可以爲空,effect 描述污點的作用。當前 tainteffect 支持如下三個選項:
  • NoSchedule:表示 k8s 將不會將 Pod 調度到具有該污點的 Node 上
  • PreferNoSchedule:表示 k8s 將盡量避免將 Pod 調度到具有該污點的 Node 上
  • NoExecute:表示 k8s 將不會將 Pod 調度到具有該污點的 Node 上,同時會將 Node 上已經存在的 Pod 驅逐出去

2、污點的設置、查看和去除

# 設置污點
kubectl taint nodes node1 KEY=VALUE:NoSchedule
# 節點說明中,查找 Taints 字段
kubectl describe pod  pod-name 
# 去除污點
kubectl taint nodes node1 KEY=VALUE:NoSchedule

在這裏插入圖片描述
在這裏插入圖片描述

容忍(Tolerations)

設置了污點的 Node 將根據 taint 的 effect:NoSchedule、PreferNoSchedule、NoExecute 和 Pod 之間產生互斥的關係,Pod 將在一定程度上不會被調度到 Node 上。但我們可以在 Pod 上設置容忍 ( Toleration ) ,意思是設置了容忍的 Pod 將可以容忍污點的存在,可以被調度到存在污點的 Node 上
pod.spec.tolerations
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: wangyanglinux/myapp:v1
    name: test-container
  tolerations:
  - key: "KEY"
    operator: "Equal"
    value: "VALUE"
    effect: "NoSchedule"
    tolerationSeconds: 3600

在這裏插入圖片描述

  • 其中 key, vaule, effect 要與 Node 上設置的 taint 保持一致
  • operator 的值爲 Exists 將會忽略 value 值
  • tolerationSeconds 用於描述當 Pod 需要被驅逐時可以在 Pod 上繼續保留運行的時間

1、當不指定 key 值時,表示容忍所有的污點 key:

tolerations:
- operator: "Exists"

2、當不指定 effect 值時,表示容忍所有的污點作用

tolerations:
- key: "key"
  operator: "Exists"

3、有多個 Master 存在時,防止資源浪費,可以如下設置

kubectl taint nodes Node-Name node-role.kubernetes.io/master=:PreferNoSchedule
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章