Kubernetes在Linux上如何监控
导读:Kubernetes 在 Linux 上的监控实践 一 监控分层与组件 建议按层级构建可观测性:基础资源、容器与编排、日志、可视化与告警、主机与内核。 核心组件与作用如下: 层级 组件 作用与端口/地址 基础资源 Metr...
Kubernetes 在 Linux 上的监控实践
一 监控分层与组件
- 建议按层级构建可观测性:基础资源、容器与编排、日志、可视化与告警、主机与内核。
- 核心组件与作用如下:
| 层级 | 组件 | 作用与端口/地址 |
|---|---|---|
| 基础资源 | Metrics Server | 为 HPA/VPA/Cluster Autoscaler 提供资源指标(如 CPU/内存),是 K8s 资源度量的聚合入口 |
| 节点与系统 | node_exporter(DaemonSet) | 暴露节点级指标(CPU、内存、磁盘、网络),默认端口 9100 |
| 容器与编排 | cAdvisor(已集成于 kubelet) | 收集容器资源与性能,默认 10250/10255 路径 |
| 编排状态 | kube-state-metrics | 将 Pod/Deployment/Node 等对象状态转为指标 |
| 可视化与告警 | Prometheus + Alertmanager + Grafana | 指标抓取、存储、告警与可视化 |
| 日志 | Loki 或 ELK(Elasticsearch/Logstash/Kibana) | 聚合与检索容器与节点日志 |
| 主机与内核 | Linux 工具(如 nmon) | 辅助排查节点性能与瓶颈 |
以上组件覆盖了节点、容器、编排对象与日志的全链路监控需求,适合在 CentOS/RHEL 等 Linux 发行版上落地。
二 快速上手 Prometheus + Grafana
- 使用 Helm 一键部署监控栈(推荐):
- 添加仓库并安装 kube-prometheus-stack(内含 Prometheus/Alertmanager/Operator 与默认仪表盘):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace - 单独安装 Grafana(如未随栈安装):
helm repo add grafana https://grafana.github.io/helm-charts helm install grafana grafana/grafana --namespace monitoring - 获取 Grafana 管理员密码并端口转发以便访问:
kubectl get secret -n monitoring grafana -o jsonpath='{ .data.admin-password} ' | base64 -d kubectl port-forward -n monitoring svc/grafana 3000:80 - 在 Grafana 中添加数据源 Prometheus(服务地址:http://prometheus-server.monitoring.svc.cluster.local:9090),导入官方仪表盘(如 Kubernetes Cluster Monitoring)。
- 添加仓库并安装 kube-prometheus-stack(内含 Prometheus/Alertmanager/Operator 与默认仪表盘):
- 手动最小可用方案(适合学习/验证):
- 在宿主机部署 node_exporter(每个节点):
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz tar -xvf node_exporter-1.2.2.linux-amd64.tar.gz & & cd node_exporter-1.2.2.linux-amd64 ./node_exporter - 配置 Prometheus 抓取节点与 K8s 目标(prometheus.yml 片段):
scrape_configs: - job_name: 'node_exporter' static_configs: - targets: ['< node1_ip> :9100','< node2_ip> :9100'] - job_name: 'kubernetes-nodes' scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/${ 1} /proxy/metrics - 启动 Prometheus 并访问 http://< prometheus_host> :9090 验证 Targets 健康。
- 在宿主机部署 node_exporter(每个节点):
三 日志监控与可视化
- 日志方案选型:
- Loki + Grafana:轻量、与 Prometheus 生态一致,适合云原生场景。
helm install loki grafana/loki-stack --namespace monitoring # Grafana 添加 Loki 数据源:http://loki.monitoring.svc.cluster.local:3100 - ELK(Elasticsearch/Logstash/Kibana):功能全面,适合复杂检索与分析。
- Loki + Grafana:轻量、与 Prometheus 生态一致,适合云原生场景。
- 常用日志操作:
kubectl logs < pod-name> -n < namespace> kubectl logs -f < pod-name> -n < namespace> # 实时跟踪 kubectl get events --all-namespaces --sort-by=.metadata.creationTimestamp - 在 Grafana 中通过 Explore 选择 Loki 数据源,使用标签选择器(如 { namespace=“default”, pod=“myapp”} )查询日志。
四 快速排障与常用命令
- 资源与事件查看:
kubectl get nodes kubectl get pods --all-namespaces kubectl get deployments --all-namespaces kubectl get services --all-namespaces kubectl describe pod < pod-name> -n < namespace> kubectl describe deployment < deploy-name> -n < namespace> kubectl get events --all-namespaces --sort-by=.metadata.creationTimestamp - 可视化与 Web UI:
- Kubernetes Dashboard:快速查看与操作资源。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml kubectl proxy # 访问:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ # 获取 Token:kubectl -n kube-system create token admin-user - Cockpit(CentOS/RHEL 自带 Web 管理):
yum install -y cockpit systemctl enable --now cockpit.socket firewall-cmd --permanent --add-service=cockpit & & firewall-cmd --reload # 访问:http://< server_ip> :9090
- Kubernetes Dashboard:快速查看与操作资源。
- 第三方监控(企业级):如 Datadog、New Relic、Sysdig,提供开箱即用的 K8s 监控、日志与 APM 能力。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes在Linux上如何监控
本文地址: https://pptw.com/jishu/764088.html
