首页 > 解决方案 > 在 skaffold 部署期间提取 pod 日志

问题描述

我们使用 k3s 和 skaffold 对我们在本地部署的应用程序(到 CI 构建代理)运行一些自动化测试。

我们如何在运行时查看(stdout 或文件)pod 日志skaffold deploy --status-check?(我们在部署过程中遇到了错误,除非我们通过 ssh 连接到构建代理,否则我们看不到这些错误。)

以下,在部署成功后运行时,会捕获日志,但如果我们在运行之前运行它skaffold deploy,这将不起作用,大概是因为它没有拾取运行此命令后启动的任何 pod:

kubectl logs \
    --namespace x \
    --follow \
    --ignore-errors \
    --max-log-requests 50 \
    --all-containers \
    --prefix \
    --timestamps \
    --selector release=y >"k8s.log" 2>&1 &

的输出skaffold deploy --status-check 看起来像这样:

最后部署:2020 年 10 月 13 日星期二 18:14:03
命名空间:烟雾
状态:已部署
修订: 1
测试套件:无
等待部署稳定...
 -smoke:deployment/smoke-assets 已准备就绪。[7/8 部署仍在进行中]
 -smoke:deployment/smoke-b 准备好了。[6/8 部署仍在等待中]
 -smoke:deployment/smoke-c 已准备就绪。[5/8 部署仍在等待中]
 -smoke:deployment/smoke-d: 等待部署完成:1 个更新的副本中有 0 个可用...
 -smoke:deployment/smoke-e: 等待部署完成:1 个更新的副本中有 0 个可用...
 -smoke:deployment/smoke-f: 等待部署完成:1 个更新的副本中有 0 个可用...
 -smoke:deployment/smoke-g: 等待部署完成:1 个更新的副本中有 0 个可用...
 -smoke:deployment/smoke-h:等待部署完成:2 个更新的副本中有 0 个可用...
 -smoke:deployment/smoke-d 准备好了。[4/8 部署仍在等待中]
 -smoke:deployment/smoke-g 已准备就绪。[3/8 部署仍在等待中]
 -smoke:deployment/smoke-e 已准备就绪。[2/8 部署仍在等待中]
 -smoke:deployment/smoke-h:等待部署完成:2 个更新的副本中有 1 个可用...
 -smoke:deployment/smoke-h 已准备就绪。[1/8 部署仍在等待中]
1/8 部署失败
 -smoke:deployment/smoke-f: running [kubectl --context k3d-smoke-tests-cluster rollout status deploymentsmoke-f --namespace smoke --watch=false]
 - 标准输出:“”
 - 标准错误:“错误:部署 \"smoke-f\" 超过了进度期限\n"
 - 原因:退出状态 1
 - 烟雾:部署/烟雾-f 失败。错误:运行 [kubectl --context k3d-smoke-tests-cluster rollout status deploymentsmoke-f --namespace smoke --watch=false]
 - 标准输出:“”
 - 标准错误:“错误:部署 \"smoke-f\" 超过了进度期限\n"
 - 原因:退出状态 1。

标签: bashkubernetesk3sskaffold

解决方案


我发现stern可以处理添加到命名空间的新 pod。

所以,运行:

stern -n namespace . >my.log &

在成功之前skaffold deploy


推荐阅读