1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG008-Kubernetes监控与可观测性解决方案实战解析

本文档风哥主要介绍Kubernetes的监控与可观测性解决方案,包括监控概念、可观测性概念、监控工具、监控规划、告警策略、监控架构、Prometheus部署、Grafana配置、Alertmanager配置等内容,风哥教程参考Kubernetes官方文档Monitoring指南,适合DevOps工程师和系统管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 监控概述

Kubernetes的监控系统负责收集和分析集群的运行状态、资源使用情况、应用性能等数据,及时发现并解决问题,确保集群的稳定运行。

1.2 可观测性概念

Kubernetes的可观测性概念:

  • 监控(Monitoring):收集和分析系统的运行状态和性能数据
  • 日志(Logging):记录系统和应用的运行日志
  • 追踪(Tracing):跟踪请求在系统中的流转过程
  • 告警(Alerting):当系统出现异常时及时通知
  • 仪表盘(Dashboard):可视化展示系统状态和性能数据

1.3 监控工具

Kubernetes的监控工具:

,风哥提示:。

  • Prometheus:开源的监控系统和时间序列数据库
  • Grafana:开源的可视化仪表盘工具
  • Alertmanager:处理告警的工具
  • Kube-state-metrics:收集Kubernetes资源的状态指标
  • Node-exporter:收集节点的系统指标
  • Blackbox-exporter:监控网络服务的可用性
  • Promtail:收集日志并发送到Loki
  • Loki:开源的日志聚合系统

Part02-生产环境规划与建议

2.1 监控规划

生产环境Kubernetes集群的监控规划:

# 监控规划示例
– 监控对象:控制平面组件、节点、Pod、服务、存储
– 监控指标:CPU、内存、磁盘、网络、应用性能
– 监控频率:核心指标15秒,非核心指标1分钟
– 数据保留:短期数据7天,长期数据30天
– 监控工具:Prometheus + Grafana + Alertmanager
– 告警级别:紧急、重要、警告、信息
# 监控指标规划
– 控制平面:API服务器响应时间、etcd健康状态、调度器性能
– 节点:CPU使用率、内存使用率、磁盘使用率、网络流量
– Pod:CPU使用率、内存使用率、网络流量、重启次数
– 服务:请求率、错误率、响应时间
– 存储:存储使用率、IOPS、延迟
# 监控覆盖范围
– 基础设施层:服务器、网络、存储
– 平台层:Kubernetes集群、容器运行时
– 应用层:应用服务、数据库、中间件

2.2 告警策略

生产环境Kubernetes集群的告警策略:

# 告警策略示例
– 紧急(Critical):系统不可用,需要立即处理
– 重要(Major):系统性能严重下降,需要尽快处理
– 警告(Warning):系统出现异常,需要关注
– 信息(Info):系统状态变更,仅供参考
# 告警触发条件
– 节点CPU使用率 > 85% 持续5分钟
– 节点内存使用率 > 90% 持续5分钟
– 节点磁盘使用率 > 80% 持续10分钟
– Pod重启次数 > 3次 持续10分钟
– 服务错误率 > 5% 持续5分钟
– 服务响应时间 > 1秒 持续5分钟
# 告警通知方式
– 邮件:常规告警通知
– 短信:重要告警通知
– 电话:紧急告警通知
– 即时通讯:Slack、微信、钉钉等

2.3 监控架构

生产环境Kubernetes集群的监控架构:

,学习交流加群风哥微信: itpux-com。

# 监控架构示例
– 数据采集层:Node-exporter、Kube-state-metrics、应用指标
– 数据存储层:Prometheus、Loki
– 数据可视化层:Grafana
– 告警处理层:Alertmanager
– 通知层:邮件、短信、电话、即时通讯
# 高可用架构
– Prometheus:使用StatefulSet部署,配置持久化存储
– Grafana:使用Deployment部署,配置持久化存储
– Alertmanager:使用Deployment部署,配置多个实例
– 数据采集:确保所有节点都有Node-exporter运行
# 监控网络
– 监控组件之间使用内部网络通信
– 外部访问通过Ingress或NodePort
– 配置网络策略,限制监控组件的访问

Part03-生产环境项目实施方案

3.1 Prometheus部署

生产环境Kubernetes集群的Prometheus部署。,风哥提示:。

