在 Kubernetes 集群中,标签(Labels)、污点(Taints)和容忍度(Tolerations)是精细控制 Pod 调度与资源隔离的核心机制。本文系统讲解三者的概念、作用对象与协作方式。标签(作用于各类 Kubernetes 对象)通过键值对实现资源组织与选择,如 environment: production,可使用 kubectl get pods -l environment=production 进行过滤筛选。污点(作用于 Node)用于标记节点不应接受普通 Pod,通过 kubectl taint nodes node1 special-key=true:NoSchedule 添加,效果包括 NoSchedule(禁止调度)、PreferNoSchedule(尽量不调度)、NoExecute(驱逐已有 Pod)。容忍度(作用于 Pod)允许 Pod 忽略特定污点,通过 tolerations 字段配置,实现授权 Pod 调度到有污点的节点。三者协作实现多租户隔离、硬件故障隔离、资源优化等场景的精细化调度控制。
本文适用于需要深入理解 Kubernetes 调度机制的运维与开发人员。
它是附加到各种Kubernetes对象(如Pods、Nodes等)上的键值对,用于组织和选择对象。例如,你可以给一个Pod添加标签environment: production,然后你可以使用这个标签来选择或过滤出所有标记为生产环境的Pods。
yamlapiVersion: v1
kind: Pod
metadata:
name: example-pod
labels:
environment: production
app: example
shellkubectl get pods -l environment=production
它是附加到Node上的,用于表示该Node不应该接受任何Pod,除非Pod有特定的容忍度(Tolerations)。污点通常用于防止某些Pods调度到特定的Node上,例如,防止调度敏感数据处理的Pods到特定的硬件故障的Node上。
shell# 给{nodename}打上污点{key=value},污点的效果或者影响是什么{taint-effects}
kubectl taint nodes nodename key=value:taint-effects
shellkubectl taint nodes node1 special-key=true:NoSchedule
它是附加到Pod上的,用于表示该Pod可以调度到具有特定污点的Node上。这允许你精细控制哪些Pods可以在哪些Node上运行。
yamlapiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image
tolerations:
- key: "special-key"
operator: "Equal"
value: "true"
effect: "NoSchedule"
这个配置允许example-pod调度到带有special-key=true
污点的Node上。用于组织和选择对象。
用于限制哪些Node可以接收Pods。
允许特定的Pods忽略这些限制,即它们可以调度到有特定污点的Node上。
通过这种方式,你可以精细控制哪些Pods可以在哪些Node上运行,这对于管理多租户环境、确保安全隔离或优化资源使用非常有用。例如,你可以设置一个污点禁止所有的Pods调度到某些有硬件缺陷的Node上,但允许某些特定的、经过授权的Pods通过设置适当的容忍度来绕过这个限制。


本文作者:Odboy
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC 4.0 BY-SA 许可协议。转载请注明出处!