Pod 卡在“待处理”状态,未记录任何事件

Pod 卡在“待处理”状态,未记录任何事件

我不知道去哪儿寻找提示。

我们已经安装了 gitlab-runners使用 Helm Chart在我们的开发集群中。大多数情况下,这种方法有效,但在过去一周左右,我们遇到了 Pod 卡在Pending状态而没有任何进一步的日志的情况。在某个我无法更好地定义的点上,所有 Pod 都在节点上进行调度,然后下一批 PodPending再次卡在状态中。

我们使用 GKE,并为 gitlab-runner pod 设置了一个可抢占节点的节点池。我们运行 kubernetes v1.15.4-gke.18

我们知道 Pod 卡住的原因有很多,但我总是希望在运行或Pending时能有某种形式的日志/指示。问题是,什么都没有。没有事件。kubectl describe <GITLAB_RUNNER_POD>kubectl get events

我们启用了 stackdriver 日志记录,我可以看到Kubernetes Apiservice Requests下面的日志Kubernetes Cluster,但它们对我来说没有任何有意义的内容。

有什么想法可以看哪里吗?

答案1

Pod发布这个答案是为了提供更多关于在哪里寻找信息的一般想法,Pending因为现在不可能说出这个特定的设置。

Pod检查为什么处于can状态的方法Pending

  • $ kubectl describe pod POD_NAME
  • $ kubectl get events -A
  • 检查Cloud Logging(更多内容见下文)

Pod假设处于以下状态Pending

  • $ kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
nginx-four-99d88fccb-rwzmp     0/1     Pending   0          2s
nginx-one-8584c66446-h92rm     1/1     Running   0          5d22h
nginx-three-5bcb988986-tmshp   1/1     Running   0          5d22h
nginx-two-6c9545d7d4-2zlmh     1/1     Running   0          5d22h

要获取有关其状态的更多信息,您可以运行:

  • $ kubectl describe pod POD_NAME

Event上面输出的部分:

Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  26s (x2 over 114s)  default-scheduler  0/1 nodes are available: 1 Insufficient cpu.

如您所见,其中有关于为何Pod处于Pending状态(Insufficient CPU)的信息。

您还可以运行:

  • $ kubectl get events
LAST SEEN   TYPE      REASON              OBJECT                            MESSAGE
20s         Warning   FailedScheduling    pod/nginx-four-99d88fccb-rwzmp    0/1 nodes are available: 1 Insufficient cpu.
14m         Normal    SuccessfulCreate    replicaset/nginx-four-99d88fccb   Created pod: nginx-four-99d88fccb-rwzmp
14m         Normal    ScalingReplicaSet   deployment/nginx-four             Scaled up replica set nginx-four-99d88fccb to 1

免责声明!

Kubernetes 事件存储etcd1 小时。如果状态消息Pod没有随时间重复,它将在 1 小时后被删除。有关此特定主题的其他参考资料:


从以下位置检索日志Cloud Logging

您可以运行以下查询来获取Pods处于Pending状态的:

resource.type="k8s_cluster"
resource.labels.cluster_name="gke-serverfault"
protoPayload.response.status.phase="Pending"

此查询不会显示处于状态的原因(如Insufficient CPU)。有一个功能请求PodPendingIssuetracker.google.com因此,您可以关注它以获取进一步的更新:


其他资源:

答案2

就我的情况而言,一些工作节点与主节点失去连接,并且主节点中的 corddns pod 和 flannel pod 无法启动。

我的解决方案是删除工作节点并重新加入工作节点。

相关内容