在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集群搭建一套完整的監控體系,實現對集群狀態、資源使用、應用性能的全面監控與告警。