Kubernetes:从默认计划中排除节点

时间:2017-03-23 08:43:40

标签: kubernetes google-kubernetes-engine

是否可以创建一个节点池,调度程序默认会忽略该节点池,但节点选择器可以将其作为目标?

3 个答案:

答案 0 :(得分:5)

如果您的节点池具有静态大小或者至少它没有自动缩放,那么这很容易实现。

首先,taint该池中的节点:

kubectl taint node \
  `kubectl get node -l cloud.google.com/gke-nodepool=my-pool -o name` \
  dedicated=my-pool:NoSchedule

Kubernetes版本> = 1.6

然后在您的Pod(模板)中的affinity下添加tolerationsspec:值,这些值需要能够在这些节点上运行:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: dedicated
            operator: In
            values: ["my-pool"]
  tolerations: 
  - key: "key"
    operator: "Equal"
    value: "value"
    effect: "NoSchedule"

Pre 1.6

然后将这些注释添加到需要能够在这些节点上运行的Pod(模板)中:

annotations:
  scheduler.alpha.kubernetes.io/tolerations: >
    [{"key":"dedicated", "value":"my-pool"}]
  scheduler.alpha.kubernetes.io/affinity: >
    {
      "nodeAffinity": {
        "requiredDuringSchedulingIgnoredDuringExecution": {
          "nodeSelectorTerms": [
            {
              "matchExpressions": [
                {
                  "key": "dedicated",
                  "operator": "In",
                  "values": ["my-pool"]
                }
              ]
            }
          ]
        }
      }
    }

有关详细信息,请参阅design doc

自动缩放节点组

您需要将--register-with-taints参数添加到kubelet

  

使用给定的taints列表注册节点(逗号分隔<key>=<value>:<effect>)。如果register-node为false,则为no-op。

在另一个answer中,我举了一些关于如何坚持该设置的例子。 GKE现在还具有对tainting node pools

的特定支持

答案 1 :(得分:1)

现在GKE支持节点污点。节点污点将在创建期间应用于所有节点,并将保留。所以你不需要运行kubectl taint命令。有关详细信息,请查看it asks for XML Schema to validate against:

答案 2 :(得分:0)

对于未启用Alpha支持的Kubernetes 1.6上的用户,您需要使用新的&#34; beta&#34;等级字段。相当于上面接受的答案是我在下面创建的。这基于文档中的以下文章:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: dedicated
            operator: In
            values: ["my-pool"]
  tolerations: 
  - key: "key"
    operator: "Equal"
    value: "value"
    effect: "NoSchedule"
  containers:
  - name: with-node-affinity
    image: gcr.io/google_containers/pause:2.0