1
0
Files
monitor/tests/watch/watch.go
dragonflylee 696f6ba425 update demo
Signed-off-by: dragonflylee <dragonflylee@outlook.com>
2023-12-22 16:55:35 +08:00

56 lines
1.3 KiB
Go

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
}
}
}