# 使用Helm部署Prometheus
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm install prometheus prometheus-community/kube-prometheus-stack
# 查看Prometheus部署状态
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 10m
prometheus-kube-prometheus-operator-5f47f6b6f9-7f5f8 1/1 Running 0 10m
prometheus-kube-state-metrics-6d4b75cb6d-7f5f8 1/1 Running 0 10m
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 10m
prometheus-prometheus-node-exporter-4q7k8 1/1 Running 0 10m
prometheus-prometheus-node-exporter-7c9x6 1/1 Running 0 10m
prometheus-prometheus-node-exporter-8d2k3 1/1 Running 0 10m
prometheus-prometheus-node-exporter-9f5g7 1/1 Running 0 10m
prometheus-prometheus-node-exporter-b7c4d 1/1 Running 0 10m
# 配置Prometheus持久化存储
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: prometheus-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prometheus-pvc
namespace: monitoring
spec:
storageClassName: prometheus-storage
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 50Gi,学习交流加群风哥QQ113257174。

3.2 Grafana配置

生产环境Kubernetes集群的Grafana配置:

# 查看Grafana部署状态
$ kubectl get pods -n monitoring | grep grafana
prometheus-grafana-6d4b75cb6d-7f5f8 1/1 Running 0 10m
# 访问Grafana
$ kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring
# 配置Grafana数据源
– 登录Grafana(默认用户名:admin,密码:prom-operator)
– 点击左侧菜单的”Configuration” -> “Data sources”
– 点击”Add data source”
– 选择”Prometheus”
– 输入Prometheus的URL(例如:http://prometheus-kube-prometheus-prometheus.monitoring:9090)
– 点击”Save & Test”
# 导入Grafana仪表盘
– 点击左侧菜单的”Dashboards” -> “Import”
– 输入仪表盘ID(例如:15761 for Kubernetes Cluster)
– 选择Prometheus数据源
– 点击”Import”

3.3 Alertmanager配置

生产环境Kubernetes集群的Alertmanager配置。

# 查看Alertmanager部署状态
$ kubectl get pods -n monitoring | grep alertmanager
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 10m
# 配置Alertmanager告警规则
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kubernetes-rules
namespace: monitoring
spec:
groups:
– name: kubernetes
rules:
– alert: NodeHighCPU
expr: (sum by(instance) (rate(node_cpu_seconds_total{mode!=”idle”}[5m])) / (sum by(instance) (rate(node_cpu_seconds_total[5m]))) * 100 > 85
for: 5m
labels:
severity: critical
annotations:
summary: “Node CPU Usage High”
description: “Node {{ $labels.instance }} CPU usage is {{ $value }}%”
– alert: NodeHighMemory
expr: (node_memory_MemTotal_bytes – node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: “Node Memory Usage High”
description: “Node {{ $labels.instance }} memory usage is {{ $value }}%”
# 配置Alertmanager通知
apiVersion: v1
kind: Secret
metadata:,更多视频教程www.fgedu.net.cn。
name: alertmanager-prometheus-kube-prometheus-alertmanager
namespace: monitoring
type: Opaque
data:
alertmanager.yaml: |
global:
resolve_timeout: 5m
route:
group_by: [‘alertname’]
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: ’email’
receivers:
– name: ’email’
email_configs:
– to: ‘admin@example.com’
from: ‘alertmanager@example.com’
smarthost: ‘smtp.example.com:587’
auth_username: ‘alertmanager’
auth_password: ‘password’
require_tls: true
send_resolved: true

Part04-生产案例与实战讲解

4.1 Prometheus监控

生产环境Kubernetes集群的Prometheus监控。

# 查看Prometheus指标
$ kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090:9090 -n monitoring
# 访问Prometheus UI
http://localhost:9090
# 查看节点CPU使用率
sum by(instance) (rate(node_cpu_seconds_total{mode!=”idle”}[5m])) / sum by(instance) (rate(node_cpu_seconds_total[5m])) * 100
# 查看节点内存使用率
(node_memory_MemTotal_bytes – node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
# 查看Pod CPU使用率
sum by(pod) (rate(container_cpu_usage_seconds_total{container!=””}[5m]))
# 查看Pod内存使用率
sum by(pod) (container_memory_usage_bytes{container!=””})
# 查看服务请求率
sum by(service) (rate(container_http_requests_total[5m]))
# 查看服务错误率
sum by(service) (rate(container_http_errors_total[5m])) / sum by(service) (rate(container_http_requests_total[5m])) * 100

4.2 Grafana仪表盘

生产环境Kubernetes集群的Grafana仪表盘。

# 查看Grafana仪表盘
$ kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring
# 访问Grafana UI
http://localhost:3000
# 常用仪表盘
– Kubernetes Cluster (ID: 15761)
– Node Exporter Full (ID: 1860)
– Prometheus 2.0 Overview (ID: 3662),更多学习教程公众号风哥教程itpux_com。
– Kubernetes Pods (ID: 6417)
– Kubernetes Persistent Volumes (ID: 14207)
# 创建自定义仪表盘
– 点击左侧菜单的”Dashboards” -> “New dashboard”
– 点击”Add new panel”
– 选择Prometheus数据源
– 输入查询语句
– 配置面板标题、单位、阈值等
– 点击”Apply”
– 点击”Save dashboard”

4.3 告警实现

生产环境Kubernetes集群的告警实现。

# 查看告警状态
$ kubectl get prometheusrules -n monitoring
$ kubectl get alerts -n monitoring
# 查看Alertmanager状态
$ kubectl port-forward svc/alertmanager-prometheus-kube-prometheus-alertmanager 9093:9093 -n monitoring
# 访问Alertmanager UI
http://localhost:9093
# 测试告警
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: test-app
template:
metadata:
labels:
app: test-app
spec:
containers:
– name: test-app
image: nginx
resources:
limits:
cpu: “100m”
memory: “128Mi”
requests:
cpu: “100m”
memory: “128Mi”
ports:
– containerPort: 80
# 生成高CPU负载
$ kubectl exec -it $(kubectl get pods -l app=test-app -o jsonpath='{.items[0].metadata.name}’) — stress –cpu 1 –timeout 60s
# 查看告警
$ kubectl get alerts -n monitoring

Part05-风哥经验总结与分享

5.1 监控最佳实践

Kubernetes监控的最佳实践:

    ,from K8S+DB视频:www.itpux.com。

  • 全面监控:监控所有层次的组件,包括基础设施、平台和应用
  • 合理设置告警阈值:根据实际情况设置合理的告警阈值,避免误报
  • 分层告警:根据告警的严重程度进行分层,优先处理紧急告警
  • 自动化响应:对于常见问题,实现自动化响应和修复
  • 定期审查:定期审查监控配置和告警规则,确保其有效性
  • 数据可视化:使用Grafana等工具创建直观的仪表盘,便于快速理解系统状态
  • 高可用设计:确保监控系统本身的高可用性,避免监控盲区
  • 持续优化:根据实际运行情况,持续优化监控配置和告警策略

5.2 常见监控问题

Kubernetes监控的常见问题。

# 常见问题及解决方案。
## 1. 监控数据丢失
– 原因:Prometheus存储空间不足,数据采集失败
– 解决方案:增加存储空间,检查数据采集配置
## 2. 告警误报
– 原因:告警阈值设置不合理,监控数据波动
– 解决方案:调整告警阈值,增加告警持续时间
## 3. 监控系统性能问题
– 原因:监控数据量过大,Prometheus配置不当
– 解决方案:优化Prometheus配置,增加资源配额
## 4. 监控盲区
– 原因:部分组件未被监控,监控覆盖不全
– 解决方案:检查监控配置,确保所有组件都被监控
## 5. 告警通知延迟
– 原因:Alertmanager配置不当,通知渠道故障
– 解决方案:检查Alertmanager配置,确保通知渠道正常

5.3 监控优化建议

Kubernetes监控的优化建议:

  1. 监控架构优化:采用分层监控架构,将监控数据按重要性分级存储
  2. 数据采集优化:调整数据采集频率,对不同指标采用不同的采集频率
  3. 存储优化:使用长期存储方案,如Thanos或Victoria Metrics,存储历史数据
  4. 查询优化:优化Prometheus查询语句,减少查询时间
  5. 告警优化:使用告警分组和抑制规则,减少告警风暴
  6. 可视化优化:创建符合业务需求的自定义仪表盘,提高监控效率
  7. 自动化优化:实现监控配置的自动化管理,减少人工干预
  8. 灾备优化:配置监控系统的灾备方案,确保监控系统的可靠性
持续监控:Kubernetes的监控是一个持续的过程,随着集群规模和应用需求的变化,需要不断调整和优化监控配置,确保监控系统的有效性和可靠性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息