温馨提示×

Kubernetes日志管理Ubuntu上如何操作

小樊
43
2025-12-20 14:49:32
栏目: 智能运维

Ubuntu上Kubernetes日志管理实操指南

一 本地查看与定位日志

  • 查看运行中 Pod 的日志
    • 基本用法:kubectl logs -c -n
    • 实时跟踪:kubectl logs -f -c
    • 查看最近 N 行:kubectl logs --tail=100
  • 查看崩溃前的容器日志(容器反复重启时非常关键)
    • 单容器:kubectl logs --previous
    • 多容器:kubectl logs --previous -c
  • 节点上日志的物理位置与原理
    • 容器标准输出会被写入节点的 JSON 日志文件,路径通常为:/var/log/containers/,并由 /var/log/pods/ 下的符号链接指向实际容器日志。
    • 使用 --previous 时,kubelet 会读取 /var/log/pods/// 下对应上一次实例的日志文件(如 2393.log2394.log 等),这些文件是指向实际容器 JSON 日志的符号链接。

二 集中式日志方案与适用场景

  • 节点级日志代理(推荐,低侵入)
    • 在每个节点以 DaemonSet 部署日志代理(如 Fluentd、Filebeat),挂载 /var/log/var/lib/docker/containers(或 containerd 的日志目录),统一采集并发送到后端(如 ElasticsearchLoki)。
    • 优点:对应用无侵入、运维简单;缺点:依赖应用将日志输出到 stdout/stderr
  • Sidecar 方案(处理文件日志或特殊输出)
    • 应用日志写到文件时,可添加 sidecar 容器 tail -f 这些文件并把内容输出到 stdout/stderr,复用节点级代理链路。
    • 或直接以 sidecar 运行 logging-agent,让 agent 直接读取应用日志文件并发送到后端(适合无法改造输出的存量应用)。
    • 代价:额外的 CPU/内存/磁盘 开销(两份日志或额外进程)。
  • 可视化与分析
    • EFK(Elasticsearch + Fluentd + Kibana):适合需要全文检索与复杂分析的团队。
    • Loki + Grafana:轻量、成本低、与 K8s 标签友好,适合云原生场景。

三 在Ubuntu上快速落地 EFK 或 Loki

  • 方案A EFK(Elasticsearch + Fluentd + Kibana)
    1. 准备后端存储与可视化
      • 使用 ECK(Elastic Cloud on Kubernetes) 一键部署 ElasticsearchKibana(示例命令见下)。
    2. 部署 Fluentd DaemonSet
      • 使用官方或社区提供的 RBAC + DaemonSet 清单,配置输入为 /var/log/containers/*.log,并通过 kubernetes_metadata 插件注入元数据,输出到 Elasticsearch(示例配置见下)。
    3. 访问 Kibana 创建索引模式与可视化仪表盘。
    • 参考命令与配置片段:
      • kubectl apply -f https://download.elastic.co/downloads/eck/2.5.1/all-in-one.yaml
      • kubectl apply -f https://download.elastic.co/downloads/eck/2.5.1/all-in-one-kibana.yaml
      • Fluentd 关键片段(ConfigMap):
        • source: tail 读取 /var/log/containers/*.log,pos_file 记录读取位置
        • filter: kubernetes_metadata 注入 namespace/pod/container 等元数据
        • match: 输出到 elasticsearch,常用参数 logstash_format true、自定义 index 前缀
        • buffer: 配置 flush_interval、chunk_limit_size、retry 等以提升可靠性与吞吐
  • 方案B Loki(轻量替代)
    • 部署 LokiPromtail(或 Fluent Bit)采集 /var/log/containers/,在 Grafana 中添加 Loki 数据源并构建日志面板。
    • 适合资源受限或强调“按标签查询”的团队。

四 关键配置与运维要点

  • 应用日志规范
    • 优先输出到 stdout/stderr;如需结构化日志,使用 JSON 并包含可检索的 time、level、msg、trace_id 等字段。
  • 节点与容器运行时日志路径
    • 确认容器运行时日志目录(如 /var/log/containers//var/lib/docker/containers/ 或 containerd 对应目录)已挂载到日志代理 Pod,并赋予读取权限(如 root1000 组)。
  • 日志轮转与保留
    • 配置 kubelet 的日志轮转参数(如 –container-log-max-size、–container-log-max-files),避免节点磁盘被占满。
    • 在后端(Elasticsearch/Loki)设置 索引生命周期管理(ILM)/保留策略,定期删除旧数据。
  • 可靠性与缓冲
    • 为 Fluentd/Filebeat 配置 磁盘缓冲(buffer)重试策略,在后端短暂不可用时避免日志丢失。
  • 权限与安全
    • 使用 RBAC 为日志代理授予 Pods/Logs 只读权限;Elasticsearch 启用 TLS认证,避免明文传输与越权访问。

0