我是靠谱客的博主 腼腆小蝴蝶,最近开发中收集的这篇文章主要介绍花了快一天,才搞出来的一个client-go的demo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用来直接获取所有service的annotaion里有ambassador的东东。

或者,watch集群事件。

 

package main

import (
	"fmt"
	"os"
	//"time"
	"strings"

	//"k8s.io/apimachinery/pkg/api/errors"
	"k8s.io/api/core/v1"
    	//"k8s.io/apimachinery/pkg/labels"
    	//"k8s.io/apimachinery/pkg/watch"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	//
	// Uncomment to load all auth plugins
	// _ "k8s.io/client-go/plugin/pkg/client/auth"
	//
	// Or uncomment to load specific auth plugins
	// _ "k8s.io/client-go/plugin/pkg/client/auth/azure"
	// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
	// _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
	// _ "k8s.io/client-go/plugin/pkg/client/auth/openstack"
)

func main() {
	// creates the in-cluster config
	config, err := rest.InClusterConfig()
	if err != nil {
		panic(err.Error())
	}
	// creates the clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}
	
		// get pods in all the namespaces by omitting namespace
		// Or specify namespace to get pods in particular namespace
		services, err := clientset.CoreV1().Services("").List(metav1.ListOptions{})
		if err != nil {
			panic(err.Error())
		}
		for i:=0; i < len(services.Items); i++ {
			item := services.Items[i].Annotations
			for k, v := range item {
				if strings.Contains(k, "getambassador") && strings.Contains(v, "ambassador") && strings.Contains(v, "Mapping"){
					fmt.Println(v)
					fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@")
				}
			}
		}

		//time.Sleep(10 * time.Second)
		handleNewServices(clientset)
		
}

func handleNewServices(clientset *kubernetes.Clientset) {                                                                                      
    for {                                                                                                                                      
        serviceStreamWatcher, err := clientset.CoreV1().Services("").Watch(metav1.ListOptions{})                                               
        if err != nil {                                                                                                                        
            panic(err.Error())                                                                                                                 
        }                                                                                                                                      
        fmt.Printf("%Tn", serviceStreamWatcher)                                                                                               
        for {                                                                                                                                  
            select {                                                                                                                           
        	case event := <-serviceStreamWatcher.ResultChan():           
                                                                      
            	    service := event.Object.(*v1.Service)		                                                                                              
                                                                                                                                               
            	    for key, value := range service.Annotations {                                                                                           
                	if strings.Contains(key, "getambassador") && strings.Contains(value, "ambassador") && strings.Contains(value, "Mapping"){
			    toFileStr := fmt.Sprintf("%sn%sn=============n", event.Type, value)                                                             
                            //fmt.Println(toFileStr)
			    _appendToFile("/app/k8s-ambassador",  toFileStr)
                        } 
            	    }                                                                                                                                  
            }                                                                                                                                      
    	}                                                                                                                                          
    }                                                                                                                                            
}

func _appendToFile(file, str string) {
        f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0664)
        if err != nil {
                fmt.Printf("Cannot open file %s!n", file)
                return
        }
        defer f.Close()
        f.WriteString(str)
}

  

转载于:https://www.cnblogs.com/aguncn/p/11598715.html

最后

以上就是腼腆小蝴蝶为你收集整理的花了快一天,才搞出来的一个client-go的demo的全部内容,希望文章能够帮你解决花了快一天,才搞出来的一个client-go的demo所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部