超人黄爸爸 發表於 2019-11-20 16:07:00

Kubernetes Client-go使用

<p>1. 获取 Clientset</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">// 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
}
</pre>
</div>
<p>&nbsp;2. 获取 ConfigMap</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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)
        }
}
</pre>
</div>
<p>&nbsp;3. 获取Nodes </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Nodeの取得

package main

import (
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    metav1 </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">k8s.io/apimachinery/pkg/apis/meta/v1</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">k8s.io/client-go/kubernetes</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">k8s.io/client-go/tools/clientcmd</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">log</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">os</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">path/filepath</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)

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

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NewForConfig creates a new Clientset for the given config.
    </span><span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://godoc.org/k8s.io/client-go/kubernetes</span><span style="color: rgba(0, 128, 0, 1)">#NewForConfig</span>
    clientset, err :=<span style="color: rgba(0, 0, 0, 1)"> kubernetes.NewForConfig(config)
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> err !=<span style="color: rgba(0, 0, 0, 1)"> nil {
      log.Fatal(err)
    }

    </span><span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://godoc.org/k8s.io/client-go/kubernetes/typed/core/v1</span>
    nodes, err :=<span style="color: rgba(0, 0, 0, 1)"> clientset.CoreV1().Nodes().List(metav1.ListOptions{})
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> err !=<span style="color: rgba(0, 0, 0, 1)"> nil {
      log.Fatalln(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">failed to get nodes:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, err)
    }

    </span><span style="color: rgba(0, 0, 255, 1)">for</span> i, node :=<span style="color: rgba(0, 0, 0, 1)"> range nodes.Items {
      fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">[%d] %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, i, node.GetName())
    }
}</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;4. 删减Nodes</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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, &amp;metav1.DeleteOptions{}); err != nil {
                log.Printf("CleanUp fail, error: %s\n", err)
                return 0
        } else {
                log.Printf("Outage Node Cleaned Up")
                return 1
        }
}
</pre>
</div>
<p>&nbsp;</p>
<p>5. 生成Secret</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Secretの作成

    data :</span>= make(map[<span style="color: rgba(0, 0, 255, 1)">string</span>][]<span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">)
    data[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user</span><span style="color: rgba(128, 0, 0, 1)">"</span>] = []<span style="color: rgba(0, 0, 255, 1)">byte</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    data[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">password</span><span style="color: rgba(128, 0, 0, 1)">"</span>] = []<span style="color: rgba(0, 0, 255, 1)">byte</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">password</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://godoc.org/k8s.io/api/core/v1</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://godoc.org/k8s.io/client-go/kubernetes/typed/core/v1</span><span style="color: rgba(0, 128, 0, 1)">#SecretInterface</span>
    secrets, err := clientset.CoreV1().Secrets(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">default</span><span style="color: rgba(128, 0, 0, 1)">"</span>).Create(&amp;<span style="color: rgba(0, 0, 0, 1)">v1.Secret{
            TypeMeta: metav1.TypeMeta{
                  Kind: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Secret</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            },
            ObjectMeta: metav1.ObjectMeta{
                  Name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">generic-secret</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
                  Namespace: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">default</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
            },
            Data: data,
    })
    fmt.Println(secrets)</span></pre>
</div>
<p>6. Ingress 获取</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Ingressの詳細を取得

    ingress, err :</span>= clientset.ExtensionsV1beta1().Ingresses(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">jx</span><span style="color: rgba(128, 0, 0, 1)">"</span>).Get(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">docker-registry</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, metav1.GetOptions{})
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> err !=<span style="color: rgba(0, 0, 0, 1)"> nil {
      log.Fatalln(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">failed to get ingresses:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, err)
    }

    fmt.Println(reflect.TypeOf(ingress)) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> *v1beta1.Ingress</span>
<span style="color: rgba(0, 0, 0, 1)">    fmt.Println(ingress)
    fmt.Println(ingress.ObjectMeta.Name) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> docker-registry</span></pre>
</div>
<p>7. Deployment 获取</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Deploymentの取得

    </span><span style="color: rgba(0, 128, 0, 1)">//</span> <span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://godoc.org/k8s.io/client-go/kubernetes/typed/apps/v1</span><span style="color: rgba(0, 128, 0, 1)">#AppsV1Interface</span>
    deployments, err := clientset.AppsV1().Deployments(<span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">).List(metav1.ListOptions{})
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> err !=<span style="color: rgba(0, 0, 0, 1)"> nil {
      log.Fatalln(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">failed to get deployments:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, err)
    }
    </span><span style="color: rgba(0, 0, 255, 1)">for</span> i, deployment :=<span style="color: rgba(0, 0, 0, 1)"> range deployments.Items {
      fmt.Printf(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">[%d] %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, i, deployment.GetName())
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>来源 : https://pizi.netlify.com/posts/kubernetes-client-go-example/</p><br><br>
来源:https://www.cnblogs.com/jokerjason/p/11898428.html
頁: [1]
查看完整版本: Kubernetes Client-go使用