返回
在大白话中理解 K8s 调度利器:污点与容忍度
后端
2023-10-12 16:01:51
朋友们,我们又见面了!在 K8s 探索之旅中,我们今天要聊聊调度中的两大利器:污点和容忍度。它们就像一对欢喜冤家,互相制衡,共同维护着集群的稳定和高效。
污点:节点上的“拒绝服务”贴纸
想象一下,你的集群中有一个节点,由于某些原因,比如硬件故障或特殊需求,变得不那么可靠了。这时,你就需要在节点上贴一张“拒绝服务”的贴纸,让 Pod 绕道而行。这就是污点(Taint)的作用。
污点就像一个标签,它标识了一个节点的异常状态或限制条件。例如,你可以给一个节点打上“不稳定”的污点,这样,任何对稳定性要求较高的 Pod 都会避开它。
容忍度:Pod 的“无所谓”态度
对于 Pod 来说,面对污点节点,它们可以采取两种态度。一种是坚决抵制,即设置容忍度为“NoSchedule”或“NoExecute”。在这种情况下,带有这些容忍度的 Pod 宁愿无家可归,也不愿意部署到污点节点上。
另一种态度则比较无所谓,即设置容忍度为“PreferNoSchedule”或“Tolerate”。带有这些容忍度的 Pod 表示,它们虽然不太喜欢污点节点,但如果实在找不到其他地方,也只好凑合了。
污点和容忍度:相爱相杀的平衡
污点和容忍度就像一对相爱相杀的欢喜冤家。污点限制了 Pod 的选择范围,容忍度则为 Pod 提供了灵活性。二者相互制衡,共同维护着集群的稳定和高效。
通过合理使用污点和容忍度,你可以实现以下目标:
- 隔离故障节点: 将不稳定的节点标记为污点,让 Pod 远离它们,避免故障蔓延。
- 满足特殊需求: 为特殊用途的节点打上污点,例如高性能计算节点,以确保特定的 Pod 部署在这些节点上。
- 优化资源利用: 通过容忍度,允许 Pod 在不理想的节点上运行,提高集群资源利用率。
污点与容忍度:上手实践
在实际操作中,你可以通过以下方式使用污点和容忍度:
# 给节点打污点
kubectl taint nodes <node-name> <taint-key>=<taint-value>
# 给 Pod 设置容忍度
kubectl annotate pod <pod-name> tolerations=<taint-key>=<toleration-value>:<effect>
例如,要将节点node1
标记为“不稳定”,并允许 Pod 在该节点上运行,你可以执行以下操作:
kubectl taint nodes node1 unstable=true
kubectl annotate pod my-pod tolerations=unstable:Tolerate:NoExecute
总结
污点和容忍度是 K8s 中强大的调度工具,它们通过限制和灵活性,共同确保了集群的稳定和高效。理解并掌握它们的使用,将使你能够更有效地管理你的 K8s 集群。
好了,今天就聊到这里。下期见!