zoukankan      html  css  js  c++  java
  • kubernetes-handbook informer

    cat<<EOF >informer.go
    package main
    
    import (
        "flag"
        "fmt"
        "time"
    
        "k8s.io/client-go/informers"
        coreinformers "k8s.io/client-go/informers/core/v1"
        "k8s.io/client-go/kubernetes"
        klog "k8s.io/klog/v2"
        //"k8s.io/client-go/pkg/api/v1"
        "k8s.io/api/core/v1"
        "k8s.io/client-go/tools/cache"
        "k8s.io/client-go/tools/clientcmd"
        "k8s.io/kubectl/pkg/util/logs"
    )
    
    // PodLoggingController logs the name and namespace of pods that are added,
    // deleted, or updated
    type PodLoggingController struct {
        informerFactory informers.SharedInformerFactory
        podInformer     coreinformers.PodInformer
    }
    
    // Run starts shared informers and waits for the shared informer cache to
    // synchronize.
    func (c *PodLoggingController) Run(stopCh chan struct{}) error {
        // Starts all the shared informers that have been created by the factory so
        // far.
        c.informerFactory.Start(stopCh)
        // wait for the initial synchronization of the local cache.
        if !cache.WaitForCacheSync(stopCh, c.podInformer.Informer().HasSynced) {
            return fmt.Errorf("Failed to sync")
        }
        return nil
    }
    
    func (c *PodLoggingController) podAdd(obj interface{}) {
        pod := obj.(*v1.Pod)
        klog.Infof("POD CREATED: %s/%s", pod.Namespace, pod.Name)
    }
    
    func (c *PodLoggingController) podUpdate(old, new interface{}) {
        oldPod := old.(*v1.Pod)
        newPod := new.(*v1.Pod)
        klog.Infof(
            "POD UPDATED. %s/%s %s",
            oldPod.Namespace, oldPod.Name, newPod.Status.Phase,
        )
    }
    
    func (c *PodLoggingController) podDelete(obj interface{}) {
        pod := obj.(*v1.Pod)
        klog.Infof("POD DELETED: %s/%s", pod.Namespace, pod.Name)
    }
    
    // NewPodLoggingController creates a PodLoggingController
    func NewPodLoggingController(informerFactory informers.SharedInformerFactory) *PodLoggingController {
        podInformer := informerFactory.Core().V1().Pods()
    
        c := &PodLoggingController{
            informerFactory: informerFactory,
            podInformer:     podInformer,
        }
        podInformer.Informer().AddEventHandler(
            // Your custom resource event handlers.
            cache.ResourceEventHandlerFuncs{
                // Called on creation
                AddFunc: c.podAdd,
                // Called on resource update and every resyncPeriod on existing resources.
                UpdateFunc: c.podUpdate,
                // Called on resource deletion.
                DeleteFunc: c.podDelete,
            },
        )
        return c
    }
    
    var kubeconfig string
    
    func init() {
        flag.StringVar(&kubeconfig, "kubeconfig", "", "absolute path to the kubeconfig file")
    }
    
    func main() {
        flag.Parse()
        logs.InitLogs()
        defer logs.FlushLogs()
    
        config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
        if err != nil {
            panic(err.Error())
        }
    
        clientset, err := kubernetes.NewForConfig(config)
        if err != nil {
            klog.Fatal(err)
        }
    
        factory := informers.NewSharedInformerFactory(clientset, time.Hour*24)
        controller := NewPodLoggingController(factory)
        stop := make(chan struct{})
        defer close(stop)
        err = controller.Run(stop)
        if err != nil {
            klog.Fatal(err)
        }
        select {}
    }
    EOF
    root@ubuntu:~/go_learn/informer# go mod init informer
    go: creating new go.mod: module informer
    root@ubuntu:~/go_learn/informer# ls
    go.mod  informer.go
    root@ubuntu:~/go_learn/informer# go mod vendor
    root@ubuntu:~/go_learn/informer# go mod vendor
    go: finding module for package k8s.io/client-go/kubernetes
    go: finding module for package k8s.io/client-go/tools/clientcmd
    go: finding module for package k8s.io/klog/v2
    go: finding module for package k8s.io/client-go/informers/core/v1
    go: finding module for package k8s.io/api/core/v1
    go: finding module for package k8s.io/client-go/tools/cache
    go: finding module for package k8s.io/kubectl/pkg/util/logs
    go: finding module for package k8s.io/client-go/informers
    go: downloading k8s.io/client-go v1.5.2
    go: downloading k8s.io/api v0.21.2
    go: downloading k8s.io/kubectl v0.21.2
    go: found k8s.io/api/core/v1 in k8s.io/api v0.21.2
    go: found k8s.io/klog/v2 in k8s.io/klog/v2 v2.9.0
    go: found k8s.io/kubectl/pkg/util/logs in k8s.io/kubectl v0.21.2
    go: downloading k8s.io/client-go v0.21.2
    go: downloading github.com/googleapis/gnostic v0.4.1
    go: downloading k8s.io/utils v0.0.0-20201110183641-67b214c5f920
    go: downloading github.com/golang/protobuf v1.4.3
    go: downloading google.golang.org/appengine v1.6.5
    go: downloading google.golang.org/protobuf v1.25.0
    root@ubuntu:~/go_learn/informer# go build ./ -o informer
    can't load package: package -o: cannot find package "." in:
            /root/go_learn/informer/vendor/-o
    root@ubuntu:~/go_learn/informer# go build . -o informer
    can't load package: package -o: cannot find package "." in:
            /root/go_learn/informer/vendor/-o
    root@ubuntu:~/go_learn/informer# go build  -o informer .
    root@ubuntu:~/go_learn/informer#
    root@ubuntu:~/go_learn/informer# ./informer    -kubeconfig=$HOME/.kube/config
    I0708 10:46:09.094719   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-xbdlt
    I0708 10:46:09.094890   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-dpwh6
    I0708 10:46:09.094907   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-wvdkr
    I0708 10:46:09.094919   28135 informer.go:41] POD CREATED: kube-system/kube-controller-manager-cloud
    I0708 10:46:09.094934   28135 informer.go:41] POD CREATED: kube-system/calico-kube-controllers-5978c5f6b5-xk6cq
    I0708 10:46:09.094949   28135 informer.go:41] POD CREATED: kube-system/kube-controller-manager-ubuntu
    I0708 10:46:09.094961   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-0
    I0708 10:46:09.094975   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-1
    I0708 10:46:09.094987   28135 informer.go:41] POD CREATED: kube-system/kube-scheduler-ubuntu
    I0708 10:46:09.095000   28135 informer.go:41] POD CREATED: kube-system/kube-controller-manager-centos7
    I0708 10:46:09.095012   28135 informer.go:41] POD CREATED: kube-system/kube-scheduler-centos7
    I0708 10:46:09.095027   28135 informer.go:41] POD CREATED: kube-system/kube-batch-7bfddfb67c-9l8pw
    I0708 10:46:09.095039   28135 informer.go:41] POD CREATED: volcano-system/volcano-scheduler-7f48dddb8f-8g6b5
    I0708 10:46:09.095052   28135 informer.go:41] POD CREATED: volcano-system/volcano-admission-6cc49fdc5-5zgzs
    I0708 10:46:09.095064   28135 informer.go:41] POD CREATED: default/job-1-nginx-0
    I0708 10:46:09.095077   28135 informer.go:41] POD CREATED: kube-system/kube-scheduler-cloud
    I0708 10:46:09.095089   28135 informer.go:41] POD CREATED: kube-system/kube-apiserver-cloud
    I0708 10:46:09.095112   28135 informer.go:41] POD CREATED: kube-system/calico-node-nwpfl
    I0708 10:46:09.095134   28135 informer.go:41] POD CREATED: kube-system/calico-node-blvrv
    I0708 10:46:09.095157   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-3
    I0708 10:46:09.095179   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-4
    I0708 10:46:09.095197   28135 informer.go:41] POD CREATED: volcano-system/volcano-admission-init-qgh9b
    I0708 10:46:09.095210   28135 informer.go:41] POD CREATED: default/example-foo-54dc4db9fc-88nd7
    I0708 10:46:09.095230   28135 informer.go:41] POD CREATED: kube-system/coredns-546565776c-82jfw
    I0708 10:46:09.095246   28135 informer.go:41] POD CREATED: kube-system/kube-apiserver-centos7
    I0708 10:46:09.095266   28135 informer.go:41] POD CREATED: kube-system/calico-node-6tc54
    I0708 10:46:09.095283   28135 informer.go:41] POD CREATED: kube-system/calico-node-rswtj
    I0708 10:46:09.095299   28135 informer.go:41] POD CREATED: volcano-system/volcano-controllers-5f5c4f4785-8dbgl
    I0708 10:46:09.095311   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-2
    I0708 10:46:09.095326   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-5
    I0708 10:46:09.095338   28135 informer.go:41] POD CREATED: kube-system/kube-apiserver-ubuntu
    I0708 10:46:09.095354   28135 informer.go:41] POD CREATED: kube-system/coredns-546565776c-px8bd
    I0708 10:46:09.095368   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-6jk97

    删掉一个deploy

    root@ubuntu:~# kubectl get deploy
    NAME          READY   UP-TO-DATE   AVAILABLE   AGE
    example-foo   1/1     1            1           46h
    root@ubuntu:~# kubectl delete deploy example-foo
    deployment.apps "example-foo" deleted
    root@ubuntu:~# kubectl delete deploy example-foo
    root@ubuntu:~/go_learn/informer# ./informer    -kubeconfig=$HOME/.kube/config
    I0708 10:46:09.094719   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-xbdlt
    I0708 10:46:09.094890   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-dpwh6
    I0708 10:46:09.094907   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-wvdkr
    I0708 10:46:09.094919   28135 informer.go:41] POD CREATED: kube-system/kube-controller-manager-cloud
    I0708 10:46:09.094934   28135 informer.go:41] POD CREATED: kube-system/calico-kube-controllers-5978c5f6b5-xk6cq
    I0708 10:46:09.094949   28135 informer.go:41] POD CREATED: kube-system/kube-controller-manager-ubuntu
    I0708 10:46:09.094961   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-0
    I0708 10:46:09.094975   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-1
    I0708 10:46:09.094987   28135 informer.go:41] POD CREATED: kube-system/kube-scheduler-ubuntu
    I0708 10:46:09.095000   28135 informer.go:41] POD CREATED: kube-system/kube-controller-manager-centos7
    I0708 10:46:09.095012   28135 informer.go:41] POD CREATED: kube-system/kube-scheduler-centos7
    I0708 10:46:09.095027   28135 informer.go:41] POD CREATED: kube-system/kube-batch-7bfddfb67c-9l8pw
    I0708 10:46:09.095039   28135 informer.go:41] POD CREATED: volcano-system/volcano-scheduler-7f48dddb8f-8g6b5
    I0708 10:46:09.095052   28135 informer.go:41] POD CREATED: volcano-system/volcano-admission-6cc49fdc5-5zgzs
    I0708 10:46:09.095064   28135 informer.go:41] POD CREATED: default/job-1-nginx-0
    I0708 10:46:09.095077   28135 informer.go:41] POD CREATED: kube-system/kube-scheduler-cloud
    I0708 10:46:09.095089   28135 informer.go:41] POD CREATED: kube-system/kube-apiserver-cloud
    I0708 10:46:09.095112   28135 informer.go:41] POD CREATED: kube-system/calico-node-nwpfl
    I0708 10:46:09.095134   28135 informer.go:41] POD CREATED: kube-system/calico-node-blvrv
    I0708 10:46:09.095157   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-3
    I0708 10:46:09.095179   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-4
    I0708 10:46:09.095197   28135 informer.go:41] POD CREATED: volcano-system/volcano-admission-init-qgh9b
    I0708 10:46:09.095210   28135 informer.go:41] POD CREATED: default/example-foo-54dc4db9fc-88nd7
    I0708 10:46:09.095230   28135 informer.go:41] POD CREATED: kube-system/coredns-546565776c-82jfw
    I0708 10:46:09.095246   28135 informer.go:41] POD CREATED: kube-system/kube-apiserver-centos7
    I0708 10:46:09.095266   28135 informer.go:41] POD CREATED: kube-system/calico-node-6tc54
    I0708 10:46:09.095283   28135 informer.go:41] POD CREATED: kube-system/calico-node-rswtj
    I0708 10:46:09.095299   28135 informer.go:41] POD CREATED: volcano-system/volcano-controllers-5f5c4f4785-8dbgl
    I0708 10:46:09.095311   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-2
    I0708 10:46:09.095326   28135 informer.go:41] POD CREATED: default/test-job-default-nginx-5
    I0708 10:46:09.095338   28135 informer.go:41] POD CREATED: kube-system/kube-apiserver-ubuntu
    I0708 10:46:09.095354   28135 informer.go:41] POD CREATED: kube-system/coredns-546565776c-px8bd
    I0708 10:46:09.095368   28135 informer.go:41] POD CREATED: kube-system/kube-proxy-6jk97
    I0708 10:49:26.530314   28135 informer.go:47] POD UPDATED. default/example-foo-54dc4db9fc-88nd7 Running
    I0708 10:49:27.076371   28135 informer.go:47] POD UPDATED. default/example-foo-54dc4db9fc-88nd7 Running
    I0708 10:49:28.845567   28135 informer.go:47] POD UPDATED. default/example-foo-54dc4db9fc-88nd7 Pending
    I0708 10:49:29.856741   28135 informer.go:47] POD UPDATED. default/example-foo-54dc4db9fc-88nd7 Pending
    I0708 10:49:29.858950   28135 informer.go:55] POD DELETED: default/example-foo-54dc4db9fc-88nd7
    I0708 10:49:47.069494   28135 informer.go:47] POD UPDATED. kube-system/kube-batch-7bfddfb67c-9l8pw Running
    I0708 10:50:00.168341   28135 informer.go:47] POD UPDATED. kube-system/kube-batch-7bfddfb67c-9l8pw Running

    kubernetes-handbook 

  • 相关阅读:
    [BZOJ2296] [POJ Challenge] 随机种子
    [BZOJ1026] [SCOI2009] windy数 (数位dp)
    [BZOJ1306] [CQOI2009] match循环赛 (搜索)
    [BZOJ2654] tree (kruskal & 二分答案)
    [BZOJ3506] [Cqoi2014] 排序机械臂 (splay)
    [BZOJ1552] [Cerc2007] robotic sort (splay)
    [BZOJ3110] [Zjoi2013] K大数查询 (树套树)
    BZOJ3611: [Heoi2014]大工程
    BZOJ2286: [Sdoi2011]消耗战
    BZOJ3876: [Ahoi2014]支线剧情
  • 原文地址:https://www.cnblogs.com/dream397/p/14985097.html
Copyright © 2011-2022 走看看