client-go连接kubernetes集群-create

网友投稿 406 2022-09-11

client-go连接kubernetes集群-create

背景

client-go连接kubernetes集群-connect and list。都是查看获取list列表的。现在想用client-go创建应用该如何操作呢?

client-go连接kubernetes集群-create

创建一个namespace:

clientset.CoreV1().Namespaces().Create

package main import ( "context" "flag" "fmt" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) func main() { var kubeconfig *string 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", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // create the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } namespace := &v1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "zhangpeng", }, } result, err := clientset.CoreV1().Namespaces().Create(context.TODO(), namespace, metav1.CreateOptions{}) if err != nil { fmt.Println(err) } else { fmt.Printf("Create ns %s SuccessFul !", result.ObjectMeta.Name) list, _ := clientset.CoreV1().Namespaces().List(context.Background(), metav1.ListOptions{}) for _, item := range list.Items { fmt.Println(item.Name) } } //fmt.Println(clientset.ServerVersion()) //list, _ := clientset.CoreV1().Namespaces().List(context.Background(), metav1.ListOptions{}) //for _, item := range list.Items { // fmt.Println(item.Name) // //} //fmt.Println("pod list in develop") //list1, _ := clientset.CoreV1().Pods("develop").List(context.Background(), metav1.ListOptions{}) //for _, item := range list1.Items { // fmt.Println(item.Name) // //} clientset.AppsV1() }

创建一个deployment

生成yaml读取文件流的方式:

生成yaml文件

kubectl create deployment nginx --image=nginx -o yaml --dry-run=client >nginx.yaml

nginx.yaml

apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx name: nginx resources: {} status: {}

package main import ( "context" "encoding/json" "flag" "fmt" "io/ioutil" v1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) func main() { var kubeconfig *string 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", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // create the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } b, err := ioutil.ReadFile("src/yamls/nginx.yaml") nginxDep := &v1.Deployment{} nginxJson, _ := yaml.ToJSON(b) if err = json.Unmarshal(nginxJson, nginxDep); err != nil { return } if _, err = clientset.AppsV1().Deployments("zhangpeng").Create(context.Background(), nginxDep, metav1.CreateOptions{}); err != nil { fmt.Println(err) return } }

go文件中直接定义deployment的配置

package main import ( "context" "flag" "fmt" v1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) func main() { var kubeconfig *string 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", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // create the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } namespace := "default" var replicas int32 = 1 deployment := &v1.Deployment{ ObjectMeta: metav1.ObjectMeta{ Name: "nginx", Labels: map[string]string{ "app": "nginx", "env": "dev", }, }, Spec: v1.DeploymentSpec{ Replicas: &replicas, Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{ "app": "nginx", "env": "dev", }, }, Template: corev1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Name: "nginx", Labels: map[string]string{ "app": "nginx", "env": "dev", }, }, Spec: corev1.PodSpec{ Containers: []corev1.Container{ { Name: "nginx", Image: "nginx:1.16.1", Ports: []corev1.ContainerPort{ { Name: "http", Protocol: corev1.ProtocolTCP, ContainerPort: 80, }, }, }, }, }, }, }, } deploymentList, err := clientset.AppsV1().Deployments(namespace).Create(context.TODO(), deployment, metav1.CreateOptions{}) fmt.Println(err, deploymentList) }

总结

create就写这两个有代表性的了namespace and deployment.deployment还是很有代表性的...... yaml的方式还是很方便,还是喜欢文件流的方式。 先简单搞一下crud。增删改查。然后想一下怎么整合一下一步一步来吧

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:DoMarketing-营销智库:换了Slogan的百度App,变了!
下一篇:k8s学习-自定义资源
相关文章

 发表评论

暂时没有评论,来抢沙发吧~