{"record":{"id":"88543034640b46bd","repo":"GoogleContainerTools/skaffold","slug":"getting-kubernetes-client-w","errorCode":null,"errorMessage":"getting Kubernetes client: %w","messagePattern":"getting Kubernetes client: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/actions/k8sjob/task.go","lineNumber":149,"sourceCode":"\t\t\tName:  e.Name,\n\t\t\tValue: e.Value,\n\t\t})\n\t}\n}\n\nfunc (t Task) Cleanup(ctx context.Context, out io.Writer) error {\n\tjm, err := t.jobsManager()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn k8sjobutil.ForceJobDelete(ctx, t.Name(), jm, t.kubectl)\n}\n\nfunc (t Task) jobsManager() (typesbatchv1.JobInterface, error) {\n\tclientset, err := kubernetesclient.Client(t.kubectl.KubeContext)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting Kubernetes client: %w\", err)\n\t}\n\n\treturn clientset.BatchV1().Jobs(t.jobManifest.Namespace), nil\n}\n\nfunc (t Task) getContainerToDeploy() corev1.Container {\n\treturn corev1.Container{\n\t\tName:    t.cfg.Name,\n\t\tImage:   t.artifact.Tag,\n\t\tCommand: t.cfg.Command,\n\t\tArgs:    t.cfg.Args,\n\t\tEnv:     append(t.getK8SEnvVars(t.cfg.Env), t.envVars...),\n\t}\n}\n\nfunc (t Task) getK8SEnvVars(envVars []latest.VerifyEnvVar) (k8sEnvVar []corev1.EnvVar) {\n\tfor _, envVar := range envVars {\n\t\tk8sEnvVar = append(k8sEnvVar, corev1.EnvVar{Name: envVar.Name, Value: envVar.Value})","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/actions/k8sjob/task.go#L131-L167","documentation":"Task.jobsManager obtains a Kubernetes clientset (kubernetesclient.Client for the task's kubecontext) to get a Job interface. If client construction fails — bad kubeconfig, unreadable context, or client init error — it returns 'getting Kubernetes client'. Callers are Exec and Cleanup, so this can hit during both run and teardown.","triggerScenarios":"Executing or cleaning up a k8sjob action where kubernetesclient.Client(kubeContext) fails: missing/invalid kubeconfig file, unknown context name, malformed kubeconfig YAML, or client-go construction error.","commonSituations":"KUBECONFIG env var pointing to a nonexistent file; context renamed after cluster deletion; kubeconfig with wrong apiVersion after manual editing; HOME not set in CI so default kubeconfig path unresolvable.","solutions":["Validate the kubeconfig: kubectl config current-context and kubectl auth can-i get jobs --context <ctx> to ensure the context resolves and is authorized.","Fix KUBECONFIG / kubeContext setting in skaffold.yaml to point at a valid config file containing the context.","Regenerate credentials for the context (e.g. gcloud container clusters get-credentials) if the kubeconfig is stale."],"exampleFix":"// before\necho $KUBECONFIG  # /nonexistent/config\n// after\nexport KUBECONFIG=$HOME/.kube/config\nkubectl config current-context  # sanity check, then rerun skaffold","handlingStrategy":"validation","validationCode":"// Verify kubeconfig resolves the context before running k8sjob actions\n[ -f \"${KUBECONFIG:-$HOME/.kube/config}\" ] && kubectl config get-contexts \"<ctx>\" > /dev/null","typeGuard":null,"tryCatchPattern":"try {\n  await skaffold.run(...);\n} catch (e) {\n  if (/getting Kubernetes client/.test(String(e))) {\n    console.error('Fix KUBECONFIG / kubeContext; ensure the context exists');\n  }\n  throw e;\n}","preventionTips":["Set KUBECONFIG explicitly in CI environments (HOME may be unset)","Regenerate kubeconfig after cluster recreation or context renames","Validate contexts with kubectl config get-contexts in preflight scripts"],"tags":["kubernetes","kubeconfig","skaffold","client-init"],"backgroundTag":"invalid-kubeconfig","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"}