背景介绍

在生产实践中,某些系统因一些特殊的要求,需要独占节点,即专属节点:具有特殊要求的应用POD必须运行在这些专属节点上;同时这些节点不为其它应用服务。本文将提供一种具体的配置策略,以满足这种特殊的调度需求。
该策略主要使用到两种工具:

  1. 节点标签实现应用与节点的绑定
  2. 污点配置实现其它应用不会被调度到该节点。

设置步骤

  1. 为专属节点设置特定标签LABEL:dedicated=sys0,及设置污点
    1
    2
    $ oc label node node-10 dedicated=sys0
    $ oc adm taint nodes node-10 dedicated=sys0:NoSchedule
  2. 在使用专属节点的应用编排中绑定的Node
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    spec:
    replicas: 1
    template:
    metadata:
    name: nginx
    labels:
    app: nginx
    spec:
    nodeSelector:
    dedicated: "sys0"
    containers:
    ...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    spec:
    affinity:
    nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    nodeSelectorTerms:
    - matchExpressions:
    - key: dedicated
    operator: In
    values:
    - sys0
    containers:
    ...
  3. 使用专属节点的应用编排中指定的标签及容忍污点
    1
    2
    3
    4
    5
    6
    spec:
    tolerations:
    - key: "dedicated"
    operator: "Equal"
    value: "sys0"
    effect: "NoExecute"
    注意,本例中使用的operator是”Equal”,会比较污点的键与值。如果operator使用”Exists”,则应用可以容忍所有带有dedicated污点。

去除专属节点操作

要是需要去除专属节点的限制,让它恢复成一个正常应用的节点。只需要将它的污点移除即可。

1
$ oc adm taint nodes dedicated-