容器与云原生

使用 stern 查看 k8s 多 Pods 日志

JACIN2 分钟阅读
AI 摘要

这是一篇面向 Kubernetes/k3s 日志查看场景的 stern 使用笔记,聚焦在需要同时观察多个 Pod 日志、并在滚动重启后保持日志连续性的日常排查需求。正文先给出 Linux 环境下从 GitHub release 下载 stern 1.33.1、解压、赋权、移动到 /usr/local/bin 并用 stern --version 验证安装的完整命令。随后说明 stern 与 kubectl 一样默认读取本机 K8s 配置,因此在 k3s 环境中可以通过 --kubeconfig /etc/rancher/k3s/k3s.yaml 临时指定配置,也可以把 KUBECONFIG 写入 ~/.bashrc 让后续命令永久生效。示例以 ragapi 为匹配对象,展示 stern ragapi --tail 20/50 这类命令如何聚合查看相关 Pod 的最近日志。文章还强调 stern 相比普通 kubectl logs 的两个实用差异:它会用不同颜色区分不同 Pod,便于定位报错来源;在 rollout restart 后也能自动发现新 Pod 并接续日志流,减少重复执行命令的麻烦。最后补充了按正则包含 error、exception 以及用 -v 排除 GET /health 等噪声日志的过滤方式,适合运维、后端开发或使用 k3s 部署服务的开发者快速整理多实例日志排查流程。

命令:

text
# 1. 切换到临时目录
cd /tmp

# 2. 下载压缩包 (使用 -L 处理 GitHub 重定向)
curl -LO https://github.com/stern/stern/releases/download/v1.33.1/stern_1.33.1_linux_amd64.tar.gz

# 3. 解压压缩包
tar -zxvf stern_1.33.1_linux_amd64.tar.gz

# 4. 将解压出来的 stern 二进制文件移动到系统目录
chmod +x stern
mv stern /usr/local/bin/

# 5. 验证是否安装成功
stern --version

因为 stern(和 kubectl 一样)默认会去读取你本机的 K8s 配置文件。

text
# 试试直接指定路径执行
stern ragapi --tail 50 --kubeconfig /etc/rancher/k3s/k3s.yaml

设置环境变量(永久生效)

text
echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc
source ~/.bashrc

这样日志就可以了:

text
stern ragapi --tail 20

使用好处:

  • 色彩分明stern 给每个 Pod 分配一个颜色。比如 ragapi-web-1 是绿色,ragapi-web-2 是蓝色。你一眼就能看到是哪个 Pod 报错了。
  • 自动“追踪”新 Pod:如果你执行 kubectl rollout restart,旧 Pod 消失,新 Pod 启动。
  • kubectl 的日志流会直接断掉,你得重新运行命令。
  • stern 会自动发现新 Pod 并把日志接上来。
text
# 只看带有 "error" 或者 "exception" 关键字的聚合日志
stern ragapi -i "error|exception"

# 假设你的 API 日志里有很多 GET /health 之类的,可以反向过滤
stern ragapi -v "GET /health"

评论

还没有评论,来发第一个吧