首页 > 其他分享 >通过client-go使用yaml文件,部署服务到K8S

通过client-go使用yaml文件,部署服务到K8S

时间:2022-10-11 11:01:53浏览次数:42  
标签:err nil fmt yaml client go Fatal log

通过调用client-go客户端使用yaml文件的方式部署服务到K8S集群内

func main() {
	namespace := "test"

	config, err := clientcmd.BuildConfigFromFlags("", "config")
	if err != nil {
		panic(err.Error())
	}

	client, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}

	dc := client.Discovery()
	restMapperRes, err := restmapper.GetAPIGroupResources(dc)
	if err != nil {
		log.Fatal(err)
	}
	restMapper := restmapper.NewDiscoveryRESTMapper(restMapperRes) //

	//待创建的文件
	yamls := []string{"deployment.yaml", "service.yaml"}
	for _, s := range yamls {

		fmt.Println(s, "======")
		f, err := os.Open(s)
		if err != nil {
			log.Fatal(err)
		}
		d := yaml.NewYAMLOrJSONDecoder(f, 4096)

		for {
			ext := runtime.RawExtension{}
			if err := d.Decode(&ext); err != nil {
				if err == io.EOF {
					break
				}
				log.Fatal(err)
			}
			fmt.Println("raw: ", string(ext.Raw))

			obj, gvk, err := unstructured.UnstructuredJSONScheme.Decode(ext.Raw, nil, nil)
			fmt.Printf("gvk: %+v\n", gvk)

			mapping, err := restMapper.RESTMapping(gvk.GroupKind(), gvk.Version)
			fmt.Printf("mapping:%+v\n", mapping)
			if err != nil {
				log.Fatal(err)
			}

			// runtime.Object转换为unstructed
			unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
			if err != nil {
				log.Fatal(err)
			}
			fmt.Printf("unstructuredObj: %+v", unstructuredObj)

			var unstruct unstructured.Unstructured

			unstruct.Object = unstructuredObj

			if md, ok := unstruct.Object["metadata"]; ok {
				metadata := md.(map[string]interface{})
				if internalns, ok := metadata["namespace"]; ok {
					namespace = internalns.(string)
				}
			}

			// 动态客户端
			dclient, err := dynamic.NewForConfig(config)
			if err != nil {
				log.Fatal(err)
			}

			res, err := dclient.Resource(mapping.Resource).Namespace(namespace).Create(context.TODO(), &unstruct, metav1.CreateOptions{})
			if err != nil {
				log.Fatal(err)
			}
			fmt.Println(res, "=============")
		}
	}
}

本文参考自https://blog.dianduidian.com/post/kubernetes-client-go%E5%AE%9E%E7%8E%B0yaml%E5%88%9B%E5%BB%BAdeployment/

标签:err,nil,fmt,yaml,client,go,Fatal,log
From: https://www.cnblogs.com/zly-go/p/16778499.html

相关文章

  • Go 的交叉编译
    使用Golang的交叉编译|Linux中国https://mp.weixin.qq.com/s?src=11&timestamp=1665454252&ver=4097&signature=IkXAz0lpJPRmZKSzVXdOa4cwyiHPhfQvC5CAwJb0q5vnqvTiD......
  • 字节跳动开源内部微服务中间件 CloudWeGo
    字节跳动开源内部微服务中间件CloudWeGohttps://mp.weixin.qq.com/s?src=11&timestamp=1665454323&ver=4097&signature=0Ll11XjU2s06cALs4ev9EPPSAUfAtBMpUgxfuw5P0yqfv8......
  • Golang 泛型使用
    Golang泛型泛型函数定义funcFunc1[Tint|int32|int64|float32|float64](a,bT)T{ returna+b}使用Func1[int32](1,2)但是这样好像看起来很丑,所......
  • yaml 配置笔记
    yaml[ˈjæməl]:YetAnotherMarkupLanguage:另一种标记语言。yaml是专门用来写配置文件的语言,非常简洁和强大,这个更直观,更方便,类似于json格式。参考Yaml文件的......
  • 【Django-rest-framework框架】 第08回 自定义频率类,分页功能,排序功能,过滤功能
    目录1.自定义频率类2.频率功能源码剖析3.分页功能3.1PageNumberPagination3.2LimitOffsetPagination3.3CursorPagination3.4drf中分页的使用4.排序功能5.过滤功能......
  • 一文带您了解 Client-Go 的四种客户端
    Client-Go简介Client-Go是负责与KubernetesAPIServer服务进行交互的客户端库,利用Client-Go与KubernetesAPIServer进行的交互访问,来对Kubernetes中的各类资源对象......
  • MongoDB 数据导入和导出、备份和恢复
    注:mongoexport和mongoimport针对库中的表,用于数据导入和导出,mongodump和mongorestore针对于库,用于备份和恢复。一、mongodb导出1、导出/导入数据时,连接mongodb服务器参数......
  • Django简介和安装
    目录​​Django​​​​MVC模型​​​​Django的MTV模型​​​​Django的安装​​​​虚拟环境​​DjangoDjango是一个开放源代码的Web应用框架,由Python写成,其网站的特点是......
  • go rpc
     server.gopackagemainimport("encoding/json""fmt""net""net/rpc""net/rpc/jsonrpc")typeRpcTeststruct{}typeResultstruct{Codeint......
  • (转)如何在Category类中定义成员变量
    OC是不能直接修改对象的结构体的成员变量属性,一般做法是先取出对象的结构体变量,修改该取出来的结构体变量里面的成员,再把结构体对象赋值给原来的结构体变量,在UI中为了简......