在 skaffold 部署期间提取 pod 日志

Extract pod logs during skaffold deploy

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

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

下面,当运行部署成功后,抓取日志,但是如果我们运行在运行宁skaffold deploy之前,这就不行了,大概是因为它没有接收到 运行 执行此命令后启动的任何 pods:

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 的输出 看起来像这样:

LAST DEPLOYED: Tue Oct 13 18:14:03 2020
NAMESPACE: smoke
STATUS: deployed
REVISION: 1
TEST SUITE: None
Waiting for deployments to stabilize...
 - smoke:deployment/smoke-assets is ready. [7/8 deployment(s) still pending]
 - smoke:deployment/smoke-b is ready. [6/8 deployment(s) still pending]
 - smoke:deployment/smoke-c is ready. [5/8 deployment(s) still pending]
 - smoke:deployment/smoke-d: waiting for rollout to finish: 0 of 1 updated replicas are available...
 - smoke:deployment/smoke-e: waiting for rollout to finish: 0 of 1 updated replicas are available...
 - smoke:deployment/smoke-f: waiting for rollout to finish: 0 of 1 updated replicas are available...
 - smoke:deployment/smoke-g: waiting for rollout to finish: 0 of 1 updated replicas are available...
 - smoke:deployment/smoke-h: waiting for rollout to finish: 0 of 2 updated replicas are available...
 - smoke:deployment/smoke-d is ready. [4/8 deployment(s) still pending]
 - smoke:deployment/smoke-g is ready. [3/8 deployment(s) still pending]
 - smoke:deployment/smoke-e is ready. [2/8 deployment(s) still pending]
 - smoke:deployment/smoke-h: waiting for rollout to finish: 1 of 2 updated replicas are available...
 - smoke:deployment/smoke-h is ready. [1/8 deployment(s) still pending]
1/8 deployment(s) failed
 - smoke:deployment/smoke-f: running [kubectl --context k3d-smoke-tests-cluster rollout status deployment smoke-f --namespace smoke --watch=false]
 - stdout: ""
 - stderr: "error: deployment \"smoke-f\" exceeded its progress deadline\n"
 - cause: exit status 1
 - smoke:deployment/smoke-f failed. Error: running [kubectl --context k3d-smoke-tests-cluster rollout status deployment smoke-f --namespace smoke --watch=false]
 - stdout: ""
 - stderr: "error: deployment \"smoke-f\" exceeded its progress deadline\n"
 - cause: exit status 1.

@Graham Russell --status-check 应该记录失败的 pod(如果存在)。 我唯一能想到的是 pod 容器终止并在 skaffold 可以获取日志之前被清理。

目前无法在所有部署稳定之前将日志流式传输到标准输出。

你能粘贴当前的 status-check 输出吗

我发现 stern 可以应对新添加到命名空间的 pods。

所以,运行:

stern -n namespace . >my.log &

skaffold deploy 成功之前。