RESTClient
RESTClient原理
client-go作为K8s官方给我们提供的与apiserver进行交互的工具库,他提供了几个client供我们使用
首先在开始之前需要设置我们的环境
K8S版本:v1.23.3
minikube start --registry-mirror=https://registry.docker-cn.com --image-mirror-country cn --kubernetes-version=v1.23.3
client-go版本:v0.23.3
client-go的版本最好与k8s对应,可以使用client-go的v0.23.3或者是kubernetes-1.23.3两个版本都可以
client-go中提供的client类型:
RESTClient:最基础的客户端,提供最基础的封装。Clientset:是一个client的集合,在client中包含了所有K8S内置资源的client,通过clientset便可以很方便的操作如pod,service这些资源。dynamicClient:动态客户端,可以操作任意K8S的资源,包括CRD定义的资源。DiscoveryClient:用于发现K8S提供的资源组,资源版本和资源信息,如:kubectl api-resources就是通过这个client实现的。
RESTClient的使用
RESTClientFor:为创建RESTClient准备config,比如限速器,编解码器等。UnversionedRESTClientFor:与RESTClientFor类似,只是允许config.GroupVersion为空
config,err := clientcmd.BuildConfigFromFlags("",*kubeconfig)  //创建一个config
...
client,err := RESTClientFor(config)   //通过config创建一个restclient
RESTClient示例
package main
import (
    "context"
    "fmt"
    v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
    "k8s.io/client-go/tools/clientcmd"
)
func main() {
    config
    conf, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedFileName) //masterurl为空会从config里面获取
    if err != nil {
        panic(err)
    }
    //client
    conf.GroupVersion = &v1.SchemeGroupVersion
    conf.NegotiatedSerializer = scheme.Codecs
    conf.APIPath="/api"
    restClient, err := rest.RESTClientFor(conf)
    if err != nil {
        panic(err)
    }
    //get data
    pod := v1.Pod{}
    err = restClient.Get().Namespace("default").Resource("pods").Name("busybox-8spwk").Do(context.TODO()).Into(&pod)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf(pod.Name)
    }
}
Clientset的使用
主要用于操作K8S内建资源
...
config,err := clientcmd.BuildConfigFromFlags("",*kubeconfig)  //创建一个config
if err != nil {
  panic(err)
}
clientset,err := kubernetes.NewForConfig(config)
deploymentsClient := clientset.AppsV1().Deployments()
...
Clientset示例
package main
import (
    "context"
    "fmt"
    v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)
您暂时无权查看此隐藏内容!
dynamicClient的使用
可以操作K8S内建资源同时也可以操作自定义资源
...
config,err := clientcmd.BuildConfigFromFlags("",*kubeconfig)  //创建一个config
if err != nil {
  panic(err)
}
client,err := dynamic.NewForConfig(config)
...
DiscoveryClient的使用
这个client主要是用来查apiserver提供的api-sources
...
config,err := clientcmd.BuildConfigFromFlags("",*kubeconfig)  //创建一个config
if err != nil {
  panic(err)
}
client,err := discovery.NewDiscoveryClientForConfig(config)
...
另外还有两个DiscoveryClient,分别支持将数据缓存在磁盘文件或内存中。


Asynq任务框架
MCP智能体开发实战
WEB架构
安全监控体系




