使用 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"
评论
还没有评论,来发第一个吧