client-go is a Go client for the Kubernetes API, allowing programmatic cluster management.
1import (2 "context"3 "k8s.io/client-go/kubernetes"4 "k8s.io/client-go/tools/clientcmd"5 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"6)78func main() {9 // Connect to cluster10 kubeconfig, _ := clientcmd.BuildConfigFromFlags("",11 filepath.Join(os.Getenv("HOME"), ".kube", "config"))1213 clientset, err := kubernetes.NewForConfig(kubeconfig)14 if err != nil {15 log.Fatal(err)16 }1718 // Get pods19 pods, err := clientset.CoreV1().Pods("default").List(20 context.Background(),21 metav1.ListOptions{},22 )23 if err != nil {24 log.Fatal(err)25 }2627 for _, pod := range pods.Items {28 fmt.Printf("Pod: %s (Status: %s)\n", pod.Name, pod.Status.Phase)29 }3031 // Create Deployment32 deployment := &appsv1.Deployment{33 ObjectMeta: metav1.ObjectMeta{34 Name: "my-app",35 },36 Spec: appsv1.DeploymentSpec{37 Replicas: int32Ptr(3),38 Selector: &metav1.LabelSelector{39 MatchLabels: map[string]string{"app": "my-app"},40 },41 Template: corev1.PodTemplateSpec{42 ObjectMeta: metav1.ObjectMeta{43 Labels: map[string]string{"app": "my-app"},44 },45 Spec: corev1.PodSpec{46 Containers: []corev1.Container{{47 Name: "app",48 Image: "my-app:latest",49 }},50 },51 },52 },53 }5455 _, err = clientset.AppsV1().Deployments("default").Create(56 context.Background(), deployment, metav1.CreateOptions{})57}5859// Watch: tracking changes60watcher, _ := clientset.CoreV1().Pods("").Watch(61 context.Background(),62 metav1.ListOptions{})6364for event := range watcher.ResultChan() {65 pod := event.Object.(*corev1.Pod)66 fmt.Printf("Event: %s, Pod: %s\n", event.Type, pod.Name)67}
Usage: Operators, controllers, CLI tools, automation.