上一篇 下一篇 分享链接 返回 返回顶部

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

发布人:Minchunlin 发布时间:2025-08-04 20:46 阅读量:523


去年我们把香港机房的生产环境迁移到 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 弹性伸缩和节点负载平稳下来,都会有种操控整个数据中心的掌控感。

目录结构
全文