首页主机资讯Kubernetes在Ubuntu上的日志如何查看

Kubernetes在Ubuntu上的日志如何查看

时间2025-10-21 18:16:03发布访客分类主机资讯浏览1454
导读:一、原生工具查看日志(基础排查) 1. 查看Pod容器日志(最常用) 命令格式:kubectl logs <pod-name> [-n <namespace>] [-c <container-name>]...

一、原生工具查看日志(基础排查)

1. 查看Pod容器日志(最常用)

命令格式kubectl logs < pod-name> [-n < namespace> ] [-c < container-name> ] [--flag]

  • 基础用法:若Pod在默认命名空间,直接指定Pod名称即可查看其主容器日志(如kubectl logs nginx-pod)。
  • 指定命名空间:若Pod不在默认命名空间,需通过-n参数指定(如kubectl logs my-pod -n dev)。
  • 多容器Pod:若Pod包含多个容器,需通过-c参数指定目标容器(如kubectl logs my-pod -c sidecar)。
  • 常用参数
    • -f:实时跟踪日志输出(类似tail -f);
    • --previous:查看容器崩溃前的日志(用于排查崩溃原因);
    • --tail=20:仅显示最后20行日志(避免输出过多);
    • --since=5m:显示最近5分钟的日志(适合快速定位近期问题)。
      示例:实时查看default命名空间下nginx-pod的日志并跟踪更新:kubectl logs -f nginx-pod

2. 查看节点系统/组件日志

Kubernetes节点上的系统日志(如内核、服务日志)和Kubernetes组件日志(如kubelet、kube-apiserver)可通过以下方式查看:

  • 节点系统日志:Ubuntu节点的系统日志默认存储在/var/log/syslog/var/log/kern.log,可使用tailless命令查看(如tail -f /var/log/syslog)。
  • Kubernetes组件日志
    • kubelet(节点代理):journalctl -u kubelet -f(实时查看kubelet日志,用于排查节点级问题,如容器启动失败);
    • kube-controller-manager(控制器管理器):journalctl -u kube-controller-manager -f
    • kube-scheduler(调度器):journalctl -u kube-scheduler -f
    • etcd(键值存储):若有权限,journalctl -u etcd -f(查看etcd集群状态)。

二、进阶日志管理(生产环境推荐)

1. 日志收集与集中化存储

原生kubectl logs适合临时排查,生产环境需使用日志聚合工具实现集中化存储、检索、可视化,常见方案:

  • EFK Stack(Elasticsearch + Fluentd + Kibana)
    • 组件职责:Fluentd以DaemonSet形式运行在每个节点上,收集容器日志(/var/log/containers/*.log)、Kubernetes组件日志及系统日志,通过过滤器添加元数据(命名空间、Pod名、容器名),再发送到Elasticsearch;Elasticsearch存储日志并提供快速检索;Kibana可视化数据(如创建日志量趋势 dashboard、错误日志占比分析)。
    • 部署优化:Fluentd需挂载宿主机/var/log目录以访问所有日志;Elasticsearch集群至少部署3个主节点以保证高可用;为Fluentd设置资源限制(如0.5核CPU、512MB内存),避免日志洪峰导致节点崩溃。
  • Loki Stack(Loki + Promtail + Grafana)
    • 优势:Loki不索引日志内容,仅索引标签(如命名空间、Pod名),存储成本比Elasticsearch低50%以上,适合大规模集群(日志量超TB级)。
    • 组件职责:Promtail以DaemonSet形式收集节点日志并发送到Loki;Grafana与Loki集成,支持日志查询(如{ namespace="default", pod="nginx-pod"} )和仪表盘展示,可与Prometheus无缝对接(同时监控指标与日志)。
  • Filebeat + Elasticsearch + Kibana
    • 适用场景:资源受限的小型集群,Filebeat是轻量级日志收集器,资源占用远低于Fluentd。以DaemonSet形式运行,挂载/var/log/containers目录,收集容器日志并发送到Elasticsearch(或通过Logstash转发),再通过Kibana可视化。

2. 日志轮换与压缩

为防止节点磁盘空间耗尽,需对容器日志进行轮换与压缩

  • Docker日志轮换:在Docker配置文件(/etc/docker/daemon.json)中添加以下配置,限制单个日志文件大小(如10MB)和保留数量(如3个):
    {
    
      "log-driver": "json-file",
      "log-opts": {
    
        "max-size": "10m",
        "max-file": "3"
      }
    
    }
    
    
    修改后重启Docker服务:sudo systemctl restart docker
  • Ubuntu系统日志轮换:使用logrotate工具,默认配置文件位于/etc/logrotate.conf,可自定义容器日志轮换规则(如/var/lib/docker/containers/*/*.log),示例配置:
    /var/lib/docker/containers/*/*.log {
        
      rotate 7
      daily
      missingok
      notifempty
      compress
      delaycompress
      sharedscripts
      postrotate
        if [ -f /var/run/docker.sock ];
     then
          docker restart $(docker ps -q)
        fi
      endscript
    }
        
    
    该配置表示保留7天的压缩日志,每天轮换一次。

三、调试技巧(快速定位问题)

1. 查看容器内实时日志

若需实时查看容器内的标准输出(stdout)和标准错误(stderr),可使用kubectl logs -f < pod-name> ,适合快速定位应用运行时问题(如启动错误、请求异常)。

2. 查看容器内文件系统日志

若应用将日志写入容器内的文件(而非标准输出),可通过kubectl exec进入容器查看:

kubectl exec -it <
    pod-name>
     -- /bin/bash  # 进入容器
ls /var/log/  # 查找日志文件路径
cat /var/log/app.log  # 查看日志内容

或直接使用kubectl exec执行命令(无需进入容器):

kubectl exec <
    pod-name>
     -- cat /var/log/app.log

3. 查看Pod事件

Pod的事件(如调度失败、拉取镜像错误、重启次数)能快速定位问题根源,使用以下命令查看:

kubectl describe pod <
    pod-name>
     [-n <
    namespace>
    ]

重点关注Events部分,例如:

Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Warning  Unhealthy  5m    kubelet            Liveness probe failed: HTTP probe failed with statuscode: 503
  Normal   Pulling    10m   kubelet            Pulling image "nginx:latest"

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Kubernetes在Ubuntu上的日志如何查看
本文地址: https://pptw.com/jishu/731385.html
Ubuntu环境下Kubernetes如何管理容器 debian进程如何设置自动重启

游客 回复需填写必要信息