Loading...
Loading...
Diagnose and mitigate GKE TPU or GPU nodes stuck in NotReady / NodeStatusUnknown ("Kubelet stopped posting node status") due to host kernel panics, hardware lockups, or disabled node auto-repair. Use when nodes stop heartbeating beyond the node auto-repair threshold and pods remain stuck in Terminating. Don't use for healthy nodes, pod-only application crashes, or routine GKE upgrades.
npx skill4agent add google/skills gke-ai-troubleshooting-node-unresponsive-timeoutNodeStatusUnknownReadyUnknownReason: NodeStatusUnknownKubelet stopped posting node status.NotReadyTerminatingJobSetgcloudkubectlgcloud billing projects describe {project_id}gcloud auth logingcloud config set project {project_id}container.googleapis.comcompute.googleapis.comlogging.googleapis.commonitoring.googleapis.comroles/container.viewerroles/compute.viewerroles/logging.viewerroles/monitoring.viewer[High Risk]roles/container.clusterAdminRead-only rule: Run read-only diagnostic commands only. Never drain, delete, or re-create nodes, or run any other command that changes the cluster. Give the user any fix to apply themselves.
[Low Risk]around{project_id}{cluster_name}{location}{nodepool_name}{node_name}{zone}{issue_time}{start_time}{issue_time} - 30m{end_time}{issue_time} + 30mNodeStatusUnknown[Low Risk]ReadyUnknownReason: NodeStatusUnknownKubelet stopped posting node status.k8s_nodek8s_cluster[{start_time}, {end_time}]{node_name}(resource.type="k8s_node" OR resource.type="k8s_cluster")
resource.labels.cluster_name="{cluster_name}"
("{node_name}" AND ("NodeNotReady" OR "NodeStatusUnknown" OR "Kubelet stopped posting node status"))
timestamp >= "{start_time}" AND timestamp <= "{end_time}"Unknownkubernetes.io/node/status_conditionkubernetes_io:node_status_condition1.32.1-gke.1357001+condition="Ready"status="Unknown"kubernetes_io:node_status_condition{
monitored_resource="k8s_node",
cluster_name="{cluster_name}",
node_name="{node_name}",
condition="Ready",
status="Unknown"
}ReadyTrueNodeStatusUnknownReadyUnknownNodeStatusUnknown[Low Risk]serial-port-logging-enabletruegcloud compute instances get-serial-port-output--port=1{node_name}{zone}Fatal Machine checkhung_task: blocked tasksNMI: Not continuing[Low Risk]autoRepair{nodepool_name}[Low Risk]{node_name}{issue_time}methodcompute.instances.hostErrorcompute.instances.preemptedcompute.instances.automaticRestarthostErrorterminateOnHostMaintenancecompute.instances.guestTerminate[High Risk]Guardrails:
- Never force-delete stuck
pods on an unresponsive node. Force deletion doesn't wait for the kubelet to confirm that the pod has stopped, so a replacement pod can start while the old one is still running. See Force Delete StatefulSet Pods.Terminating- Never delete GKE-managed Compute Engine VM instances directly (
). Instead, check how long the node has reportedgcloud compute instances delete(Step 1), check the serial console output (Step 2), and rely on node auto-repair, as described in the following steps.NodeStatusUnknown
autoRepair{nodepool_name}NotReadyReadyJobSet