GoogleContainerTools/skaffold · critical
getting Kubernetes client: %w
Error message
getting Kubernetes client: %w
What it means
Inside createAndRunJob, Skaffold builds a Kubernetes clientset via `kubernetesclient.Client(v.kubectl.KubeContext)` and wraps any failure with 'getting Kubernetes client'. This means client construction itself failed — typically kubeconfig loading, context resolution, or REST config creation — before any API request is sent.
Source
Thrown at pkg/skaffold/verify/k8sjob/verify.go:182
defer wg.Done()
s.Go(func() error {
// TODO(aaron-prindle) i think we are using image tag for uniqueness?
// - should be container name?
return v.createAndRunJob(ctx, testcase)
})
}(nTC)
}
v.TrackBuildArtifacts(builds)
wg.Wait()
return s.Wait()
}
func (v *Verifier) createAndRunJob(ctx context.Context, tc latest.VerifyTestCase) error {
// TODO(aaron-prindle) look for and delete existing job w/ same name?
// - must be done before logger starts or else confusing output
clientset, err := kubernetesclient.Client(v.kubectl.KubeContext)
if err != nil {
return fmt.Errorf("getting Kubernetes client: %w", err)
}
var job *batchv1.Job
if tc.ExecutionMode.KubernetesClusterExecutionMode.JobManifestPath != "" {
job, err = v.createJobFromManifestPath(tc.Name, tc.Container, tc.ExecutionMode.KubernetesClusterExecutionMode.JobManifestPath)
if err != nil {
return err
}
} else {
job = v.createJob(tc.Name, tc.Container)
}
if tc.ExecutionMode.KubernetesClusterExecutionMode.Overrides != "" {
obj, err := k8sjobutil.ApplyOverrides(job, tc.ExecutionMode.KubernetesClusterExecutionMode.Overrides)
if err != nil {
return err
}
job = obj.(*batchv1.Job)
}View on GitHub (pinned to a1189de023)
Solutions
- Run `kubectl config get-contexts` to confirm the context exists and is valid
- Fix or regenerate kubeconfig (e.g. `gcloud container clusters get-credentials`, `aws eks update-kubeconfig`)
- Check KUBECONFIG env var and file permissions
- If using client certs, verify cert/key paths in the kubeconfig exist and are readable
- Pass the correct --kube-context to skaffold instead of relying on defaults
Example fix
// before skaffold verify --kube-context nonexistent-context # getting Kubernetes client: ... // after kubectl config get-contexts # confirm real context name skaffold verify --kube-context my-cluster
Defensive patterns
Strategy: validation
Validate before calling
raw, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
clientcmd.NewDefaultClientConfigLoadingRules(),
&clientcmd.ConfigOverrides{CurrentContext: kubeContext}).RawConfig()
if err != nil { return fmt.Errorf("kubeconfig unusable: %w", err) }
if _, ok := raw.Contexts[kubeContext]; !ok {
return fmt.Errorf("context %q not found in kubeconfig", kubeContext)
} Type guard
func kubeContextValid(path, name string) bool {
data, err := os.ReadFile(path)
if err != nil { return false }
var kc struct{ Contexts map[string]json.RawMessage `json:"contexts"` }
if json.Unmarshal(data, &kc) != nil { return false }
_, ok := kc.Contexts[name]
return ok
} Try / catch
if err := verifier.Cleanup(ctx, out); err != nil {
if strings.Contains(err.Error(), "getting Kubernetes client") {
// log kubeconfig path + context, fall back to manual job deletion
}
} Prevention
- Ensure KUBECONFIG is set and readable in CI before running skaffold
- Never hand-edit kubeconfig without validating via kubectl
- Regenerate credentials after they expire
- Verify context names with `kubectl config get-contexts` before passing --kube-context
When it happens
Trigger: createAndRunJob is invoked with a kubeContext that cannot be resolved: missing/invalid kubeconfig file, unknown context name, malformed cluster/user entries, or unreadable client cert/key files referenced by the context.
Common situations: KUBECONFIG pointing to a nonexistent file; context renamed or deleted in ~/.kube/config; malformed kubeconfig after manual editing; unreadable certificate files; running in a container/CI without a mounted kubeconfig.
Related errors
- getting Kubernetes client: %w
- unable to connect to Kubernetes: %w
- error getting Kubernetes dynamic client: %w
- error getting Kubernetes client: %w
- resolving namespace: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/f43c60b0bbce756b.
Report an issue: GitHub.