我不知道去哪儿寻找提示。
我们已经安装了 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 事件存储
etcd
1 小时。如果状态消息Pod
没有随时间重复,它将在 1 小时后被删除。有关此特定主题的其他参考资料:
从以下位置检索日志Cloud Logging
:
您可以运行以下查询来获取Pods
处于Pending
状态的:
resource.type="k8s_cluster"
resource.labels.cluster_name="gke-serverfault"
protoPayload.response.status.phase="Pending"
此查询不会显示处于状态的原因(如Insufficient CPU
)。有一个功能请求Pod
Pending
Issuetracker.google.com因此,您可以关注它以获取进一步的更新:
其他资源:
答案2
就我的情况而言,一些工作节点与主节点失去连接,并且主节点中的 corddns pod 和 flannel pod 无法启动。
我的解决方案是删除工作节点并重新加入工作节点。