可靠性最佳实践
可靠性最佳实践
Section titled “可靠性最佳实践”本节提供 TKE 系统可靠性保障的最佳实践,包括监控告警、日志采集、链路追踪、备份恢复和混沌工程等关键领域。
📚 内容导航
Section titled “📚 内容导航”🏥 健康检查
Section titled “🏥 健康检查”-
Liveness Probe - 存活探针
- HTTP/TCP/Exec 探测方式
- 超时和重试配置
- 避免误杀策略
-
Readiness Probe - 就绪探针
- 流量接入控制
- 启动时间配置
- 滚动更新保护
-
Startup Probe - 启动探针
- 慢启动应用保护
- 避免 Liveness 误杀
📊 资源管理
Section titled “📊 资源管理”-
Resource Requests/Limits - 资源配额
- CPU/内存配置建议
- QoS 等级(Guaranteed/Burstable/BestEffort)
- 避免 OOMKilled
- 资源超售控制
-
ResourceQuota - 命名空间配额
- CPU/内存总量限制
- Pod 数量限制
- PVC 存储限制
-
LimitRange - 资源范围限制
- 默认 Requests/Limits
- 最小/最大资源限制
📈 监控告警
Section titled “📈 监控告警”-
Prometheus 监控 - 指标采集
- Metrics Server
- Prometheus Operator
- 自定义指标
- Grafana 可视化
-
告警规则 - 智能告警
- CPU/内存告警
- Pod 重启告警
- 磁盘空间告警
- 告警分级和通知
📝 日志采集
Section titled “📝 日志采集”- 日志方案 - 日志收集
- ELK Stack(Elasticsearch + Logstash + Kibana)
- Loki + Promtail
- 腾讯云 CLS
- 日志持久化策略
🔍 链路追踪
Section titled “🔍 链路追踪”- 分布式追踪 - 链路分析
- Jaeger
- SkyWalking
- OpenTelemetry
- 性能瓶颈分析
💾 备份恢复
Section titled “💾 备份恢复”-
ETCD 备份 - 集群数据备份
- 定期备份策略
- 快照管理
- 备份验证
-
应用数据备份 - 持久化数据保护
- PVC 快照
- Velero 备份工具
- 跨集群恢复
🌪️ 混沌工程
Section titled “🌪️ 混沌工程”- Chaos Mesh - 故障注入
- Pod 故障注入
- 网络故障模拟
- IO 故障模拟
- 压力测试
🎯 核心原则
Section titled “🎯 核心原则”1. 可观测性(Observability)
Section titled “1. 可观测性(Observability)”- 监控 - 实时了解系统状态
- 日志 - 问题排查和审计
- 追踪 - 性能瓶颈定位
2. 故障预防(Prevention)
Section titled “2. 故障预防(Prevention)”- 健康检查 - 及时发现异常
- 资源限制 - 避免资源耗尽
- 告警通知 - 快速响应
3. 快速恢复(Recovery)
Section titled “3. 快速恢复(Recovery)”- 自动重启 - 自愈能力
- 备份恢复 - 数据保护
- 回滚机制 - 快速回退
🔍 可靠性检查清单
Section titled “🔍 可靠性检查清单”- 部署 Prometheus + Grafana
- 配置核心指标告警
- 配置日志采集系统
- 启用 APM 追踪(可选)
- 配置告警通知渠道
- 配置 Liveness Probe
- 配置 Readiness Probe
- 设置 Resource Requests
- 设置 Resource Limits
- 配置日志输出
- 集成链路追踪(可选)
基础设施层面
Section titled “基础设施层面”- 启用 ETCD 定期备份
- 配置 PVC 快照策略
- 部署 Velero(可选)
- 配置节点监控
- 启用审计日志
📖 快速开始
Section titled “📖 快速开始”场景 1: 完整健康检查配置
Section titled “场景 1: 完整健康检查配置”apiVersion: apps/v1kind: Deploymentmetadata: name: reliable-appspec: replicas: 3 selector: matchLabels: app: reliable-app template: metadata: labels: app: reliable-app spec: containers: - name: app image: myapp:v1.0 ports: - containerPort: 8080
# 存活探针 - 检测进程是否存活 livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 30 # 启动后 30 秒开始检测 periodSeconds: 10 # 每 10 秒检测一次 timeoutSeconds: 5 # 超时 5 秒 failureThreshold: 3 # 连续失败 3 次重启 successThreshold: 1 # 成功 1 次即恢复
# 就绪探针 - 检测是否准备接收流量 readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 # 启动后 5 秒开始检测 periodSeconds: 5 # 每 5 秒检测一次 timeoutSeconds: 3 failureThreshold: 3 successThreshold: 1
# 启动探针 - 保护慢启动应用 startupProbe: httpGet: path: /startup port: 8080 initialDelaySeconds: 0 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 30 # 最多等待 300 秒启动 successThreshold: 1
# 资源配置 resources: requests: cpu: 200m memory: 256Mi limits: cpu: 1000m memory: 1Gi场景 2: 监控告警配置
Section titled “场景 2: 监控告警配置”apiVersion: v1kind: ConfigMapmetadata: name: prometheus-rulesdata: alerts.yaml: | groups: - name: pod-alerts interval: 30s rules: # Pod CPU 使用率告警 - alert: PodHighCPU expr: | sum(rate(container_cpu_usage_seconds_total[5m])) by (pod, namespace) > 0.8 for: 5m labels: severity: warning annotations: summary: "Pod CPU 使用率过高" description: "{{ $labels.namespace }}/{{ $labels.pod }} CPU 使用率超过 80%"
# Pod 内存使用率告警 - alert: PodHighMemory expr: | sum(container_memory_working_set_bytes) by (pod, namespace) / sum(container_spec_memory_limit_bytes) by (pod, namespace) > 0.9 for: 5m labels: severity: warning annotations: summary: "Pod 内存使用率过高" description: "{{ $labels.namespace }}/{{ $labels.pod }} 内存使用率超过 90%"
# Pod 重启告警 - alert: PodRestarting expr: | rate(kube_pod_container_status_restarts_total[15m]) > 0 for: 5m labels: severity: critical annotations: summary: "Pod 频繁重启" description: "{{ $labels.namespace }}/{{ $labels.pod }} 在过去 15 分钟内重启"
# Pod 状态异常 - alert: PodNotReady expr: | kube_pod_status_phase{phase!="Running"} == 1 for: 10m labels: severity: critical annotations: summary: "Pod 状态异常" description: "{{ $labels.namespace }}/{{ $labels.pod }} 状态为 {{ $labels.phase }}"场景 3: ETCD 备份脚本
Section titled “场景 3: ETCD 备份脚本”#!/bin/bash# ETCD 备份脚本
ETCD_ENDPOINTS="https://127.0.0.1:2379"ETCD_CERT="/etc/kubernetes/pki/etcd/server.crt"ETCD_KEY="/etc/kubernetes/pki/etcd/server.key"ETCD_CA="/etc/kubernetes/pki/etcd/ca.crt"BACKUP_DIR="/data/etcd-backup"TIMESTAMP=$(date +%Y%m%d-%H%M%S)BACKUP_FILE="$BACKUP_DIR/etcd-snapshot-$TIMESTAMP.db"
# 创建备份目录mkdir -p $BACKUP_DIR
# 执行快照etcdctl snapshot save $BACKUP_FILE \ --endpoints=$ETCD_ENDPOINTS \ --cacert=$ETCD_CA \ --cert=$ETCD_CERT \ --key=$ETCD_KEY
# 验证快照etcdctl snapshot status $BACKUP_FILE \ --write-out=table
# 清理 7 天前的备份find $BACKUP_DIR -name "etcd-snapshot-*.db" -mtime +7 -delete
echo "Backup completed: $BACKUP_FILE"🚨 常见可靠性风险
Section titled “🚨 常见可靠性风险”- ⚠️ 无健康检查 - 无法及时发现故障
- ⚠️ 无监控告警 - 问题发现延迟
- ⚠️ 无备份策略 - 数据丢失风险
- ⚠️ 无资源限制 - 资源耗尽导致雪崩
- ⚠️ 健康检查配置不当 - 误杀健康 Pod
- ⚠️ 日志未持久化 - 问题排查困难
- ⚠️ 告警规则缺失 - 关键问题未覆盖
- ⚠️ 日志级别过高 - 磁盘空间浪费
- ⚠️ 告警阈值不合理 - 告警疲劳