在CentOS上配置Kubernetes监控前,需确保以下基础环境已就绪:
kubectl get nodes验证节点状态为Ready);kubectl命令行工具(版本与集群版本兼容);Prometheus Operator是Kubernetes原生的监控解决方案,可自动化Prometheus、Alertmanager、Grafana等组件的部署与管理。
# 添加Prometheus Community Helm仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 安装Prometheus Operator(包含Prometheus、Alertmanager、Grafana)
helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
此命令会自动创建monitoring命名空间,并部署以下组件:
Prometheus通过ServiceMonitor资源自动发现Kubernetes集群中的服务(如kube-state-metrics、Node Exporter)。若需自定义采集目标,可编辑Prometheus的ServiceMonitor配置:
# 查看Prometheus的ServiceMonitor列表
kubectl get servicemonitors -n monitoring
# 示例:自定义采集名为"my-app"的应用指标(需提前部署对应的Exporter)
cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: my-app # 目标应用的标签
endpoints:
- port: metrics # 应用暴露指标的端口名称
interval: 15s # 采集间隔
EOF
默认情况下,Prometheus Operator会自动配置以下核心组件的采集:
Grafana通过Prometheus作为数据源,展示集群监控数据的仪表盘。
# 获取Grafana的管理员密码(首次登录需使用)
kubectl get secret -n monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
# 端口转发Grafana服务到本地(方便访问)
kubectl port-forward -n monitoring svc/grafana 3000:80
# 访问Grafana(在浏览器中打开)
http://<CentOS节点IP>:3000
登录后(默认用户名/密码:admin + 上述获取的密码),完成以下配置:
Configuration > Data Sources,点击Add data source,选择Prometheus,填写URL为http://prometheus-operated.monitoring.svc.cluster.local:9090(Prometheus服务的集群内地址),点击Save & Test验证连接;Dashboards > Import,输入以下常用仪表盘ID(覆盖Kubernetes监控的核心场景):
1860:Kubernetes集群状态(节点、Pod、Namespace);2027:Kubernetes节点资源使用率(CPU、内存、磁盘);2111:Kubernetes Pod资源使用率(CPU、内存);4086:Kubernetes网络流量监控。通过PrometheusRule资源定义告警规则,当集群出现异常时触发Alertmanager通知。示例如下:
# 创建告警规则文件(如k8s-alerts.yaml)
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: k8s-alerts
namespace: monitoring
spec:
groups:
- name: kubernetes-alerts
rules:
# 告警:Pod CPU使用率超过85%(持续2分钟)
- alert: HighPodCPUUsage
expr: sum(rate(container_cpu_usage_seconds_total{namespace!="", pod!="", container!="POD"}[5m])) by (namespace, pod, container) > 0.85
for: 2m
labels:
severity: critical
annotations:
summary: "Pod CPU使用率过高({{ $labels.namespace }}/{{ $labels.pod }}/{{ $labels.container }})"
description: "Pod {{ $labels.pod }} 的CPU使用率已超过85%,持续2分钟。"
# 告警:节点内存使用率超过90%(持续5分钟)
- alert: HighNodeMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "节点内存使用率过高({{ $labels.instance }})"
description: "节点 {{ $labels.instance }} 的内存使用率已超过90%,持续5分钟。"
应用告警规则:
kubectl apply -f k8s-alerts.yaml
Alertmanager会根据规则发送通知,需提前配置通知渠道(如邮件、Slack),编辑values.yaml文件(Helm安装时使用的配置文件)中的alertmanager.config部分即可。
若未通过Prometheus Operator自动部署,可手动安装:
kubectl apply -f https://github.com/kubernetes-sigs/kube-state-metrics/releases/latest/download/components.yaml
此组件会暴露集群资源的详细状态指标(如Pod的重启次数、Deployment的副本数),供Prometheus采集。
若未通过Prometheus Operator自动部署,可手动创建DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/prometheus/node_exporter/master/examples/node-exporter-daemonset.yaml
此DaemonSet会在每个节点上运行Node Exporter,采集节点的CPU、内存、磁盘、网络等硬件指标。
检查Prometheus是否正常运行:
kubectl get pods -n monitoring -l app.kubernetes.io/name=prometheus
若所有Pod状态为Running,则表示Prometheus已启动。
访问Grafana仪表盘:
通过http://<CentOS节点IP>:3000登录Grafana,查看导入的仪表盘是否有数据(如节点CPU、内存使用率)。
触发告警测试:
手动创建一个高CPU使用的Pod(如stress容器),观察Prometheus是否生成告警,并通过Alertmanager发送通知。
ServiceMonitor的selector是否匹配目标服务的标签,或Prometheus的scrape_interval是否设置过短;expr表达式是否正确,或Prometheus的evaluation_interval是否设置过长。通过以上步骤,可在CentOS上为Kubernetes集群搭建一套完整的监控体系,实现对集群状态、资源使用、应用性能的全面监控与告警。