Skip to content

标签、污点与容忍度

简介

在Kubernetes中,标签(Labels)、污点(Taints)和容忍度(Tolerations)是用于管理和调度Pod的重要概念。

标签(Labels)==> 作用于各种kubernetes对象

它是附加到各种Kubernetes对象(如Pods、Nodes等)上的键值对,用于组织和选择对象。例如,你可以给一个Pod添加标签environment: production,然后你可以使用这个标签来选择或过滤出所有标记为生产环境的Pods。

如何使用标签?

yaml
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    environment: production
    app: example

如何选择打上'environment=production'标签的pod?

shell
kubectl get pods -l environment=production

污点(Taints)==> 作用于Node

它是附加到Node上的,用于表示该Node不应该接受任何Pod,除非Pod有特定的容忍度(Tolerations)。污点通常用于防止某些Pods调度到特定的Node上,例如,防止调度敏感数据处理的Pods到特定的硬件故障的Node上。

如何使用污点?

shell
# 给{nodename}打上污点{key=value},污点的效果或者影响是什么{taint-effects}
kubectl taint nodes nodename key=value:taint-effects

如何给node1添加NoSchedule污点

shell
kubectl taint nodes node1 special-key=true:NoSchedule

容忍度(Tolerations)==> 作用于Pod

它是附加到Pod上的,用于表示该Pod可以调度到具有特定污点的Node上。这允许你精细控制哪些Pods可以在哪些Node上运行。

如何在Pod上添加容忍度

yaml
apiVersion: 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:NoSchedule污点的Node上。

标签、污点与容忍度的协作方式

标签

用于组织和选择对象。

污点

用于限制哪些Node可以接收Pods。

容忍度

允许特定的Pods忽略这些限制,即它们可以调度到有特定污点的Node上。

总结

通过这种方式,你可以精细控制哪些Pods可以在哪些Node上运行,这对于管理多租户环境、确保安全隔离或优化资源使用非常有用。例如,你可以设置一个污点禁止所有的Pods调度到某些有硬件缺陷的Node上,但允许某些特定的、经过授权的Pods通过设置适当的容忍度来绕过这个限制。