在 Debian 上监控 Kubernetes 的实用方案
一 快速巡检与日志排查
- 使用 kubectl 查看集群与资源状态:
- 查看集群连通性:kubectl cluster-info
- 查看节点健康:kubectl get nodes
- 查看全命名空间 Pod:kubectl get pods --all-namespaces
- 查看事件:kubectl get events --all-namespaces
- 查看控制面与节点组件日志(systemd):
- kubelet:sudo journalctl -u kubelet -f
- kube-proxy:sudo journalctl -u kube-proxy -f
- 节点资源与进程快速检查(在节点上执行):
- 资源:top / htop、free -m、df -h、iostat -x 1
- 网络:ss -tulpen | grep :6443、conntrack -S
- 可视化辅助:
- Kubernetes Dashboard:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml,本地代理访问:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/。
二 指标监控与可视化推荐
-
核心组件与数据流
- 采集侧:Node Exporter(节点级指标)、kube-state-metrics(资源对象状态)、cAdvisor(容器资源,通常内置在 Kubelet)、应用自定义 Exporter。
- 存储与查询:Prometheus 负责拉取与存储,使用 PromQL 查询。
- 可视化与告警:Grafana 做面板展示;Alertmanager 负责分组、抑制与路由告警。
- 交付方式:使用 Prometheus Operator / kube-prometheus-stack 以 CRD 方式声明式管理抓取目标(ServiceMonitor/PodMonitor)。
-
快速部署步骤(Helm)
- 准备命名空间与工具
- kubectl create namespace monitoring
- 安装 Helm(如未安装)
- 添加仓库并安装 kube-prometheus-stack
- helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- helm repo update
- helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace
- 外部访问(按需)
- 查看服务:kubectl get svc -n monitoring
- 将 Grafana 或 Prometheus Service 类型改为 NodePort/LoadBalancer,或使用 Ingress
- Grafana 初始化
- 登录默认账号(常见为 admin/admin),添加数据源 Prometheus(地址如 http://prometheus-server.monitoring.svc.cluster.local:9090)
- 导入面板:推荐 Kubernetes / Compute Resources / Cluster(模板 ID 8588)等现成仪表板。
三 关键告警规则示例
- 节点资源压力
- CPUThrottlingHigh:sum by (container, pod, namespace) (rate(container_cpu_cfs_throttled_seconds_total{container!=“”, container!=“POD”}[5m])) / sum by (container, pod, namespace) (rate(container_cpu_usage_seconds_total{container!=“”, container!=“POD”}[5m])) > 0.25
- NodeMemoryPressure:kube_node_status_condition{condition=“MemoryPressure”,status=“true”} == 1
- 工作负载稳定性
- PodCrashLooping:rate(kube_pod_container_status_restarts_total[15m]) > 0
- PodNotReady:sum by (namespace, pod) (kube_pod_status_ready{condition=“true”} == 0) > 0
- 控制面可用性
- APIServerDown:up{job=“apiserver”} == 0
- SchedulerDown:up{job=“kube-scheduler”} == 0
- ControllerManagerDown:up{job=“kube-controller-manager”} == 0
- 建议将上述规则写入 PrometheusRule CR,并按团队渠道配置 Alertmanager 路由与通知(如 Slack、企业微信、邮件)。
四 日志与追踪的补充方案
- 集中式日志
- 方案:EFK(Elasticsearch + Fluent Bit/Fluentd + Kibana) 或 Loki + Promtail + Grafana。
- 实践:Fluent Bit 以 DaemonSet 部署采集节点与容器日志,写入 ES 或 Loki;在 Kibana/Grafana 中构建日志查询与可视化面板。
- 分布式追踪
- 方案:Jaeger 或 OpenTelemetry,为关键业务接入埋点与采样,分析链路延迟与错误根因。
- 主机与内核
- 在 Debian 节点保留 journald 与 auditd 日志,结合日志平台进行审计与故障复盘。
五 日常巡检清单与排障要点
- 每日/每周巡检
- 节点状态与资源:kubectl get nodes;节点 CPU/内存/磁盘/IO 使用趋势
- 核心组件:kube-apiserver、kube-controller-manager、kube-scheduler、etcd 健康与延迟
- 工作负载:Pod CrashLoopBackOff、Pending、Evicted 数量与原因
- 网络:Service 与 Endpoints 一致性、DNS 解析可用性
- 存储:PVC/PV 状态、使用量与绑定情况
- 快速排障路径
- Pod 异常:kubectl describe pod -n → 查看 Events、资源限制、镜像拉取、就绪探针
- 节点 NotReady:检查 kubelet 与容器运行时、磁盘压力(kubelet 驱逐阈值)、网络插件(如 Calico/Flannel)
- 应用性能:Prometheus 查询 请求量/延迟/错误率,结合 Grafana 面板与 日志/追踪 定位瓶颈。