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

  1. Run `kubectl describe pod <name>` to inspect the raw condition message and events
  2. Check node health: `kubectl get nodes` and cordon/drain unhealthy nodes
  3. Check kubelet/container runtime on the node the pod is scheduled to
  4. 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

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


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/64a6c5acb26801f8. Report an issue: GitHub.