Golang / 编程开发

Client-go介绍与实操

浅时光博客 · 8月15日 · 2022年 · 3.7w 次已读

一、clinet-go介绍


clinet-go是kubernetes官方提供的Go语言的客户端库,Go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作;

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

通过client-go提供的客户端对象与kub文章来源(Source):浅时光博客ernetes的API Server进行交互,而client-go提供以下四种客户端对象:

  1. RESTClinet:这是最基础的客户端对象,仅对HTTPRequest进行封装,实现RESTFull风格的API,这个对象的使用并不方便,因为很多参数都要使用者来设置,于是clinet-go基于RESTClinet又实现了三种新的客户端对象;
  2. ClientSet文章来源(Source):浅时光博客把Resource和Version也封装成方法,用起来更简单直接,一个资源是一个客户端,多个资源就对应多个客户端,所以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)
	}
}

三、常用方法


//获取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{})

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/11332.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

0 条回应

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