client-go实战之四:dynamicClient
package main
import (
"context"
"fmt"
"log"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
)
func main() {
config, err := rest.InClusterConfig()
if err != nil {
log.Fatal(err)
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatal(err)
}
dynamicClient, err := dynamic.NewForConfig(config)
if err != nil {
log.Fatal(err)
}
// 获取pods资源的接口
podsResource := clientset.CoreV1().Pods("")
pods, err := podsResource.List(context.TODO(), metav1.ListOptions{})
if err != nil {
log.Fatal(err)
}
for _, pod := range pods.Items {
fmt.Printf("Pod Name: %s\n", pod.Name)
}
// 使用dynamic client获取资源
gvr := schema.GroupVersionResource{
Group: "",
Version: "v1",
Resource: "pods",
}
podsDynamic, err := dynamicClient.Resource(gvr).Namespace("").List(context.TODO(), metav1.ListOptions{})
if err != nil {
log.Fatal(err)
}
podsItems, err := podsDynamic.Items.MarshalJSON()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Pods Items: %s\n", podsItems)
}
这段代码首先尝试获取Kubernetes集群的配置,然后创建客户端集合。接下来,它使用客户端集合中的核心V1客户端获取Pods的列表。然后,它定义了一个GroupVersionResource对象,以便dynamic client可以获取资源,并打印出获取到的资源信息。这个过程展示了如何使用client-go包中的dynamic client来访问Kubernetes集群中的资源。
评论已关闭