Kubernetes SLO 监控部署指南

Kubernetes SLO 监控部署指南

本文档说明如何基于Sloth SLO规范部署Kubernetes集群的SLO监控系统。

文件说明

1. k8s-slo.yaml - Sloth SLO规范文件

这是主要的SLO定义文件,包含8个关键的SLO指标:

  • 集群可用性SLO (99.9%): 监控节点和Pod运行状态
  • API Server可用性SLO (99.95%): 监控API请求响应
  • API Server延迟SLO (99%): 监控API响应时间
  • 节点资源可用性SLO (95%): 监控CPU和内存使用率
  • 网络可用性SLO (99.5%): 监控网络丢包情况
  • 存储可用性SLO (99.8%): 监控持久化存储状态
  • 应用可用性SLO (99.5%): 监控应用Pod健康状态
  • 调度器性能SLO (99%): 监控调度器效率

2. vmalert-slo-rules.yaml - vmalert规则文件

包含所有SLO相关的记录规则和告警规则,分为三个主要部分:

  • SLI记录规则: 计算各个SLO的错误率
  • SLO元数据: 定义SLO目标和错误预算
  • 告警规则: 基于SLO违反情况触发告警

部署步骤

步骤1: 安装Sloth工具

1
2
3
4
5
# 使用Go安装
go install github.com/slok/sloth/cmd/sloth@latest

# 或使用Docker
docker run --rm -v $(pwd):/workspace -w /workspace slok/sloth:latest

步骤2: 生成Prometheus规则

1
2
3
4
# 使用Sloth生成Prometheus规则
sloth generate -i k8s-slo.yaml -o prometheus-rules.yaml

# 或者直接使用我们提供的vmalert规则文件

步骤3: 部署vmalert规则

1
2
3
4
# 将vmalert-slo-rules.yaml应用到集群
kubectl apply -f vmalert-slo-rules.yaml

# 或者直接配置到vmalert中

步骤4: 配置vmalert

在vmalert的配置中添加规则文件路径:

1
2
3
4
groups:
  - name: "k8s-slo-rules"
    rules:
      - include: "vmalert-slo-rules.yaml"

监控指标说明

SLI指标 (Service Level Indicator)

每个SLO都有对应的SLI指标,格式为:

1
slo:sli_error:ratio_rate5m{sloth_id="...", sloth_service="k8s-cluster", sloth_slo="..."}

错误预算 (Error Budget)

错误预算表示允许的失败率:

  • 集群可用性: 0.1% (1-99.9%)
  • API Server可用性: 0.05% (1-99.95%)
  • API Server延迟: 1% (1-99%)
  • 节点资源: 5% (1-95%)
  • 网络: 0.5% (1-99.5%)
  • 存储: 0.2% (1-99.8%)
  • 应用: 0.5% (1-99.5%)
  • 调度器: 1% (1-99%)

告警配置

页面级告警 (Page Alert)

  • 集群可用性
  • API Server可用性
  • API Server延迟

工单级告警 (Ticket Alert)

  • 节点资源可用性
  • 网络可用性
  • 存储可用性
  • 应用可用性
  • 调度器性能

自定义配置

修改集群名称

k8s-slo.yaml中修改:

1
2
labels:
  cluster: "your-cluster-name"

调整SLO目标

修改各个SLO的objective字段:

1
2
- name: "cluster-availability"
  objective: 99.95  # 从99.9改为99.95

添加新的SLO

参考现有SLO格式,添加新的监控指标。

验证部署

1. 检查规则是否生效

1
2
3
4
5
# 检查vmalert规则
curl http://vmalert:8880/api/v1/rules

# 检查Prometheus指标
curl http://prometheus:9090/api/v1/query?query=slo:sli_error:ratio_rate5m

2. 查看SLO仪表板

在Grafana中创建基于以下指标的仪表板:

  • slo:sli_error:ratio_rate5m
  • slo:objective:ratio
  • slo:error_budget:ratio

3. 测试告警

可以通过修改规则或模拟故障来测试告警是否正常工作。

故障排除

常见问题

  1. 指标不存在: 检查Prometheus是否收集了相应的Kubernetes指标
  2. 规则不生效: 确认vmalert配置正确,规则文件路径正确
  3. 告警不触发: 检查告警表达式和阈值设置

调试命令

1
2
3
4
5
6
# 检查vmalert日志
kubectl logs -f deployment/vmalert

# 验证PromQL表达式
curl -X POST http://prometheus:9090/api/v1/query \
  -d 'query=sum(rate(apiserver_request_total{code=~"(5..|429)"}[5m]))'

最佳实践

  1. 分层告警: 使用页面级和工单级告警区分严重程度
  2. 渐进式阈值: 设置多个时间窗口的告警阈值
  3. 文档化: 为每个SLO提供详细的故障排除指南
  4. 定期审查: 定期审查SLO目标和告警阈值
  5. 自动化: 使用Sloth工具自动生成和更新规则

参考资源

0%