硬件是集群性能的基础,需根据工作负载需求合理配置:
调整内核参数以提升网络和系统性能,编辑/etc/sysctl.conf并执行sysctl -p生效:
net.core.somaxconn=65535(增加监听队列长度)、net.ipv4.tcp_max_syn_backlog=65535(提升SYN请求处理能力)、net.ipv4.ip_local_port_range=1024 65535(扩大临时端口范围)、net.ipv4.tcp_tw_reuse=1(复用TIME-WAIT连接)、net.ipv4.tcp_fin_timeout=30(缩短FIN等待时间);vm.swappiness=10(降低交换分区使用概率,避免内存不足时频繁换页)。针对核心组件进行配置优化,提升集群处理能力:
--concurrent-endpoints=1000(增加端点并发处理能力)、--max-pods=110(提升单节点Pod密度,默认110为Debian下的合理值);设置资源请求/限制(如resources.requests.cpu="500m"、resources.limits.memory="512Mi"),避免Pod争抢资源;ip_vs、ip_vs_rr等模块),相比iptables模式,IPVS在大规模集群中性能更优;调整--conntrack-max=131072(增大连接跟踪表大小)、--conntrack-tcp-timeout=3600(优化TCP连接超时);--max-requests-inflight=1000(提升并发请求数)、--requestheader-allowed-names(扩展允许的请求头名称),确保高负载下的稳定性;--cpu=1000m、--memory=2Gi),避免组件本身成为瓶颈。网络是K8S集群的关键瓶颈,需选择高性能方案并优化配置:
9000,否则保持1500),减少数据包分片;NetworkPolicy限制Pod间不必要的流量(如仅允许同命名空间内的Pod通信),降低网络负载;cache 300),减少DNS查询延迟。存储性能直接影响有状态应用(如数据库)的运行效率:
StorageClass实现动态卷供应;ReadWriteOnce用于单节点访问、ReadOnlyMany用于只读副本),设置合理的reclaimPolicy(如Delete用于临时数据、Retain用于重要数据);compression特性),节省空间并提升I/O性能。轻量级镜像可缩短启动时间、减少资源占用:
FROM golang:1.21 AS builder编译代码,FROM alpine:latest作为运行时),移除编译过程中的临时文件和依赖;/var/cache/apt/archives)、缓存(如pip cache),减少镜像层数(合并RUN指令)。合理调度Pod,提升集群资源利用率和负载均衡:
requiredDuringSchedulingIgnoredDuringExecution强制调度到带GPU的节点);topologyKey: kubernetes.io/hostname),避免单节点故障导致服务中断;kubectl taint nodes master node-role.kubernetes.io/control-plane=true:NoSchedule),防止普通Pod占用控制平面资源。持续监控集群状态,及时发现并解决性能瓶颈:
INFO而非DEBUG),避免过多日志占用磁盘空间;targetCPUUtilizationPercentage=80)自动调整Pod副本数;使用Cluster Autoscaler,根据负载动态增减节点数量。etcd是K8S的核心存储组件,其性能直接影响集群稳定性:
--snapshot-count=100000(增大快照间隔,减少磁盘写入次数)、--quota-backend-bytes=8G(设置后端存储上限,避免磁盘空间耗尽);etcdctl snapshot save /backup/etcd.db),确保数据安全。以上优化技巧需根据实际工作负载(如计算密集型、IO密集型)和集群规模(如10节点以内、100节点以上)进行调整,建议在测试环境中验证后再应用到生产环境。