香港机房服务器的Kubernetes集群的性能调优与监控解决方案

去年我们把香港机房的生产环境迁移到 Kubernetes 集群后,性能和可扩展性得到了提升,但运维工作并没有结束。实际生产中,我很快遇到两个棘手问题:
业务高峰时,Pod 调度延迟变长,部分节点 CPU 飙升但原因不明。
有时用户反馈请求变慢,但从服务日志里看不出明显异常。
在机房里看着服务器的风扇呼呼转,却无法精确定位瓶颈的那种焦虑,我至今记忆深刻。最终,我搭建了一整套基于 Prometheus + Loki + Grafana 的监控与日志体系,并做了针对性的性能调优。以下是我的完整实践过程。
1. 机房环境与监控目标
我的香港机房服务器环境:
- Kubernetes:v1.29,12 台物理节点(3 Master + 9 Worker)
- 网络:Calico BGP 模式,双 10GbE
- 存储:Ceph RBD + 本地 SSD 缓存
- 业务类型:高并发 API + Redis + MySQL
监控目标:
- 集群节点和 Pod 的 CPU、内存、网络和磁盘指标
- Pod 调度延迟和 HPA 弹性伸缩行为
- 容器日志和业务错误日志的实时收集
- 及时定位性能瓶颈和异常节点
2. Prometheus 部署与性能调优
2.1 部署 Prometheus Operator
在 Kubernetes 上我选择用 kube-prometheus-stack(包含 Prometheus、Alertmanager、Grafana):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install hk-monitor prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespace
安装后,Prometheus 自动抓取了:
节点指标(Node Exporter)
Pod 指标(kubelet / cAdvisor)
集群状态指标(kube-state-metrics)
2.2 Prometheus 性能优化
机房有 12 台节点,Pod 数量一度超过 600,默认 Prometheus 配置很快就吃满内存。
我实际做了三步优化:
持久化存储:用 Ceph RBD 做 PVC,保证数据可靠:
volumeClaimTemplate:
spec:
storageClassName: ceph-rbd
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 200Gi
调高 Retention 策略并控制采集频率:
prometheusSpec:
retention: 15d
scrapeInterval: 15s
scrapeTimeout: 10s
15 秒采集一次足够高频,同时不会让 etcd 和 Prometheus 崩溃。
分组采集节点:避免瞬间拉取压力过高,用 honor_labels 和 relabel_configs 做批次采集。
3. Loki + Promtail 实现日志实时收集
光有指标还不够,我还需要实时日志来还原问题现场。
3.1 Loki 部署
我同样用 Helm 安装 Loki:
helm repo add grafana https://grafana.github.io/helm-charts
helm install hk-loki grafana/loki-stack --namespace monitoring
配置中我开启了 持久化存储,并限制每条日志的大小,防止网络暴涨:
loki:
persistence:
enabled: true
storageClassName: ceph-rbd
size: 100Gi
3.2 Promtail 采集容器日志
Promtail 以 DaemonSet 形式运行在每个节点,自动抓取 /var/log/containers/*.log:
clients:
- url: http://hk-loki:3100/loki/api/v1/push
scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
pipeline_stages:
- docker: {}
- labeldrop:
- filename
部署后,我在 Grafana 里能直接按 Pod 名称、命名空间实时查看日志。
4. Grafana 仪表盘与瓶颈排查
我在 Grafana 里做了几个关键仪表盘:
- 节点资源总览:CPU、内存、网络、磁盘 IOPS(快速定位异常节点)
- Pod 调度与 HPA 监控:观察 Pod 扩容/缩容的时间与效果
- 请求延迟与错误率:结合业务指标和日志分析性能问题
- 集群热力图:用 Node CPU Saturation 可直观看出负载分布
4.1 一次真实的性能瓶颈排查
有一次,香港集群在午间高峰时 API 延迟从 50ms 飙升到 400ms。
我在 Grafana 里观察到:
- 某两台节点 CPU 使用率接近 95%
- Pod 调度延迟接近 1 分钟
- Loki 显示大量日志:FailedScheduling: 0/9 nodes are available: 2 Insufficient CPU.
原因分析:
- HPA 扩容触发了,但节点 CPU 满载无法调度新 Pod
导致请求被老 Pod 拖慢
解决方案:
- 调整 HPA 策略,提前在 60% CPU 就扩容
- 为高优先级服务设置 priorityClass,确保资源分配优先
- 调整 Pod 的 requests/limits,避免单 Pod 占用过大 CPU
- 调优后,集群在高峰期依旧能平稳扩容,延迟稳定在 80ms 左右。
5. 我的经验与教训
Prometheus 存储与采集策略要提前规划,否则集群一多就会 OOM。
日志收集必须限流与分级,否则高并发场景会被日志打爆。
性能瓶颈常常是资源调度问题,监控指标 + 日志结合分析最有效。
物理机房的网络与存储优化很关键,特别是 Calico BGP 和 Ceph 调优。
经过这套实践,我在香港机房的 K8s 集群实现了:
- 分钟级问题定位
- 自动化告警 + 日志联动分析
- 资源调度效率提升 30%
- 高峰期服务稳定性大幅提升
每次在机房里盯着 Grafana 实时仪表盘,看着 Pod 弹性伸缩和节点负载平稳下来,都会有种操控整个数据中心的掌控感。