温馨提示×

Debian系统Kubernetes部署日志管理

小樊
37
2025-12-26 21:12:13
栏目: 智能运维

Debian系统Kubernetes日志管理实操指南

一 核心概念与快速排查

  • 日志来源包含三类:
    1. 容器日志(应用 stdout/stderr,由 kubelet 管理);2) 集群组件日志(如 kubelet、kube-apiserver 等);3) 节点 OS 日志(如 systemd journal、auth.log)。容器默认日志驱动为 json-file,日志通常写入节点的 /var/log/containers 目录。快速排查常用命令:
    • 查看实时日志:kubectl logs <pod-name> -n <ns> -f
    • 多容器 Pod:kubectl logs <pod-name> -c <container>
    • 查看上一次崩溃容器日志:kubectl logs <pod-name> --previous
    • 查看节点组件日志:sudo journalctl -u kubelet -f
      上述路径与命令适用于 Debian 节点上的 Kubernetes 环境。

二 集中式日志方案选型与对比

  • 常见方案与适用场景如下:
方案 组件与部署 主要优势 适用场景
EFK(Elasticsearch + Fluentd + Kibana) Fluentd 以 DaemonSet 采集节点日志并发送至 ES;ES 做存储与检索;Kibana 可视化 全文检索、复杂分析能力强 日志量大、需复杂查询与可视化
Loki + Promtail + Grafana Promtail 以 DaemonSet 采集 /var/log/containers;Loki 以标签索引存储;Grafana Explore 查询 轻量、成本低、与指标/告警一体化 云原生环境、成本敏感
Elasticsearch + Filebeat/Fluent Bit Filebeat/Fluent Bit 采集;ES 存储;Kibana 可视化 生态成熟、部署灵活 资源受限或需替代 Fluentd 的场景
  • 选型建议:优先根据是否需要全文检索成本权衡;需要全文检索选 EFK/ES,强调成本与一体化可观测选 Loki

三 快速落地步骤

  • 方案A Loki + Promtail(轻量)
    1. 添加 Helm 源并安装 Loki Stack(含 Promtail):
      helm repo add grafana https://grafana.github.io/helm-charts
      helm install loki grafana/loki-stack \
        --namespace=logging --create-namespace \
        --set promtail.enabled=true
      
    2. Grafana(默认 3000 端口)添加 Loki 数据源:URL 填 http://loki:3100;随后在 Explore 中以标签(如 namespace、pod)检索日志。
  • 方案B EFK(功能完备)
    1. 部署 Elasticsearch(StatefulSet,持久化存储,示例 PVC 申请 20Gi)。
    2. 部署 Fluentd(DaemonSet):挂载 /var/log 与容器日志目录(如 /var/lib/docker/containers/var/log/pods),配置输出到 ES。
    3. 部署 Kibana:设置 ELASTICSEARCH_HOSTS=http://elasticsearch:9200,通过 5601 访问并创建索引模式与仪表板。
  • 提示:若使用 containerd,Fluentd/Promtail 需启用 CRI 解析;若使用 Docker,挂载 Docker 容器日志目录。以上步骤在 Debian 节点同样适用。

四 日志轮转与保留策略

  • 节点容器日志轮转(避免磁盘被占满):
    • 若 kubelet 使用 json-file 驱动,可通过 kubelet 参数控制单个日志文件最大 100Mi、保留 5 个备份、保留 7 天:
      kubeletArguments:
        log-dir: ["/var/log/kubelet"]
        log-file-max-size: ["100Mi"]
        log-file-max-backups: ["5"]
        log-file-max-age: ["7"]
      
      修改后重启 kubelet:systemctl restart kubelet
    • 对系统日志(如 /var/log/syslog、/var/log/kern.log)使用 logrotate
      /var/log/kubelet/*.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 0640 root root
      }
      
      手动测试:logrotate -vf /etc/logrotate.d/k8s
  • 建议:为 Elasticsearch 设置 索引生命周期管理(ILM)Curator 策略,按保留天数与存储水位自动删除旧索引。

五 生产最佳实践

  • 日志级别:控制组件日志量,生产常用 –v=2(告警与错误)或 –v=4(更详细),避免 –v 过高导致磁盘与性能压力。
  • 敏感信息:在 Fluentd/Loki 解析链路中使用过滤/脱敏插件,例如将日志中的 password=xxx 替换为 password=*****
  • 资源与缓冲:为采集器设置 requests/limits,并启用 buffer/retry 机制应对日志洪峰,防止 OOM 与丢日志。
  • 存储与成本:ES 能力强但成本高;Loki 以标签索引降低存储,适合大规模容器日志。
  • 监控与告警:监控 ES 存储使用率、采集延迟、Loki 写入失败率 等关键指标,配置告警(如日志量突增、磁盘空间不足)。
  • 高可用:ES 建议多副本/分片与持久化;Loki 可结合对象存储做长期留存。
  • 规范:应用日志尽量输出 结构化 JSON,便于解析与检索。

0