|
|
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
|
|
|
}
|