污点taints和容忍toleration_v1
污点taints和容忍toleration
查看taints
root@node81[14:12:09]:/home/k8s_conf/saas# kubectl describe nodes node81
...
CreationTimestamp: Tue, 10 May 2022 17:31:08 +0800
Taints: node-role.kubernetes.io/master:NoSchedule
Unschedulable: false
分别对应
effect可以取值:
- PreferNoSchedule: 尽量不要调度。
- NoSchedule: 一定不能被调度。
- NoExecute: 不仅不会调度, 还会驱逐 Node 上已有的 Pod。
- 设置taints
kubectl taint node node81 node-role.kubernetes.io/master:PreferNoSchedule
删除taints
#root@node81[14:41:26]:/home/k8s_conf/saas# kubectl taint node node81 node-role.kubernetes.io/master:NoSchedule-
node/node81 untainted
#root@node81[14:41:33]:/home/k8s_conf/saas# kubectl describe nodes node81
...
CreationTimestamp: Tue, 10 May 2022 17:31:08 +0800
Taints: <none>
Unschedulable: false
...
容忍
一个 Node 可以有多个污点,一个 Pod 可以有多个容忍。
想要pod调度到有污点node,需要pod容忍包含该node所有污点(PreferNoShedule除外)
设置容忍tolerations
apiVersion: apps/vl
kind: Deployment
metadata:
name: example
spec:
replicas: 3
template:
spec:
......
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
tolerationSeconds: 3600
tolerationSeconds用于设置多长时间以后再踢掉pod,单位秒
operator:可选值Equal 和 Exists
Exists: 匹配容忍在已有条件下的所有污点
key为空,则匹配所有key
tolerations:
- operator: "Exists"
key不为空,effect为空,则匹配该key的所有值
tolerations:
- key: "key"
operator: "Exists"
Equal
Node 和 Pod 的 key 为 key1、value1 与 effect 相同则能调度
#污点
key1=value1:NoSchedule
#Pod设置
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
Node 的污点的 key、value、effect 和 Pod 容忍都相同则能调度
# 设置污点
key1=value1:NoSchedule
key2=value2:NoExecute
# Pod设置容忍
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key2"
operator: "Equal"
value: "value2"
effect: "NoExecute"
Node 的污点和 Pod 的大部分都相同,不同的是 Node 污点 effect 为 PreferNoSchedule 的,可能会调度
# 污点
key1=value1:NoSchedule
key2=value2:NoExecute
key3=value3:PreferNoSchedule
# Pod设置容忍
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key2"
operator: "Equal"
value: "value2"
effect: "NoExecute"
Node 的污点和 Pod 的大部分都相同,不同的是 Node 污点 effect 为 NoSchedule 和 NoExecute 的,不会被调度
# 污点
key1=value1:NoSchedule
key2=value2:NoExecute
key3=value3:PreferNoSchedule
# Pod设置容忍
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key3"
operator: "Equal"
value: "value3"
effect: "PreferNoSchedule"
驱逐
污点的 effect
可以设置为 NoExecute时
- 立即将没有配置容忍的 Pod 逐出。
- 设置容忍但是没有指定 tolerationSeconds 参数的,那么该容忍永久生效。
- 设置容忍但是有指定 tolerationSeconds 参数的,那么在指定的时间内容忍有效,超过指定时间后将被剔除。
当某些条件为 true 时,节点控制器会自动污染节点。内置以下污点:
- node.kubernetes.io/not-ready: 节点尚未准备好。这对应于 NodeCondition Ready 为 false。
- node.kubernetes.io/unreachable: 无法从节点控制器访问节点。这对应于 NodeCondition Ready 为 Unknown。
- node.kubernetes.io/out-of-disk: 节点磁盘不足。
- node.kubernetes.io/memory-pressure: 节点有内存压力。
- node.kubernetes.io/disk-pressure: 节点有磁盘压力。
- node.kubernetes.io/network-unavailable: 节点的网络不可用。
- node.kubernetes.io/unschedulable: 节点不可调度。
- node.cloudprovider.kubernetes.io/uninitialized: 当 kubelet 从 "外部" 云提供程序开始时,此污点在节点上设置为将其标记为不可用。来自 cloud-controller-manager 的控制器初始化此节点后,kubelet 删除此污点。
节点失效 pod转移等待时间
当某个 Pod
运行所在的 Node
变成 unready
或者 unreachable
不可用状态时,Kubernetes
可以等待该 Pod
被调度到其他节点的最长等待时间
tolerations:
- effect: NoExecutekey: node.alpha.kubernetes.io/notReady
operator: Exists
tolerationSeconds: 300
- effect: NoExecutekey: node.alpha.kubernetes.io/unreachable
key: operator: Exists
tolerationSeconds: 300
这两个容忍度表示,该 Pod
将容忍所在节点处于 notReady
或者 unreachable
状态维持 300
秒。 当 Kubernetes
控制器检测到有节点处 notReady
或者 unreachable
状态时, 将会等待 300
秒,如果超过指定时间的话 Kubernetes
将会把该 Pod
重新调度到其他节点上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通