Kubernetes在CentOS上的资源调度策略如何
导读:Kubernetes 在 CentOS 上的资源调度策略概览 在 CentOS 上,Kubernetes 的调度行为与操作系统无关,核心由 kube-scheduler 完成:监听未绑定 NodeName 的 Pod,经过预选(过滤)—优选...
Kubernetes 在 CentOS 上的资源调度策略概览
在 CentOS 上,Kubernetes 的调度行为与操作系统无关,核心由 kube-scheduler 完成:监听未绑定 NodeName 的 Pod,经过预选(过滤)—优选(打分)—绑定三个阶段选出最优节点;常见扩展包括节点亲和性/反亲和性、污点与容忍、拓扑分布约束、优先级与抢占、多调度器等,用于满足业务对性能、容错与资源效率的诉求。
核心调度策略与机制
- 资源请求与限制驱动调度与运行时隔离
• 调度器以容器的 requests 为基准进行装箱,节点上所有 Pod 的 requests 总和不得超过节点可分配容量;运行时 limits 限制上限,CPU 为可压缩资源(超限限速),内存为不可压缩资源(超限会被 OOMKilled)。
• 服务质量(QoS)分类影响驱逐顺序:Guaranteed(requests=limits)> Burstable(requests< limits)> BestEffort(未设)。
• 建议为所有业务容器显式设置 requests/limits,避免资源争用与不稳定。 - 亲和性与反亲和性
• 节点亲和性:将 Pod 调度到带特定标签的节点(如 SSD、GPU 等)。
• Pod 反亲和性:避免相同应用的多个副本落在同一节点/机架,提高容灾。 - 污点与容忍
• 通过给节点打污点(如 NoSchedule)隔离用途(如 master 节点默认带污点),只有声明容忍的 Pod 才能调度其上。 - 拓扑分布约束
• 使用 topologySpreadConstraints 按 zone/机架/hostname 均匀分布副本,控制最大偏差(maxSkew),提升可用性与资源利用均衡。 - 优先级与抢占、多调度器
• 为关键业务设置优先级,资源紧张时支持抢占低优先级 Pod;可按工作负载部署多个调度器并行使用。
CentOS 场景下的落地配置要点
- 为节点打标签并约束调度
• 标记节点属性:kubectl label nodes disktype=ssd zone=foo
• 示例:节点亲和性仅调度到 SSD 节点;Pod 反亲和性避免同节点运行相同应用副本;为专用节点(如 GPU)设置污点并让业务 Pod 声明容忍。 - 设置 requests/limits 与 QoS
• 示例:requests 保障调度所需,limits 保护节点稳定;核心服务尽量使用 Guaranteed 降低被驱逐风险。 - 命名空间级配额与默认限额
• 使用 ResourceQuota 限制命名空间总资源;用 LimitRange 设置默认 requests/limits,避免“无限制”与配置遗漏。 - 控制平面与系统资源预留
• 保持 master 污点 不被业务抢占,必要时为系统组件预留资源:kubelet --system-reserved=cpu=500m,memory=1Gi --kube-reserved=cpu=200m,memory=512Mi。 - 常见排障
• Pod 长期 Pending:kubectl describe pod 查看事件;检查节点资源、亲和/污点/配额是否阻断调度。
• 容器 OOMKilled:适当提高内存 limits 或优化应用内存占用。
调度优化与弹性扩缩
- 调度优化
• 统一 requests 规格减少节点碎片;结合 亲和/反亲和、拓扑分布 提升容错与数据局部性;必要时启用 优先级/抢占 保障关键负载。 - 弹性伸缩
• HPA(基于 CPU/内存或自定义指标)自动扩缩 Pod 数量;
• VPA 自动建议/更新 requests/limits,减少人工调参成本;
• Cluster Autoscaler 根据节点资源压力自动增减节点,配合调度策略实现“调度+容量”联动。
示例配置片段
- 节点亲和性与 Pod 反亲和性(关键业务均匀分布)
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values: ["ssd"]
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["web"]
topologyKey: kubernetes.io/hostname
- 污点与容忍(专用 GPU 节点)
# 节点打污点
kubectl taint nodes node-gpu1 accelerator=nvidia:NoSchedule
# Pod 容忍
tolerations:
- key: "accelerator"
operator: "Equal"
value: "nvidia"
effect: "NoSchedule"
- 资源请求与限制(QoS:Burstable)
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1"
- 拓扑分布约束(跨节点均衡)
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: web
- 命名空间配额与默认限额
# ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: prod
spec:
hard:
requests.cpu: "10"
requests.memory: "20Gi"
limits.cpu: "20"
limits.memory: "40Gi"
# LimitRange
apiVersion: v1
kind: LimitRange
metadata:
name: default-limit
namespace: prod
spec:
limits:
- default:
memory: "512Mi"
cpu: "500m"
defaultRequest:
memory: "256Mi"
cpu: "250m"
type: Container
上述策略与示例可直接用于 CentOS 节点,关键在于:为节点与业务合理打标签、为容器设置合适的 requests/limits、用 亲和/反亲和与拓扑分布 控制布局、以 配额与默认限额 做治理,并配合 HPA/CA 实现弹性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes在CentOS上的资源调度策略如何
本文地址: https://pptw.com/jishu/775314.html
