K8s在CentOS上的资源调度优化策略
调整CentOS内核参数以提升网络、文件处理及连接跟踪能力,减少调度瓶颈。关键参数包括:
fs.file-max=1000000),应对高并发场景下的文件描述符需求;net.ipv4.neigh.default.gc_thresh1=1024、gc_thresh2=4096、gc_thresh3=8192),提升网络地址解析效率;net.core.somaxconn=65535),避免TCP连接因队列满被拒绝;net.netfilter.nf_conntrack_max=10485760),适应大规模容器连接场景。/etc/sysctl.conf并通过sysctl -p生效。etcd作为K8s核心元数据存储,其性能直接影响调度效率。优化措施:
--quota-backend-bytes=4294967296,即4GB),防止数据量过大导致性能下降。根据集群规模调整APIServer参数,避免请求堆积:
--max-requests-inflight=3000、--max-mutating-requests-inflight=1000;--max-requests-inflight=1500、--max-mutating-requests-inflight=500;--enable-admission-plugins=ResourceQuota,限制命名空间资源总量,防止过度占用。通过调度策略与性能参数调整,提升调度效率与资源均衡性:
nodeAffinity将Pod调度到带特定标签的节点(如GPU节点),或用podAntiAffinity将同类Pod分散到不同节点,提升容错性与资源利用率;podTopologySpread插件,根据Zone、节点等拓扑域均衡分布Pod,避免单节点过载;--percentage-of-nodes-to-score(如设置为50%),减少调度时评估的节点数量,降低延迟。合理设置Pod的requests(调度最小资源)与limits(运行最大资源),避免资源浪费或不足:
kubectl top pods、Prometheus+Grafana监控容器的CPU/内存平均使用率与峰值;requests≈实际平均使用量(如CPU平均使用1核,则设为1),limits≥峰值使用量(如峰值2核,则设为2);Guaranteed:requests=limits,适用于关键应用;Burstable:requests<limits,适用于普通应用;BestEffort:无requests/limits,适用于批处理任务)。通过高级调度规则优化Pod分布与资源利用:
disk=ssd、gpu=nvidia),提升应用性能;topologyKey: kubernetes.io/hostname),防止单节点故障导致多个Pod不可用;kubectl taint nodes node1 key=value:NoSchedule),仅允许有对应容忍度的Pod调度过来,隔离问题节点。提升底层硬件性能,适配容器存储需求:
noop或deadline调度器(减少调度开销),SAS硬盘使用deadline(平衡吞吐与延迟);kubelet的--cpu-manager-policy=static,按NUMA拓扑分配CPU,减少跨NUMA访问的延迟;StorageClass),根据应用需求自动创建存储卷。通过监控工具实时掌握集群状态,实现资源动态扩缩容:
Horizontal Pod Autoscaler(HPA),根据CPU/内存使用率或自定义指标(如QPS)自动调整Pod数量(如targetAverageUtilization=70);Vertical Pod Autoscaler(VPA),根据历史资源使用情况自动调整Pod的requests与limits,优化资源分配。