【问题标题】:How to list Kubernetes recently deleted pods?如何列出 Kubernetes 最近删除的 Pod?
【发布时间】:2017-03-30 21:08:35
【问题描述】:

有没有办法获取有关已删除(停止,被新版本替换)的 Kubernetes pod 的一些详细信息。

我正在调查错误。我有我的 pod 名称的日志。该吊舱不再存在,它被另一个(具有不同配置)替换。新 pod 与旧 pod 位于相同的命名空间、复制控制器和服务中。

类似的命令

kubectl  get pods
kubectl  get pod <pod-name> 

仅适用于当前的 pod(活动或停止)。

如何获得有关旧 pod 的更多详细信息?我想看看

  1. 创建时间
  2. 创建时有哪些环境变量
  3. 为什么以及何时停止

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以尝试kubectl logs --previous 列出之前停止的 pod 的日志

    http://kubernetes.io/docs/user-guide/kubectl/kubectl_logs/

    您可能还想查看这些调试技巧 http://kubernetes.io/docs/user-guide/debugging-pods-and-replication-controllers/

    【讨论】:

    • 此命令似乎不再起作用,需要一个 pod 名称。
    • 它可以工作,但它旨在显示现有 pod 中以前 容器 的日志。来自文档:“如果为真,则打印 pod 中容器的前一个实例的日志(如果存在)。”
    • 这仅在 pod 仍然存在时才有效,这不是 OP 所要求的。
    【解决方案2】:

    有这个标志:

    -a, --show-all=false:打印时,显示所有资源(默认隐藏终止的pods。)

    但这可能并不适用于所有旧 pod。

    【讨论】:

    • 我还没有发现这适用于最近终止的 pod。
    • 是的,似乎是一个错误或回归。
    • 我收到 Flag --show-all has been deprecated, will be removed in an upcoming release 版本 1.10(客户端)和 1.9.2(服务器)
    【解决方案3】:
    kubectl get pods -a    
    

    如果您正在搜索,您将获得正在运行的 pod 和已终止的 pod 列表

    【讨论】:

    【解决方案4】:

    据我所知,一旦 pod 被删除,您可能无法获得 pod 详细信息。我能知道用例是什么吗?

    示例:

    1. 如果使用 - kubectl run busybox-test-pod-status --image=busybox --restart=Never 创建的 pod -- /bin/false 您将拥有一个状态为终止的 pod:错误
    2. 如果 pod 是使用 - kubectl run busybox-test-pod-status --image=busybox --restart=Never -- /bin/true 创建的 您将拥有状态为终止的 pod:Complted
    3. 如果 Pod 中的容器重新启动:Pod 将处于活动状态,您可以使用以下命令获取上一个容器(仅上一个容器)的日志 kubectl 日志 --container --previous=true
    4. 如果您对应用程序进行升级并且使用部署创建 pod。如果更新部署“说一个新图像”。 pod 将被终止并创建新的 pod。您可以从 depoyment yaml 获取 pod 详细信息。如果您想获取先前 pod 的详细信息,请参阅先前部署 yaml 的“规范”部分

    【讨论】:

      【解决方案5】:

      如果您想查看之前删除的所有pods 并且尝试获取之前的pods

      命令行: kubectl get pods

      您将在其中获取所有 pod 详细信息,因为每个服务都有一个或多个 pod,并且它们具有唯一的 IP 地址

      您可以在此处查看 pod 的生命周期以及 pod 有哪些阶段。 https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle

      你可以通过输入命令查看之前的 pod 日志: kubectl logs --previous

      【讨论】:

        【解决方案6】:

        截至今天,kubectl get pods -a 已弃用,因此您无法删除 pod。

        您可以做的是获取最近删除的 pod 名称列表 - 最多过去 1 小时,除非您更改了 kubernetes 事件的 ttl - 通过运行:

        kubectl get event -o custom-columns=NAME:.metadata.name | cut -d "." -f1

        然后,您可以调查日志管道中的进一步问题(如果您有问题的话)。

        【讨论】:

        • 我不知道为什么这里有这么多无益的答案,真正的答案是最后一句话:“如果你有一个适当的地方,你可以在你的日志管道中调查进一步的问题。”
        【解决方案7】:

        如果您的容器之前发生过崩溃,您可以通过以下方式访问之前容器的崩溃日志:

        kubectl 日志 --previous ${POD_NAME} ${CONTAINER_NAME}

        【讨论】:

        • 这不是 OP 所要求的。 kubectl logs --previous 仅在 pod 仍然存在时才有效。一旦 pod 被删除(例如在运行 kubectl pod delete &lt;pod name&gt; 之后),此命令将不再有效。
        【解决方案8】:

        有一种方法可以找出 pod 被删除的原因以及谁删除了它们。 找出问题的唯一方法是将 k8s 的 ttl 设置为大于默认的 1h 并搜索事件:

        kubectl get event -o custom-columns=NAME:.metadata.name | cut -d "." -f1

        【讨论】:

        猜你喜欢
        • 2021-09-21
        • 2016-07-08
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2019-12-27
        • 2019-03-16
        • 2015-10-31
        • 2018-04-29
        相关资源
        最近更新 更多