一、clinet-go介绍
clinet-go是kubernetes官方提供的Go语言的客户端库,Go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作;
除了提供丰富的API用于操作kubernetes资源,client-go还为controller和operator提供了重要支持cline-go的informer机制可以将controller关注的资源变化及时带给此controller,使controller能够及时响应变化。
通过client-go提供的客户端对象与kub
- RESTClinet:这是最基础的客户端对象,仅对
HTTPRequest进行封装,实现RESTFull风格的API,这个对象的使用并不方便,因为很多参数都要使用者来设置,于是clinet-go基于RESTClinet又实现了三种新的客户端对象; - ClientSet:
文章来源(Source):浅时光博客 把Resource和Version也封装成方法,用起来更简单直接,一个资源是一个客户端,多个资源就对应多个客户端,所以ClinetSet就是多个客户端的集合,不过ClientSet只能访问内置资源,访问不了自定义资源; - DynamicClient:可以访问内置资源和自定义资源,拿出的内容是
Object类型; - DiscoveryClient:用于发现kubernetes的API Server支持的
Group、Version、Resources等信息
二、代码示例
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{})


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