{"record":{"id":"e924d6c228790d87","repo":"GoogleContainerTools/skaffold","slug":"statuscheck-kubectl-client-fetch-err","errorCode":"STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR","errorMessage":"getting Kubernetes client: %w","messagePattern":"getting Kubernetes client: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/kubernetes/status/status_check.go","lineNumber":174,"sourceCode":"\tevent.StatusCheckEventEnded(errCode, err)\n\tif err != nil {\n\t\teventV2.TaskFailed(constants.StatusCheck, err)\n\t\treturn err\n\t}\n\teventV2.TaskSucceeded(constants.StatusCheck)\n\n\toutput.Default.Fprintln(out, \"Deployments stabilized in\", timeutil.Humanize(time.Since(start)))\n\treturn nil\n}\n\nfunc (s *monitor) Reset() {\n\ts.seenResources.Reset()\n}\n\nfunc (s *monitor) statusCheck(ctx context.Context, out io.Writer) (proto.StatusCode, error) {\n\tclient, err := kubernetesclient.Client(s.kubeContext)\n\tif err != nil {\n\t\treturn proto.StatusCode_STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR, fmt.Errorf(\"getting Kubernetes client: %w\", err)\n\t}\n\tdynClient, err := kubernetesclient.DynamicClient(s.kubeContext)\n\tif err != nil {\n\t\treturn proto.StatusCode_STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR, fmt.Errorf(\"getting Kubernetes client: %w\", err)\n\t}\n\tresources := make([]*resource.Resource, 0)\n\tfor _, n := range *s.namespaces {\n\t\tnewDeployments, err := getDeployments(ctx, client, n, s.labeller, getDeadline(s.deadlineSeconds), s.tolerateFailures)\n\t\tif err != nil {\n\t\t\treturn proto.StatusCode_STATUSCHECK_DEPLOYMENT_FETCH_ERR, fmt.Errorf(\"could not fetch deployments: %w\", err)\n\t\t}\n\t\tfor _, d := range newDeployments {\n\t\t\tif s.seenResources.Contains(d) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tresources = append(resources, d)\n\t\t\ts.seenResources.Add(d)\n\t\t}","sourceCodeStart":156,"sourceCodeEnd":192,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/kubernetes/status/status_check.go#L156-L192","documentation":"monitor.statusCheck obtains both a typed Kubernetes clientset and later a dynamic client to poll deployment status. Failure to build the typed client via kubernetesclient.Client(kubeContext) aborts the status check with status code STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR. Like error 525, root causes are kubeconfig/context/connectivity problems.","triggerScenarios":"kubernetesclient.Client(s.kubeContext) errors inside statusCheck (called from check) when skaffold dev is verifying deployed resources — missing kubeconfig, unknown kubeContext, or invalid REST config.","commonSituations":"Context deleted with an ephemeral cluster (kind/minikube stopped); KUBECONFIG unset in CI; kubeconfig file corrupted after a partial write; user switched clusters mid-run.","solutions":["Validate with kubectl --context <ctx> cluster-info before running skaffold","Restore or regenerate the kubeconfig for the target cluster","Set the correct kubeContext in skaffold.yaml or via --kube-context flag","Mount/copy a valid kubeconfig into CI containers running skaffold"],"exampleFix":"// before\nskaffold dev --kube-context kind-old-cluster  # deleted\n// after\nkubectl config get-contexts\nskaffold dev --kube-context kind-my-cluster","handlingStrategy":"validation","validationCode":"if out, err := exec.Command(\"kubectl\", \"--context\", kubeContext, \"cluster-info\").CombinedOutput(); err != nil {\n    return fmt.Errorf(\"statuscheck will fail, context %q unreachable: %s\", kubeContext, out)\n}","typeGuard":null,"tryCatchPattern":"client, err := kubernetesclient.Client(s.kubeContext)\nif err != nil {\n    return proto.StatusCode_STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR,\n        fmt.Errorf(\"verify kubeconfig/kube-context %q: %w\", s.kubeContext, err)\n}","preventionTips":["Pin --kube-context explicitly rather than relying on current-context drift","Verify cluster reachability before starting skaffold dev","Keep a fresh kubeconfig for ephemeral clusters (regenerate on kind/minikube restart)"],"tags":["kubernetes","kubeconfig","status-check"],"backgroundTag":"kubeconfig-context-unreachable","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}