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> 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> 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> </p>
<p> 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, &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> </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(&<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> </p>
<p>来源 : https://pizi.netlify.com/posts/kubernetes-client-go-example/</p><br><br>
来源:https://www.cnblogs.com/jokerjason/p/11898428.html
頁:
[1]