添加标签到节点
kubectl label nodes <node-name> <label-key>=<label-value>
添加节点选择器
apiversion: app/v1kind: podmetadata:name: nginxlabel:env: testspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentnodeSelector:disktype: ssd
节点间的亲和性
亲和性 : affinity
apiversion: app/v1kind: podmetadata:name: nginxlabel:env: testspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentaffinity:nodeAffinity:reuiqredDuringSchedulingIgnoreDuringExecution:nodeSelectorTerms:- matchExpressions:- key: keyoperator: Invalues:- val1- val2preferredDuringSchedulingIgnoredDuringExecution:- weight: 1 # 权重评分,通过遍历所有的节点计算总分,总分最高获胜preference:matchExpressions:- key: another-node-label-keyoperator: Invalues:- another-node-label-value
- In:label 的值在某个列表中
- NotIn:label 的值不在某个列表中
- Gt:label 的值大于某个值
- Lt:label 的值小于某个值
- Exists:某个 label 存在
- DoesNotExist:某个 label 不存在
pod 间的亲和性和反亲和性
第一个 pod 最好调度某个指定的主机上,上面至少一个节点运行这样的 pod:apiVersion: v1kind: Podmetadata:name: with-pod-affinitylabels:app: pod-affinity-podspec:containers:- name: with-pod-affinityimage: nginxaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- busybox-podtopologyKey: kubernetes.io/hostnamepodAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues:- node-affinity-podtopologyKey: kubernetes.io/hostname
app=busybox-pod
第二个则是最好不要调度到这样的节点:app=node-affinity-pod
