kubenetes污点和容忍度

污点和容忍

污点可以算是一种人为干预调度pod的策略。

给node节点添加污点可以调整一些非必要的pod被调度到该node节点上,只有设置了能容忍该污点的pod才能被调度到该节点。

 

taint

现在taint主要有三种
NoSchedule:新的 Pod 不调度到该 Node 上,不影响正在运行的 Pod
PreferNoSchedule:soft 版的 NoSchedule,尽量不调度到该 Node 上
NoExecute:新的 Pod 不调度到该 Node 上,并且删除已在运行的不弄容忍该污点的Pod。Pod可以增加一个时间(tolerationSeconds)在该时间之后会被驱逐,如果污点在该时间内被取消则不会被驱逐。

新增taint

kubectl taint nodes node1 key1=value1:NoSchedule

在节点node1上留下污点。污点有键key1,值value1和污点效果NoSchedule。这表明除非有能够容忍该污点的pod,否则将不会有任何容器被调度到Node1上。

删除上述taint

kubectl taint nodes node1 key1:NoSchedule-
kubectl taint nodes node1 key1- #删除指定key所有的effect

 

 

tolerations

可以在PodSpace中配置toleration。让pod具有能够容忍taint的特性,使pod能够调度到被污染的node上。以下两种方法都可以匹配到被污染的node1上:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"

使用示例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "key1"
    operator: "Exists"
    effect: "NoSchedule"

  这里operator缺省值是Exists。

  如果键和污点效果是和节点匹配的话pod是能够容忍node的污点调度到该node上的,并且在operator使用的是Exitsts情况下,vlaues可以不指定,但是operator使用Equal的情况下vlaues值要和node污点的values值相等。

注意:

  当key值使用的是Exists时,pod会容忍所有键、值和污点效果。
  当污点效果为Exists时,将会容忍所有键为key1的node。
 
多污点效果
当一个节点有多个污点时需要同时容忍多个污点的pod才能被调度。
实例:当有一个这样的节点
kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:NoSchedule

pod上有两个toleration

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"

 在这种情况下,pod将无法调度到该节点上,因为没有容忍度与第三个污点相匹配。但是,如果添加了污点时它已经在节点上运行,它将能够继续运行,因为第三个污点是pod不允许的三个污点中的唯一一个。

通常,如果将一个有效果的污点NoExecute添加到节点上,那么任何不能容忍该污点的pod都将被立即逐出,而会容忍该污点的pod不会被驱逐。但是,有效公差NoExecute可以指定一个可选tolerationSeconds字段,字段指示添加污点后pod将绑定到节点的时间。例如,

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

意味着如果该Pod正在运行时向节点添加了匹配的污点,则该Pod将与该节点绑定3600秒,然后被逐出。如果在此之前移除了污点,则不会将pod逐出

 

 

posted @ 2021-01-14 16:43  惊蛰2020  阅读(70)  评论(0编辑  收藏  举报