# 标签、污点与容忍度

作者:Odboy (opens new window)

本站地址:https://blog.odboy.cn (opens new window)

# 简介

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

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

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

# 如何使用标签?

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    environment: production
    app: example
1
2
3
4
5
6
7

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

kubectl get pods -l environment=production
1

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

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

# 如何使用污点?

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

# 如何给node1添加NoSchedule污点

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

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

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

# 如何在Pod上添加容忍度

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"
1
2
3
4
5
6
7
8
9
10
11
12
13

这个配置允许example-pod调度到带有special-key=true:NoSchedule污点的Node上。

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

# 标签

用于组织和选择对象。

# 污点

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

# 容忍度

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

# 总结

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

最近更新: 2025-04-14
2017 - 武林秘籍   |