一、调度器工作流程
1. 过滤(Predicate):筛掉不满足条件的节点
2. 打分(Priority):对候选节点评分
3. 选定:得分最高的节点,binding
二、最简单:nodeName
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: node-1 # 直接指定,跳过调度器
containers:
- name: nginx
image: nginx:1.25
三、nodeSelector(标签选择)
# 给节点打标签
kubectl label nodes node-1 disktype=ssd
kubectl label nodes node-2 zone=beijing
spec:
nodeSelector:
disktype: ssd
四、节点亲和性(更强大)
spec:
affinity:
nodeAffinity:
# 硬约束:必须满足
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values: [linux]
# 软约束:尽量满足,权重 1-100
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 80
preference:
matchExpressions:
- key: disktype
operator: In
values: [ssd]
支持的 operator:In、NotIn、Exists、DoesNotExist、Gt、Lt
五、Pod 亲和性与反亲和性
场景:Web 服务与缓存尽量靠近;同一应用的副本尽量分散。spec:
affinity:
# 反亲和:同一应用不要调度到同一节点(高可用)
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: [web]
topologyKey: kubernetes.io/hostname
# 亲和:与 redis 部署在同一可用区
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values: [redis]
topologyKey: topology.kubernetes.io/zone
六、污点与容忍
# 给节点加污点(禁止普通 Pod 调度)
kubectl taint nodes node-1 dedicated=gpu:NoSchedule
# 移除
kubectl taint nodes node-1 dedicated=gpu:NoSchedule-
三种 effect:
| effect | 说明 |
| --- | --- |
| NoSchedule | 新 Pod 不调度到该节点 |
| PreferNoSchedule | 尽量不调度 |
| NoExecute | 驱逐已有 Pod |
容忍配置:
spec:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
tolerationSeconds: 3600
七、拓扑分布约束(推荐)
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: web
八、资源请求与限制
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "2"
memory: "2Gi"
调度只看 requests,不看 limits。
九、排查 Pending
kubectl describe pod <pod> | grep -A 10 Events
# 常见原因:
# - 资源不足
# - 节点污点未容忍
# - PVC 未绑定
# - 亲和性规则无法满足
评论(0)
还没有评论,来说两句吧