GoogleContainerTools/skaffold · warning
c.Message (pod status condition message)
Error message
c.Message (pod status condition message)
What it means
The pod validator checks pod status conditions; when a pod's status condition type is unknown (isPodStatusUnknown matches), Skaffold surfaces the raw Kubernetes condition message `c.Message` as the error, with status STATUSCHECK_UNKNOWN. This means Kubernetes itself could not determine a concrete pod state (e.g. Pending without a reason, or an unrecognized condition).
Source
Thrown at pkg/diag/validator/validator.go:165
// See https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-states
statusCode, logs, err := getContainerStatus(pod, cs)
if statusCode == proto.StatusCode_STATUSCHECK_POD_INITIALIZING {
// Determine if an init container is still running and fetch the init logs.
for _, c := range pod.Status.InitContainerStatuses {
if c.State.Waiting != nil {
return statusCode, []string{}, fmt.Errorf("waiting for init container %s to start", c.Name)
} else if c.State.Running != nil {
sc, l := getPodLogs(pod, c.Name, statusCode)
return sc, l, fmt.Errorf("waiting for init container %s to complete", c.Name)
}
}
}
return statusCode, logs, err
}
if c, ok := isPodStatusUnknown(pod); ok {
log.Entry(context.TODO()).Debugf("Pod %q condition status of type %s is unknown", pod.Name, c.Type)
return proto.StatusCode_STATUSCHECK_UNKNOWN, nil, errors.New(c.Message)
}
log.Entry(context.TODO()).Debugf("Unable to determine current service state of pod %q", pod.Name)
return proto.StatusCode_STATUSCHECK_UNKNOWN, nil, fmt.Errorf("unable to determine current service state of pod %q", pod.Name)
}
func isPodReady(pod *v1.Pod) bool {
for _, c := range pod.Status.Conditions {
if c.Type == v1.PodReady && c.Status == v1.ConditionTrue {
return true
}
}
return false
}
func isPodNotScheduled(pod *v1.Pod) (v1.PodCondition, bool) {
for _, c := range pod.Status.Conditions {
if c.Type == v1.PodScheduled && c.Status == v1.ConditionFalse {View on GitHub (pinned to a1189de023)
Solutions
- Run `kubectl describe pod <name>` to inspect the raw condition message and events
- Check node health: `kubectl get nodes` and cordon/drain unhealthy nodes
- Check kubelet/container runtime on the node the pod is scheduled to
- Retry the deploy once the cluster stabilizes — this is often transient
Defensive patterns
Strategy: retry
Validate before calling
kubectl get pod <name> -o jsonpath='{.status.conditions}' | jq . # inspect conditions before deploying Try / catch
err := getPodStatus(ctx, pod)
if err != nil {
// transient cluster state: retry with backoff
time.Sleep(5 * time.Second)
err = getPodStatus(ctx, pod)
} Prevention
- Monitor node health before/during deploys (kubectl get nodes)
- Check kubelet and container runtime health on target nodes
- Treat STATUSCHECK_UNKNOWN as transient; use retries with backoff
- Use kubectl describe pod to see events that explain the unknown condition
When it happens
Trigger: getPodStatus encountering a pod whose condition status is Unknown — typically stuck Pending pods, nodes NotReady, kubelet reporting unknown state, or pods scheduled to unreachable nodes.
Common situations: Node pressure or kubelet down; cluster upgrades where pod status is temporarily indeterminate; pods in crash-loops that never reach a definitive condition.
Related errors
- following errors occurred %s
- unable to lookup minikube executable. Please add it to PATH
- rs.ae.Message (actionable error message from status check)
- no valid Kubernetes objects decoded
- no receiver was registered
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/64a6c5acb26801f8.
Report an issue: GitHub.