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/

浙公网安备 33010602011771号