将pod调度到特定节点有哪些方法:
与节点标签匹配的nodeSelector(spec.nodeSelector)--硬性:如果不存在匹配的标签,pod将被挂起
亲和性和反亲和性(spec.affinity)--可硬可软
Nodename字段(spec.nodeName)--硬性
Pod拓扑分布约束定义Pod 在指定拓扑域(spec.topologySpreadConstraints[])
亲和性
Pod的一种特性,使pod被吸引到一类特定的节点。
举个栗子
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:latest
affinity: # 这里是 Pod spec 的 affinity 字段
podAntiAffinity: # 定义 Pod 反亲和性
requiredDuringSchedulingIgnoredDuringExecution: # 硬性要求
- labelSelector:
matchExpressions:
- key: app # 匹配所有带有 `app=web-app` 标签的 Pod
operator: In
values:
- web-app
topologyKey: kubernetes.io/hostname # 拓扑域为“主机名”,即避免调度到同一台节点
污点、容忍度
污点用来排斥一类特定的pod,每个节点可以有一个或多个污点,不接受污点的pod会被节点排斥。容忍度是pod的一种特性,让pod可以忽略节点的污点排斥。污点和容忍度结合使用,可以让pod分配到更合适的节点。