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/