在 Debian 上落地 Kubernetes 的监控与日志管理
一 监控体系与快速落地
- 推荐采用 Prometheus + Grafana 作为核心监控栈,借助 Prometheus Operator 与 Helm 快速部署,默认包含 Prometheus、Alertmanager、Grafana 以及常用 Exporter(如 node-exporter、kube-state-metrics),并通过 ServiceMonitor 自动发现抓取目标。
- 快速部署步骤
- 添加仓库并安装
- helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- helm repo update
- kubectl create ns monitoring
- helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring
- 访问 Grafana
- kubectl port-forward svc/kube-prometheus-stack-grafana -n monitoring 3000:80
- 登录 http://localhost:3000(默认账号/密码 admin/admin)
- 添加数据源:Prometheus 地址 http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090
- 导入官方仪表盘(如 3119 Kubernetes Cluster Monitoring)
- 验证抓取
- 打开 Prometheus UI(端口转发或直接访问 Service),检查 Targets 页面是否健康
- 关键组件与抓取要点
- cAdvisor:已内置于 kubelet,采集容器 CPU/内存/网络/文件系统 指标,节点可通过 http://:8080/metrics 访问
- node-exporter(DaemonSet):采集节点级 CPU/内存/磁盘/网络,指标端口 9100
- kube-state-metrics:监听 API Server,输出 Deployment 副本数、Pod 相位、Node 调度状态 等,指标端口 8081
- 建议为关键业务与系统组件配置 告警规则 与 通知渠道(如 Email、企业微信、Slack)
二 日志体系与架构选型
- 日志来源与采集方式
- 来源:容器 stdout/stderr、Kubernetes 组件日志(如 kubelet、apiserver)、节点操作系统日志
- 采集方式
- DaemonSet 节点代理:每个节点部署一个日志 Agent(如 Fluentd、Fluent Bit、Filebeat),统一采集 /var/log/containers/*.log 与节点日志
- Sidecar 模式:对特定应用(如多行堆栈、敏感信息脱敏)在 Pod 内附加日志采集容器
- 存储与可视化选型
- EFK(Elasticsearch + Fluentd/Fluent Bit + Kibana):通用、全文检索能力强,适合复杂解析与检索
- ELK(Elasticsearch + Logstash + Kibana):在 Fluentd 基础上增加 Logstash 的复杂处理能力
- Elasticsearch + Filebeat + Kibana:更轻量的采集链路,适合资源受限环境
- Loki:轻量、低成本,配合 Grafana 做日志可视化,适合大规模容器日志
- 快速上手 EFK(Fluentd 示例)
- 部署 Elasticsearch 与 Kibana(StatefulSet/Deployment + Service)
- 部署 Fluentd DaemonSet(挂载 /var/log 与 /var/lib/docker/containers),示例核心配置片段
- source: tail 读取 /var/log/containers/*.log,解析 json 并打上 kubernetes 元数据
- match: 输出到 Elasticsearch(host/port、索引命名、重试与缓冲策略)
- 在 Kibana 创建 Index Pattern(如 k8s-logs-*),使用 Discover 与 Dashboard 检索分析
- 快速上手 Loki(更轻量)
- 部署 Loki 与 Grafana,在 Grafana 添加 Loki 数据源,使用 LogQL 查询与可视化
三 快速排障与日常运维命令
- 集群与节点状态
- kubectl cluster-info
- kubectl get nodes
- kubectl get pods -A
- 资源与性能
- kubectl top nodes
- kubectl top pods -A --containers
- kubectl describe node / pod
- 日志查看
- kubectl logs [-c ]
- kubectl logs -f [-c ](实时)
- kubectl logs --previous [-c ](上一个实例)
- 组件日志(宿主机 systemd)
- sudo journalctl -u kubelet -f
- sudo journalctl -u kube-proxy -f
- 可视化与终端工具
- 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/
- K9s:终端全屏监控工具,快速查看 Pod/日志/事件
四 生产实践与注意事项
- 资源与稳定性
- 为日志/监控组件设置 requests/limits,避免 OOM;为 Fluentd/Filebeat 配置 缓冲与重试,应对日志洪峰
- 为 Prometheus 配置 持久化存储 与 数据保留策略,避免数据丢失
- 安全与合规
- 对 Elasticsearch/Kibana/Grafana 启用 访问控制与加密(TLS、RBAC),对敏感日志进行 脱敏与最小化授权
- 节点与系统
- 遵循 Debian 上部署 K8s 的注意事项:如 禁用 Swap、配置 内核参数、选择合适 容器运行时(containerd/CRI-O)、正确设置 网络插件 等,以保障监控与日志链路稳定
- 维护与优化
- 定期 审查监控数据、优化告警规则、升级组件版本,并结合业务 设置性能基线 与 容量规划