# 标签、污点与容忍度
# 简介
在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
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
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
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通过设置适当的容忍度来绕过这个限制。