【问题标题】:How can I include pod startup logs/information in CD output?如何在 CD 输出中包含 pod 启动日志/信息?
【发布时间】:2020-01-06 16:41:33
【问题描述】:

我正在设置 CI/CD 管道。部署步骤运行以下命令:

kubectl apply -f manifest.yml --namespace <namespace>
kubectl rollout status Deployment/<service> --namespace <namespace>

这给出了以下输出:

Waiting for deployment "<service>" rollout to finish: 1 out of 2 new replicas have been updated...
error: deployment "<service>" exceeded its progress deadline
##[error]error: deployment "<service>" exceeded its progress deadline

通过运行

kubectl get pods

我可以看到它已经启动了一个卡在 CrashLoopBackOff 中的 pod。我可以通过运行来了解 pod 启动失败的原因:

kubectl logs <pod-name>

有没有办法将此输出包含在部署日志中?我显然可以检查部署是否失败,然后解析上述命令并显示日志输出,但我希望有一些方法可以从 kubectl rollout status 中获取这些信息(最好有办法让 kubectl rollout status 随时通知部署中的 pod 发生状态更改,并显示任何具有错误状态更改的 pod 的日志。)

【问题讨论】:

  • 看起来你可以做到kubectl logs deployment/&lt;service&gt;。我不确定它在推出过程中的表现如何,以及它是否提供了您正在寻找的体验。您可以尝试在一个终端窗格中使用 kubectl rollout status,在另一个终端窗格中使用 kubectl logs 进行整个部署。如果你觉得这很有帮助,我会很好奇,我自己还没有在整个部署中使用 kubectl logs

标签: kubernetes continuous-deployment


【解决方案1】:

如果还没有的话,labelize你的 pod :

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx

它使您可以在没有 pod 名称的情况下查看日志:

kubectl logs -l app=nginx -n your-namespace

对于CrashLoopBackOff 错误,事件通常比日志提供更多信息:

kubectl get events --sort-by lastTimestamp -n your-namespace

在管道的这一端添加它,它将为您提供有关您的 pod 调度等的有趣信息......

【讨论】:

  • 这很有帮助。仍然非常令人沮丧的是,我必须等待部署超时,然后部署实际上会因非常明显的配置错误而失败。我正在考虑在部署期间禁用自动替换死 pod,然后在另一个步骤中重新启用,但这也相当令人担忧,因为如果出现错误,它可能会使服务处于危险状态。
  • 奇怪的是,kubectl logs -l app=nginx -n your-namespace 似乎不一致。有时部署完成,但随后我收到类似Error from server (BadRequest): container "mycontainer" in pod "my-pod-zzzz-zzzz" is terminated 的错误,我认为它决定尝试获取即将消失的旧 pod 的日志,而不是新的 pod。但是他们应该在推出完成后准备好?很奇怪。
猜你喜欢
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2019-04-25
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多