【问题标题】:Cannot find cause for new pod找不到新 pod 的原因
【发布时间】:2019-12-29 18:08:07
【问题描述】:

我有一个运行了数周的 kubernetes 1.11 集群。今天我注意到了这一点:

tooluser$ kubectl get po --sort-by=.status.startTime -o custom-columns=NAME:.metadata.name,CREATED:.status.startTime,RESTARTS:.status.containerStatuses[0].restartCount
NAME                           CREATED        RESTARTS
pod1-86b8b985f4-78x4c          <10 min ago>   0
pod2-788dbb86df-wj672          <10 min ago>   0
pod3-76d94f5d94-gspqg          <10 min ago>   0
pod4-demo-56cb4bfc68-m2b52     <10 min ago>   0
pod5-69cc97c4c-29dnk           <10 min ago>   0

即 pod 看起来像是第一次运行(0 次重启),从 10 分钟前开始,但这些 pod 已经运行了数周。此外,

  • pod 中没有事件。
  • 我检查了副本集,一周没有新rs,没有rs事件;
  • 部署相同,相应部署中没有事件;
  • 节点也一样,节点上没有事件;
  • 没有常规事件(kubectl 获取事件)

也就是说,我找不到这些运行了一周的 pod 重新启动的原因。我可以做其他 kubectl 命令来找出答案吗?

【问题讨论】:

    标签: kubernetes kubernetes-pod


    【解决方案1】:

    意图如下:

    1. Kubelet 观察到一个 pod 已绑定到其主机。
    2. Kubelet 记录 pod.Status.StartTime
    3. Kubelet 为容器镜像执行 docker pull
    4. Kubelet 启动 pod

    StartTime 主要与 ActiveDeadlineSeconds 一起使用来确定容器/pod 已经运行了多长时间,kubelet 负责在截止日期结束后终止 pod/容器到达。鉴于图像拉取可能需要很长时间,活动截止日期可能不准确。

    查看特定 pod 的日志:

    $ kubectl logs pod_name -n your_namespace -c container_name
    

    然后你可以检查容器:

    $ kubectl exec -it pod_name /bin/bash 
    

    同时查看kubelet的状态。

    要从日志中获取信息,例如启动或失败的原因,我建议您在 pod 的定义文件中指定容器的 terminationMessagePath 字段。 默认值为 /dev/termination-log

    Kubernetes 使用指定文件中的内容来填充容器的成功和失败状态消息。这是文档pod-termination-message

    有关 pod 生命周期的更多信息,您可以在此处找到:pod-lifecycle

    【讨论】:

    • 特定 pod 的日志不会包含任何有关该 pod 为何/如何启动的信息(什么节点,什么原因等)。
    • 我编辑了我的答案并写下了一些关于在 Pod 的定义文件中使用终止消息路径字段的线索。
    【解决方案2】:

    如果您实施了 HPA 或资源限制,则可以安排新的 pod。对于资源限制,如果超出内存限制,kubernetes 会杀死 pod,如果它有 RS,则创建新的。您可以通过以下方式进行检查:

    kubectl get events
    

    或者检查 kube-scheduler 的日志:

    kubectl logs $kube-scheduler-pod-name -n kube-system
    

    【讨论】:

    • 我检查了所有事件源,没有与 pod 或其 Deployment 相关。我不知道 kube 调度程序的日志,但我检查并没有与最新的 pod 相关。
    • 使用 'kubectl get pod -n kube-system' 检索 kube-scheduler pod 名称,然后检查其日志。
    • 是的,这确实是我所做的
    • 您是否尝试查看以前的 pod 日志? (kubectl 记录 my-pod --previous)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2022-12-18
    • 2019-05-26
    相关资源
    最近更新 更多