nodeSelector

这样给节点加标签

  1. kubectl label nodes <node-name> <label-key>=<label-value>

比如我们给节点加磁盘类型ssd的标签

kubectl label nodes kubernetes-foo-node-1.c.a-robinson.internal disktype=ssd

给pod或者Deployment的模板配置节点选择器,原配置:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx

改为:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

一般可以用内置的一批标签:kubenetes.io/hostnamekubenetes.io/oskubenetes.io/arch

节点亲和

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/e2e-az-name
            operator: In
            values:
            - e2e-az1
            - e2e-az2
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: k8s.gcr.io/pause:2.0

requiredDuringSchedulingIgnoredDuringExecution“硬需求”
preferredDuringSchedulingIgnoredDuringExecution“软需求”

污点

污点用于排除Pod,pod不会被调度到包含污点的node上。除非pod声明自己能容忍此污点