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、服務和卷,釋放集群資源。