背景介绍
在生产实践中,某些系统因一些特殊的要求,需要独占节点,即专属节点:具有特殊要求的应用POD必须运行在这些专属节点上;同时这些节点不为其它应用服务。本文将提供一种具体的配置策略,以满足这种特殊的调度需求。
该策略主要使用到两种工具:
- 节点标签实现应用与节点的绑定
- 污点配置实现其它应用不会被调度到该节点。
设置步骤
- 为专属节点设置特定标签LABEL:dedicated=sys0,及设置污点
$ oc label node node-10 dedicated=sys0
$ oc adm taint nodes node-10 dedicated=sys0:NoSchedule
- 在使用专属节点的应用编排中绑定的Node
spec:
replicas: 1
template:
metadata:
name: nginx
labels:
app: nginx
spec:
nodeSelector:
dedicated: "sys0"
containers:
...
或
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: dedicated
operator: In
values:
- sys0
containers:
...
- 使用专属节点的应用编排中指定的标签及容忍污点
spec:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "sys0"
effect: "NoExecute"
注意,本例中使用的operator是"Equal",会比较污点的键与值。如果operator使用"Exists",则应用可以容忍所有带有dedicated污点。
去除专属节点操作
要是需要去除专属节点的限制,让它恢复成一个正常应用的节点。只需要将它的污点移除即可。
$ oc adm taint nodes dedicated-