如何查看已删除 Pod 的日志?

时间:2021-07-29 07:58:47

标签: kubernetes kubernetes-pod rolling-updates

作为滚动更新的一部分,第 1 版 pod 与第 2 版 pod 一起汇总。

需要查看pod中服务关闭过程的日志(版本一)。


  1. 滚动更新会删除版本 1 的 pod 吗?

  2. 如果是,我们可以查看已删除 pod(版本一)的日志吗?验证版本1 pod中service的关闭过程...

1 个答案:

答案 0 :(得分:1)

<块引用>
  1. 滚动更新是否会删除版本 1 的 pod?

简短的回答是:是的。

Rolling Update Deployment

<块引用>

部署以滚动更新方式更新 Pod,当 .spec.strategy.type==RollingUpdate。您可以指定 maxUnavailablemaxSurge 来控制滚动更新过程。

请参阅以下示例:

spec:
  replicas: 2
  strategy:
   type: RollingUpdate
   rollingUpdate:
     maxSurge: 1
     maxUnavailable: 0

在此示例中,将有一个额外的 Pod (maxSurge: 1),高于所需数量 2,并且可用 Pod 的数量不能低于该数量 (maxUnavailable: 0)。

选择这个配置,Kubernetes 将启动一个额外的 Pod,然后停止一个“旧”的。如果有另一个节点可用于部署此 Pod,则系统将能够在部署期间处理相同的工作负载。如果没有,Pod 将部署在已使用的节点上,代价是来自同一节点上托管的其他 Pod 的资源。

你也可以试试这样的:

spec:
  replicas: 2
  strategy:
   type: RollingUpdate
   rollingUpdate:
     maxSurge: 0
     maxUnavailable: 1

在上面的示例中,不会有额外的 Pod (maxSurge: 0),并且一次只有一个 Pod 不可用 (maxUnavailable: 1)。

在这种情况下,Kubernetes 会先停止一个 Pod,然后再启动一个新的 Pod。这样做的好处是基础设施不需要向上扩展,但最大工作负载会更低。


<块引用>
  1. 如果是,我们可以查看已删除 pod(版本一)的日志吗?验证版本1 pod中service的关闭过程...

请参阅 Debug Running Pods 文档。您可以找到几种检查日志/事件的有用方法,例如:

  • Debugging Pods 通过执行 kubectl describe pods ${POD_NAME} 并检查其失败背后的原因。

  • Examining pod logs:使用 kubectl logs ${POD_NAME} ${CONTAINER_NAME}kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}

  • Debugging with container exec:通过使用 kubectl exec

    在特定容器内运行命令
  • Debugging with an ephemeral debug container:当 kubectl exec 因容器崩溃或容器映像不包含调试实用程序而不足时,临时容器可用于交互式故障排除,例如 {{3} }.

  • distroless images:如果这些方法都不起作用,您可以找到运行 Pod 的主机并通过 SSH 连接到该主机。


但是,--previous 标志仅在前一个容器实例仍然存在于 Pod 中时才起作用。查看 Debugging via a shell on the node 了解更多选项。

另请参阅此主题:this answer