You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package ClientSet
import (
"ClientGo/utils"
"context"
"fmt"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"log"
"reflect"
)
/**
@author: sre
@date: 2022/8/10 0010
@desc: RESTClient虽然可以操作 Kubernetes 的所有资源对象,但是使用起来确实比较复杂,需要配置的参数过于繁琐,因此,为了更优雅的更方便的与 Kubernetes APIServer 进行交互,则需要进一步的封装。
前面有过介绍ClientSet 是基于 RESTClient 的封装,同时 ClientSet 是使用预生成的 API 对象与 APIServer 进行交互的,这样做更方便进行二次开发。
ClientSet 是一组资源对象客户端的集合,例如负责操作 Pods、Services 等资源的 CoreV1Client负责操作 Deployments、DaemonSets 等资源的 AppsV1Client 等。通过这些资源对象客户端提供的操作方法,即可对 Kubernetes 内置的资源对象进行 Create、Update、Get、List、Delete 等操作。
**/
// GetClientSet ClientSet 是一组资源对象客户端的集合,例如负责操作 Pods、Services 等资源的 CoreV1Client负责操作 Deployments、DaemonSets 等资源的 AppsV1Client 等。
// 通过这些资源对象客户端提供的操作方法,即可对 Kubernetes 内置的资源对象进行 Create、Update、Get、List、Delete 等操作。
func GetClientSet() (*kubernetes.Clientset, error) {
config, err := utils.GetConfig()
if err != nil {
log.Println("GetConfig 失败: ", err.Error())
return nil, err
}
// 实例化 ClientSet
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Println("实例化 ClientSet 失败: ", err.Error())
return nil, err
}
return clientset, nil
}
// ListCms 列出所有的 ConfigMap
func ListCms(namespace string) (*v1.ConfigMapList, error) {
clientSet, err := GetClientSet()
if err != nil {
log.Println("GetClientSet 失败: ", err.Error())
return nil, err
}
configMaps, err := clientSet.CoreV1().ConfigMaps(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
return nil, err
}
return configMaps, err
//for _, cm := range configMaps.Items {
// fmt.Printf("configName: %v, configData: %v \n", cm.Name, cm.Data)
//}
//return nil
}
func ListNodes() (*v1.NodeList, error) {
clientSet, err := GetClientSet()
if err != nil {
log.Println("GetClientSet 失败: ", err.Error())
return nil, err
}
nodeList, err := clientSet.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
if err != nil {
return nil, err
}
return nodeList, err
//for _, node := range nodeList.Items {
// fmt.Printf("nodeName: %v, status: %v", node.GetName(), node.GetCreationTimestamp())
//}
//return nil
}
func ListPods(namespace string) (*v1.PodList, error) {
clientSet, err := GetClientSet()
if err != nil {
log.Println("GetClientSet 失败: ", err.Error())
return nil, err
}
pods, err := clientSet.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
return nil, err
}
return pods, nil
//for _, v := range pods.Items {
// fmt.Printf("namespace: %v podname: %v podstatus: %v \n", v.Namespace, v.Name, v.Status.Phase)
//}
}
func ListDeployment(namespace string) error {
clientSet, err := GetClientSet()
if err != nil {
log.Println("GetClientSet 失败: ", err.Error())
return err
}
deployments, err := clientSet.AppsV1().Deployments(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
return err
}
fmt.Println(reflect.TypeOf(deployments))
for index, deployment := range deployments.Items {
//fmt.Println(reflect.TypeOf(deployment))
fmt.Printf("deployment %v: %v \n", index, deployment)
}
//fmt.Println("deployments: ", deployments)
//for _, v := range deployments.Items {
// fmt.Printf("deploymentname: %v, available: %v, ready: %v", v.GetName(), v.Status.AvailableReplicas, v.Status.ReadyReplicas)
//}
return nil
}