Skip to content

Instantly share code, notes, and snippets.

@manzil-infinity180
Created May 19, 2025 06:43
Show Gist options
  • Save manzil-infinity180/cff1263b27c2ce34d8da4a5ed7284af8 to your computer and use it in GitHub Desktop.
Save manzil-infinity180/cff1263b27c2ce34d8da4a5ed7284af8 to your computer and use it in GitHub Desktop.
How to detect which type of cluster are you using (kind, k3d)
package main
import (
"context"
"fmt"
"os"
"strings"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func main() {
// Load kubeconfig
kubeconfigPath := clientcmd.RecommendedHomeFile
config, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
if err != nil {
fmt.Printf("Error loading kubeconfig: %v\n", err)
os.Exit(1)
}
// Create clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
fmt.Printf("Error creating clientset: %v\n", err)
os.Exit(1)
}
// Get nodes
nodes, err := clientset.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{})
if err != nil {
fmt.Printf("Error getting nodes: %v\n", err)
os.Exit(1)
}
clusterType := "Unknown"
for _, node := range nodes.Items {
name := node.ObjectMeta.Name
// Check name
if strings.Contains(name, "kind") {
clusterType = "Kind"
break
} else if strings.Contains(name, "k3d") {
clusterType = "K3d"
break
}
// Optionally, check labels
for label := range node.Labels {
if strings.Contains(label, "kind.x-k8s.io") {
clusterType = "Kind"
break
} else if strings.Contains(label, "k3s.io") {
clusterType = "K3d"
break
}
}
}
fmt.Printf("Detected cluster type: %s\n", clusterType)
}
$ kubectl config get-contexts
CURRENT   NAME                CLUSTER             AUTHINFO             NAMESPACE
          cluster1            k3d-cluster1        admin@k3d-cluster1   
          cluster2            k3d-cluster2        admin@k3d-cluster2   
          cluster3            k3d-cluster3        admin@k3d-cluster3   
          cluster4            k3d-cluster4        admin@k3d-cluster4   
          its1                its1-cluster        its1-admin           
*         k3d-kubeflex        k3d-kubeflex        admin@k3d-kubeflex   
          kind-do-it-please   kind-do-it-please   kind-do-it-please    
          kind-holox          kind-holox          kind-holox           
          kind-rahulxf        kind-rahulxf        kind-rahulxf         
          minikube            minikube            minikube             default
          wds1                wds1-cluster        wds1-admin           default
          
 # get it from their CLUSTER naming          
$ kubectl config view --minify
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://0.0.0.0:51092
  name: k3d-kubeflex
contexts:
- context:
    cluster: k3d-kubeflex
    user: admin@k3d-kubeflex
  name: k3d-kubeflex
current-context: k3d-kubeflex
kind: Config
preferences:
  extensions:
  - extension:
      data:
        kflex-initial-ctx-name: k3d-kubeflex
      metadata:
        creationTimestamp: null
        name: kflex-config-extension-name
    name: kflex-config-extension-name
users:
- name: admin@k3d-kubeflex
  user:
    client-certificate-data: DATA+OMITTED
    client-key-data: DATA+OMITTED
get nodes -o wide
NAME                    STATUS   ROLES                  AGE    VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION     CONTAINER-RUNTIME
k3d-kubeflex-server-0   Ready    control-plane,master   111m   v1.31.5+k3s1   172.18.0.9    <none>        K3s v1.31.5+k3s1   6.10.14-linuxkit   containerd://1.7.23-k3s2
kubectl get nodes -o jsonpath='{.items[*].spec.providerID}'
k3s://k3d-kubeflex-server-0%               
kubectl get nodes --show-labels
NAME                    STATUS   ROLES                  AGE    VERSION        LABELS
k3d-kubeflex-server-0   Ready    control-plane,master   113m   v1.31.5+k3s1   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/instance-type=k3s,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=k3d-kubeflex-server-0,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=true,node-role.kubernetes.io/master=true,node.kubernetes.io/instance-type=k3s
if kubectl get nodes -o name | grep -qi kind; then
  echo "Cluster is probably KIND"
elif kubectl get nodes -o name | grep -qi k3d; then
  echo "Cluster is probably K3D"
else
  echo "Unknown cluster type"
fi
// Cluster is probably K3D
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment