K8S生产环境优化指南
K8S生产环境优化指南:从零到百亿级请求的实战经验
作为运维过多个千节点K8S集群的老司机,今天分享一套经过生产验证的优化方案。以下优化策略均基于真实踩坑案例,可直接套用到你的集群中。
一、硬件优化:把钱花在刀刃上
-
节点选型黄金法则
- CPU密集型业务(如AI训练)用计算优化型实例(如AWS C5)
- 内存数据库用内存优化型实例(如阿里云r7g)
- 关键技巧:混用按需实例+Spot实例(竞价实例),成本直降70%
-
存储性能翻倍秘诀
# 生产环境必须用本地SSD(延迟<1ms) kubectl get nodes -o jsonpath='{.items[*].metadata.labels}' | grep 'node.kubernetes.io/instance-type'- etcd集群必须独占NVMe SSD,禁止与其他服务混用
- 日志存储用高性能云盘,业务存储用本地SSD
二、软件优化:让集群跑得更稳
-
资源管控生死线
# 必须设置!防止单个Pod吃光节点资源 resources: requests: cpu: "500m" # 按实际50%~70%设置 memory: "512Mi" limits: cpu: "1000m" # 不超过节点核数的80% memory: "1024Mi"- 忘记设置limits导致OOM kill的案例:某电商大促期间日志服务崩溃
-
自动扩缩容实战配置
- HPA(水平扩缩容)搭配Cluster Autoscaler
# 基于QPS的弹性伸缩(比CPU更精准) metrics: - type: Pods pods: metric: name: http_requests target: type: AverageValue averageValue: 1000
三、架构优化:支撑百万级并发
-
调度算法黑科技
- 避免默认BestFit调度,改用Spread优先调度
# 强制Pod分散在不同可用区 topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule -
服务网格性能陷阱
- Istio默认配置会导致40%性能损耗!优化方案:
- 关闭Mixer组件(已废弃)
- 启用Sidecar自动缩放
# 限制Sidecar资源占用 sidecar.istio.io/proxyCPU: "500m" sidecar.istio.io/proxyMemory: "512Mi"
- Istio默认配置会导致40%性能损耗!优化方案:
四、安全优化:防黑客也防手滑
-
权限管控三板斧
- 所有ServiceAccount必须绑定最小权限
- 启用PodSecurityPolicy(PSP)或Open Policy Agent(OPA)
# 审计高风险操作 kubectl create clusterrole audit-viewer --verb=get,list --resource=pods,secrets -
网络隔离生存指南
# 只允许前端访问后端服务 kind: NetworkPolicy ingress: - from: - podSelector: matchLabels: role: frontend
五、成本优化:老板笑着批预算
-
资源利用率压榨术
- 使用KubeCost+Prometheus监控浪费资源
- 夜间自动缩容非关键业务(如报表系统)
# 找出闲置Pod(请求量>实际使用量) kubectl top pod --containers | awk '$3 > $4 {print $0}' -
存储省钱妙招
- 日志卷用生命周期管理自动转存到OSS
- 使用CSI插件实现存储卷动态扩容(避免过度预分配)
六、故障自愈:让集群学会自己看病
-
Pod健康检查双保险
livenessProbe: exec: command: ["curl", "http://localhost:8080/healthz"] initialDelaySeconds: 15 # 避免误杀启动慢的服务 readinessProbe: httpGet: path: /ready port: 8080 -
节点自动修复脚本
# 检测异常节点并自动排水 while true; do for node in $(kubectl get nodes | grep NotReady | awk '{print $1}'); do kubectl drain $node --ignore-daemonsets --delete-emptydir-data done sleep 300 done
实战清单:每月必做的5项检查
kubectl top node查看节点负载均衡性etcdctl endpoint status检查etcd健康度- 审核NetworkPolicy是否按最小权限开放
- 清理Evicted状态Pod:
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod - 检查HPA配置是否达到预期效果
参考资料:
浙公网安备 33010602011771号