Kubernetes Client-go使用


1. 獲取 Clientset

// GetClientSet get client set
func GetClientSet() (cclientset *kubernetes.Clientset, err error) {
	if gClientset != nil {
		return gClientset, nil
	}
	var kubeconfig *string
	var clientset *kubernetes.Clientset

	if home := homedir.HomeDir(); home != "" {
		kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
	} else {
		kubeconfig = flag.String("kubeconfig", "~/.kube/config", "absolute path to the kubeconfig file")
	}

	flag.Parse()

	config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
	if err != nil {
		return clientset, err
	}

	clientset, err = kubernetes.NewForConfig(config)
	if err != nil {
		return clientset, err
	}
	gClientset = clientset

	return clientset, nil
}

 2. 獲取 ConfigMap

func getConfigMap() {
	configMaps, err := clientset.CoreV1().ConfigMaps("").List(metav1.ListOptions{})
	if err != nil {
		log.Fatalln("failed to get config map:", err)
	}
	for i, cm := range configMaps.Items {
		fmt.Printf("[%d] %s\n", i, cm.GetName())
		fmt.Printf("[%d] %s\n", i, cm.Data)
	}
}

 3. 獲取Nodes

Nodeの取得

package main

import (
    "fmt"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    "log"
    "os"
    "path/filepath"
)

func main() {
    // kubernetesの設定ファイルのパスを組み立てる
    kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
    
    // BuildConfigFromFlags is a helper function that builds configs from a master url or 
    // a kubeconfig filepath.
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
        log.Fatal(err)
    }

    // NewForConfig creates a new Clientset for the given config.
    // https://godoc.org/k8s.io/client-go/kubernetes#NewForConfig
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        log.Fatal(err)
    }

    // https://godoc.org/k8s.io/client-go/kubernetes/typed/core/v1
    nodes, err := clientset.CoreV1().Nodes().List(metav1.ListOptions{})
    if err != nil {
        log.Fatalln("failed to get nodes:", err)
    }

    for i, node := range nodes.Items {
        fmt.Printf("[%d] %s\n", i, node.GetName())
    }
}

 

 4. 刪減Nodes

func cleanUpNode(name string) (response int) {
	clientset, err := scheduler.GetClientSet()
	if err != nil {
		fmt.Printf("CleanUp fail, error: %s\n", err)
		return 0
	}

	if err := clientset.CoreV1().Nodes().Delete(name, &metav1.DeleteOptions{}); err != nil {
		log.Printf("CleanUp fail, error: %s\n", err)
		return 0
	} else {
		log.Printf("Outage Node Cleaned Up")
		return 1
	}
}

 

5. 生成Secret

Secretの作成

    data := make(map[string][]byte)
    data["user"] = []byte("admin")
    data["password"] = []byte("password")

    // https://godoc.org/k8s.io/api/core/v1
    // https://godoc.org/k8s.io/client-go/kubernetes/typed/core/v1#SecretInterface
    secrets, err := clientset.CoreV1().Secrets("default").Create(&v1.Secret{
            TypeMeta: metav1.TypeMeta{
                    Kind: "Secret",
            },
            ObjectMeta: metav1.ObjectMeta{
                    Name: "generic-secret",
                    Namespace: "default",
            },
            Data: data,
    })
    fmt.Println(secrets)

6. Ingress 獲取

Ingressの詳細を取得

    ingress, err := clientset.ExtensionsV1beta1().Ingresses("jx").Get("docker-registry", metav1.GetOptions{})
    if err != nil {
        log.Fatalln("failed to get ingresses:", err)
    }

    fmt.Println(reflect.TypeOf(ingress)) // *v1beta1.Ingress
    fmt.Println(ingress) 
    fmt.Println(ingress.ObjectMeta.Name) // docker-registry

7. Deployment 獲取

Deploymentの取得

    // https://godoc.org/k8s.io/client-go/kubernetes/typed/apps/v1#AppsV1Interface
    deployments, err := clientset.AppsV1().Deployments("").List(metav1.ListOptions{})
    if err != nil {
        log.Fatalln("failed to get deployments:", err)
    }
    for i, deployment := range deployments.Items {
        fmt.Printf("[%d] %s\n", i, deployment.GetName())
    }

 

來源 : https://pizi.netlify.com/posts/kubernetes-client-go-example/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM