K8S基本操作-10-Taints AND Tolerations
Taints AND Tolerations
在 Kubernetes 中,Taints 和 Tolerations 是一種用於控制 Pod 調度到哪些節點上的機制。
Taints
Taint 是一種附加到節點上的鍵值對。它表示該節點不適合運行具有特定容忍度(Toleration)的 Pod。例如,您可以為節點添加一個名為 “dedicated” 的 Taint,並將值設置為 “true”,表示該節點專用於運行特定應用程序的 Pod。
Tolerations
Toleration 是一種附加到 Pod 上的鍵值對。它表示該 Pod 可以容忍特定 Taint。例如,您可以為 Pod 添加一個名為 “dedicated” 的 Toleration,並將值設置為 “true”,表示該 Pod 可以運行在具有 “dedicated” Taint 的節點上。
查看 Taint 的方法,就是用 describe 檢查某個 Node:
kubectl describe nodes node01
或者也可以用 grep 輔助。
kubectl describe nodes node01 |grep Taints
添加 Taints 的方法,將 node01 加上 spray=mortein 這個 taint ,並且效果為 NoSchedule (Pod 不可被調度到 Node 上)。
kubectl taint node node01 spray=mortein:NoSchedule
由於加了 taint 所以一般 Pod 無法放到該 Node ,除非加入 toleration。
添加 toleration 的方法如下:
---
apiVersion: v1
kind: Pod
metadata:
name: bee
spec:
containers:
- image: nginx
name: bee
tolerations:
- key: spray
value: mortein
effect: NoSchedule
operator: Equal
如何移除掉 Taints 呢?
例如我們要移除Taints: node-role.kubernetes.io/control-plane:NoSchedule
,可採用以下指令:
kubectl taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule-
也就是在 Taint 後方增加一個減號運算符號 -
。
移除 Taint 之後,原本無法調度的 Pod 會自動調度過去。