Golang / 编程开发

Client-go介绍与实操

温馨提示:本文最后更新于2022-08-04 18:48:51,某些文章具有时效性,若有错误或已失效,请在下方留言或问题自助查询
当前位置: 首页 » 编程开发 » Golang » Client-go介绍与实操
浅时光博客 · 8月15日 · 2022年 · 本文2150个字,预计阅读6分钟 10414次已读

一、clinet-go介绍


clinet-go是ku文章来源(Source):https://www.dqzboy.combernetes官方提供的Go语言的客户端库,Go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作;文章来源(Source):浅时光博客

除了提供丰富的API用于操作kubernetes资源,client-go还为controlleroperator提供了重要支持cline-goinformer机制可以将controller关注的资源变化及时带给此controller,使controller能够及时响应变化。

通过client-go提供的客户端对象与kubernetes的API Server进行交互,而client-go提供以下四种客户端对象:

  1. RESTClinet:这是最基础的客户端对象,仅对HTTPRequest进行封装,实现RESTFull风格的API,这个对象的使用并不方便,因为很多参数都要使用者来设置原文链接:https://www.dqzboy.com,于是clinet-go基于RESTClinet又实现了三种新的客户端对象;
  2. ClientSet:把Resource和Ve原文链接:https://www.dqzboy.comrsion也封装成方法,用起来更简单直接,一个资源是一个客户端,多个资源就对应多个客户端,所以ClinetSet就是多个客户端的集合,不过ClientSet只能访问内置资源,访问不了自定义资源;
  3. DynamicClient:可以访问内置资源和自定义资源,拿出的内容是Object类型;
  4. DiscoveryClient:用于发现kubernetes的API Server支持的GroupVersionResources等信息

二、代码示例


package main

import (
	"context"
	"fmt"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {
	//声明kubeconfig配置文件
	conf, err := clientcmd.BuildConfigFromFlags("", "H:\\project\\dkube\\config")
	if err != nil {
		panic(err)
	}

	//根据rest.confif类型的对象,new一个clientset出来
	clinetset, err := kubernetes.NewForConfig(conf)
	if err != nil {
		panic(err)
	}

	//使用clientset获取pod列表
	podList, err := clinetset.CoreV1().Pods("default").List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		panic(err)
	}

	for _, pod := range podList.Items {
		fmt.Println(pod.Name, pod.Namespace)
	}
}
Client-go介绍与实操-浅时光博客

三、文章来源(Source):https://www.dqzboy.com常用方法


//获取Pod列表
podList, err := k8s.ClientSet.CoreV1().Pods("namespace").List(context.TODO(), metav1.ListOptions{})

//获取Pod详情
pod, err := k8s.ClientSet.CoreV1().Pods("namespace").Get(context.TODO(), podName, metav1.GetOptions{})

//删除Pod
err := k8s.ClientSet.CoreV1().Pods("namespace").Delete(context.TODO(), podName, metav1.DeleteOptions{})

//更新Pod
pod, err := k8s.ClientSet.CoreV1().Pods("namespace").Update(context.TODO(), pod, metav1.UpdateOptions{})

//获取Deployment副本数
scale, err := k8s.ClientSet.AppsV1().Deployments("namespace").GetScale(context.TODO(), deploymentName, metav1.GetOptions{})

//创建Deployment
deployment, err := k8s.ClientSet.AppsV1().Deployments("namespace").Create(context.TODO(), deployment, metav1.CreateOptions{})

//更新Deployment
deployment, err := k8s.ClientSet.AppsV1().Deployments("namespace").Patch(context.TODO(), deploymentName, "application/strategic-merge-patch+json", patchByte, metav1.PatchOptions{})



关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】获取IT技术文档。
关注博主不迷路~


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/11332.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

    本站已稳定运行: | 耗时 0.232 秒 | 查询 75 次 | 内存 11.28 MB