{"record":{"id":"6c3f210440f6e95e","repo":"openimsdk/open-im-server","slug":"failed-to-create-clientset-v","errorCode":null,"errorMessage":"failed to create clientset: %v","messagePattern":"failed to create clientset: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"pkg/common/discovery/kubernetes/kubernetes.go","lineNumber":42,"sourceCode":"\tdialOptions []grpc.DialOption\n\n\trpcTargets map[string]string\n\tselfTarget string\n\n\tmu      sync.RWMutex\n\tconnMap map[string][]*grpc.ClientConn\n}\n\n// NewKubernetesConnManager creates a new connection manager that uses Kubernetes services for service discovery.\nfunc NewKubernetesConnManager(namespace string, options ...grpc.DialOption) (*KubernetesConnManager, error) {\n\tconfig, err := rest.InClusterConfig()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create in-cluster config: %v\", err)\n\t}\n\n\tclientset, err := kubernetes.NewForConfig(config)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create clientset: %v\", err)\n\t}\n\n\tk := &KubernetesConnManager{\n\t\tclientset:   clientset,\n\t\tnamespace:   namespace,\n\t\tdialOptions: options,\n\t\tconnMap:     make(map[string][]*grpc.ClientConn),\n\t}\n\n\tgo k.watchEndpoints()\n\n\treturn k, nil\n}\n\nfunc (k *KubernetesConnManager) initializeConns(serviceName string) error {\n\tport, err := k.getServicePort(serviceName)\n\tif err != nil {\n\t\treturn err","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/openimsdk/open-im-server/blob/175a7bb0673eca18e9d1b10bff4f728da6b1b513/pkg/common/discovery/kubernetes/kubernetes.go#L24-L60","documentation":"NewKubernetesConnManager builds an in-cluster Kubernetes client. After loading the in-cluster config, it calls kubernetes.NewForConfig to create a clientset; if that fails (bad config, missing REST mapper setup, invalid host/CA data) it wraps the error with this message. The manager cannot do any service discovery without a clientset.","triggerScenarios":"kubernetes.NewForConfig(config) returns an error inside NewKubernetesConnManager — e.g. malformed in-cluster config, unreadable service account token/CA files, or an invalid host URL in the config.","commonSituations":"Running outside a Kubernetes pod with a stale/hand-crafted in-cluster config; missing or corrupted /var/run/secrets/kubernetes.io service account files; wrong kubeconfig mounted.","solutions":["Verify the error text from %v — it names the underlying clientset creation problem (e.g. 'unable to load in-cluster configuration').","Ensure the pod's service account token and ca.crt are mounted and readable at /var/run/secrets/kubernetes.io/serviceaccount/.","Confirm KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT env vars are set when running in-cluster.","If running outside the cluster, use kubeconfig-based (clientcmd) config instead of in-cluster config."],"exampleFix":"// before\nconfig, err := rest.InClusterConfig()\n// after\nconfig, err := rest.InClusterConfig()\nif err != nil {\n    config, err = clientcmd.BuildConfigFromFlags(\"\", os.Getenv(\"KUBECONFIG\"))\n}","handlingStrategy":"try-catch","validationCode":"if _, err := os.Stat(\"/var/run/secrets/kubernetes.io/serviceaccount/token\"); err != nil {\n    log.Fatal(\"not running in-cluster; use kubeconfig\")\n}","typeGuard":null,"tryCatchPattern":"mgr, err := NewKubernetesConnManager(ctx, namespace)\nif err != nil {\n    return fmt.Errorf(\"k8s conn manager init: %w\", err)\n}","preventionTips":["Verify service account token and ca.crt are mounted before starting","Fall back to kubeconfig when KUBERNETES_SERVICE_HOST is unset","Smoke-test clientset access with a trivial API call at startup"],"tags":["kubernetes","configuration","initialization"],"backgroundTag":"kubernetes-client-init-failed","analyzedSha":"175a7bb0673eca18e9d1b10bff4f728da6b1b513","analyzedAt":"2026-09-04T16:52:56.821Z","contentChangedAt":"2026-09-04T16:52:56.821Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}