Kubernetes 调度亲和性与资源配额
【摘要】 一、Pod 亲和性(podAffinity) 1. 基本概念亲和性(Affinity)决定「跟谁」:新 Pod 想和哪些 Pod 待在一起。示例配置(硬性 Pod 亲和性):spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: ...
一、Pod 亲和性(podAffinity)
1. 基本概念
亲和性(Affinity)决定「跟谁」:新 Pod 想和哪些 Pod 待在一起。
示例配置(硬性 Pod 亲和性):
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapp
topologyKey: kubernetes.io/hostname
效果:新 Pod 必须调度到已有 app=myapp Pod 的同一节点上。
2. 关键字段含义
| 字段 | 含义 |
|---|---|
requiredDuringSchedulingIgnoredDuringExecution |
硬性约束,不满足则 Pod 一直 Pending |
preferredDuringSchedulingIgnoredDuringExecution |
软性约束,不满足只降低得分、不阻塞 |
labelSelector |
匹配目标 Pod 的标签 |
topologyKey |
拓扑域,限定"多近算在一起" |
3. 亲和性与拓扑域的区别
- 亲和性:决定"跟谁"(哪组 Pod)
- 拓扑域:决定"多近算在一起"(节点 / 可用区 / 区域)
kubernetes.io/hostname→ 按节点(同一台机器)topology.kubernetes.io/zone→ 按可用区topology.kubernetes.io/region→ 按区域
4. 多个节点都满足条件时部署到哪?
调度器按资源余量等指标打分,分数高的优先;分数相同则随机。
二、Pod 拓扑分布约束(podTopologySpread)
1. 作用
让副本在拓扑域间均匀分布,避免都挤在一个节点/可用区。
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: myapp
2. maxSkew 含义
- 允许的最大数量差距
- 校验的是「放置后」的 skew(新 Pod 放进去之后计算)
- 硬约束(
DoNotSchedule)不满足 → Pending - 软约束(
ScheduleAnyway)不满足 → 仅降低得分
3. 高可用建议
多可用区场景推荐:
topologyKey: topology.kubernetes.io/zone
maxSkew: 1
三、ResourceQuota 资源配额
1. hard 字段含义
硬性上限(Hard Limit),即命名空间资源总预算:
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: default
spec:
hard:
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
limits.memory: 16Gi
pods: "10"
- 所有 Pod 资源总和达到阈值后,apiserver 直接拒绝新 Pod 创建请求
- 无中间态,不会"排队"或"警告"
2. ResourceQuota 是否有软限制?
官方仅支持 hard,无软配额。但集群层面有其他机制:
| 机制 | 作用 |
|---|---|
kubelet eviction-soft |
达到阈值给宽限期后才驱逐 |
| LimitRange | 单 Pod 资源约束 |
| Prometheus 告警 | 提前预警(如 80% 告警) |
实现"到 80% 告警、100% 才拒绝"需自建 Prometheus 告警规则,ResourceQuota 本身做不到。
四、一句话速记
- 亲和性 = 跟谁;拓扑域 = 多近算一起
- 硬约束不满足 = Pending;软约束不满足 = 降分
- maxSkew 校验的是"放置后"的差距
- ResourceQuota 只有 hard,软限制要靠 eviction/告警
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)