1. 精准配置资源请求与限制(Requests/Limits)
为Pod容器设置合理的requests(调度最小资源)和limits(运行最大资源)是优化调度的核心基础。CPU配置需根据应用类型调整:计算密集型服务(如AI推理)的requests可设为峰值的50%~70%,limits略高于峰值(1.2~1.5倍);内存配置需预留20%~30%缓冲(如峰值512Mi则设为640Mi),避免OOM Killer终止容器。避免极端值(如requests过低导致调度到资源不足节点,limits过高造成闲置)。
2. 合理使用亲和性与反亲和性
通过节点亲和性(Node Affinity)将Pod调度到符合标签的节点(如disktype: ssd节点提升IO密集型应用性能);通过Pod反亲和性(Pod Anti-Affinity)避免同一应用的多个Pod集中在同一节点(如topologyKey: kubernetes.io/hostname),提升容灾能力。例如,要求Web应用Pod尽量分布在不同节点:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: [web]
topologyKey: kubernetes.io/hostname
```。
**3. 利用污点(Taints)与容忍(Tolerations)隔离资源**
为专用节点(如GPU节点)添加污点(`kubectl taint nodes gpu-node key=gpu:NoSchedule`),仅允许声明匹配容忍的Pod(如带`tolerations`的AI训练Pod)调度到该节点,避免通用Pod占用专用资源。
**4. 启用动态扩缩机制**
结合Horizontal Pod Autoscaler(HPA)根据CPU/内存或自定义指标(如QPS)动态调整Pod副本数;使用Vertical Pod Autoscaler(VPA)自动优化Pod的`requests`/`limits`;通过Cluster Autoscaler根据负载动态增减节点数量,实现资源按需分配。
**5. 优化调度策略与插件**
通过`topologySpreadConstraints`实现跨区域/机架均匀分布Pod(如`maxSkew: 1`确保同一应用的Pod在不同可用区的分布差异不超过1),提升容错性;使用调度框架(Scheduling Framework)的自定义插件(如基于实时负载的动态调度),优化调度决策。
**6. 调整内核参数提升资源利用率**
编辑`/etc/sysctl.conf`文件,优化网络与内存参数:
- `net.core.somaxconn=65535`:增加TCP连接队列长度,提升网络吞吐;
- `vm.swappiness=10`:降低内存交换概率,减少磁盘IO对应用的影响;
- `net.ipv4.tcp_tw_reuse=1`:复用TIME_WAIT状态的连接,提升网络性能。
修改后执行`sysctl -p`使配置生效。
**7. 选择高性能网络与存储插件**
使用Calico、Cilium等高性能CNI插件,提升Pod间网络通信效率;存储方面,采用Ceph、GlusterFS等分布式存储系统,提供高IO性能和数据可靠性;优先使用SSD作为节点存储(尤其是etcd节点),提升磁盘IO速度。
**8. 监控与持续优化**
通过Prometheus+Grafana监控集群的CPU、内存、网络等资源使用情况,识别资源瓶颈(如某节点CPU长期高负载);使用ELK Stack集中管理日志,快速定位性能问题(如Pod频繁重启的原因)。定期清理无用Pod、服务和卷,释放集群资源。