package main import ( "context" "flag" "fmt" "log" "path/filepath" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" ) func main() { var kubeconfig string flag.StringVar(&kubeconfig, "kubeconfig", filepath.Join(homedir.HomeDir(), ".kube", "config"), "(optional) absolute path to the kubeconfig file") flag.Parse() // use the current context in kubeconfig config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err != nil { log.Fatal(err) } ctx := context.Background() // 创建 clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { log.Fatal(err) } // 使用 clientsent 监听 kube-system 下 Pod 对象 list, err := clientset.CoreV1().Pods("kube-system"). Watch(ctx, metav1.ListOptions{Watch: true}) if err != nil { log.Fatal(err) } for event := range list.ResultChan() { pod := event.Object.(*corev1.Pod) switch event.Type { case watch.Added: fmt.Printf("Pod %s added\n", pod.Name) // todo: reconcile logic goes here case watch.Modified: fmt.Printf("Pod %s modified\n", pod.Name) // todo: reconcile logic goes here case watch.Deleted: fmt.Printf("Pod %s deleted\n", pod.Name) // todo: reconcile logic goes here } } }