client-go代码备份

package main

import (
	"context"
	"encoding/json"
	"flag"
	"fmt"
	appsv1 "k8s.io/api/apps/v1"
	coreV1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/util/intstr"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/client-go/util/homedir"
	"path/filepath"
)

var clientset *kubernetes.Clientset = GetClientSet()

func GetClientSet() *kubernetes.Clientset {
	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()

	// TODO kubeconfig 需要从远程控制中拉取集群的.kube/config文件
	//config, err := rest.InClusterConfig()
	config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
	if err != nil {
		panic(err.Error())
	}

	// 创建 clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}
	return clientset
}



func main() {
	//clientset := GetClientSet()
	//CreateDeployment()
	//CreateService()
	//k8s.Handler()
}

func QueryNodePods() {
	listOptions := metav1.ListOptions{
		FieldSelector: "status.phase=Running,spec.nodeName=ais-master1",
		//FieldSelector: "status.phase=Running",   spec.nodeName=ais-master1
	}
	podList, err := clientset.CoreV1().Pods("").List(context.TODO(), listOptions)
	if err != nil {
		panic(err)
	}
	/*for _, pod := range podList.Items {
		fmt.Println(pod.Name)
	}*/
	fmt.Println(len(podList.Items))
}

func QueryNodeLabel() {

	//clientset.CoreV1().Nodes().Get(context.TODO(), "", metav1.GetOptions{})
	//value := "16127"
	/*labelSelector := metav1.LabelSelector{MatchLabels: map[string]string{"accelerator-memory":"16127"}}
	listOptions := metav1.ListOptions{
		LabelSelector: labels.Set(labelSelector.MatchLabels).String(),
		Limit:         100,
	}*/
	listOptions := metav1.ListOptions{
		LabelSelector: "accelerator-memory=16127",

	}
	nodeList, err := clientset.CoreV1().Nodes().List(context.TODO() ,listOptions)
	if err != nil {
		panic(err)
	}

	for _, node := range nodeList.Items {
		fmt.Printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t,\n",
			node.Name,
			node.Status.Phase,
			node.Status.Addresses,
			node.Status.NodeInfo.OSImage,
			node.Status.NodeInfo.KubeletVersion,
			node.Status.NodeInfo.OperatingSystem,
			node.Status.NodeInfo.Architecture,
		)
	}


}

func QueryNodeName() {
	//获取node根据name
	nodeName := "ais-master1"
	node, err := clientset.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
	if err != nil {
		panic(err)
	}

	fmt.Printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t,\n",
		node.Name,
		node.Status.Phase,
		node.Status.Addresses,
		node.Status.NodeInfo.OSImage,
		node.Status.NodeInfo.KubeletVersion,
		node.Status.NodeInfo.OperatingSystem,
		node.Status.NodeInfo.Architecture,
	)


}

func QueryNodes() {
	//获取node
	fmt.Println("####### 获取node ######")
	nodeList, err := clientset.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		panic(err)
	}
	for _, node := range nodeList.Items {
		fmt.Printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t,\n",
			node.Name,
			node.Status.Phase,
			node.Status.Addresses,
			node.Status.NodeInfo.OSImage,
			node.Status.NodeInfo.KubeletVersion,
			node.Status.NodeInfo.OperatingSystem,
			node.Status.NodeInfo.Architecture,
		)
	}
}

func int32Ptr(i int32) *int32 { return &i }
func CreateDeployment(){

	namespace := "nzxy"
	deploymentsClient := clientset.AppsV1().Deployments(namespace)

	var r coreV1.ResourceRequirements
	//r  =  new(*apiv1.ResourceRequirements)
	//资源分配会遇到无法设置值的问题,故采用json反解析
	j := `{"limits": {"cpu":"1000m", "memory": "1Gi"}, "requests": {"cpu":"1000m", "memory": "1Gi"}}`
	json.Unmarshal([]byte(j), &r)

	//var configMap *coreV1.ConfigMapVolumeSource
	//configMap.Name = "configcm" //这样有错


	deployment := &appsv1.Deployment{
		ObjectMeta: metav1.ObjectMeta{
			Name: "aialert-deployment",
		},
		Spec: appsv1.DeploymentSpec{
			Replicas: int32Ptr(1),
			Selector: &metav1.LabelSelector{
				MatchLabels: map[string]string{
					"env": "dev",
				},
			},
			Template: coreV1.PodTemplateSpec{
				ObjectMeta: metav1.ObjectMeta{
					Labels: map[string]string{
						"env": "dev",
					},
				},
				Spec: coreV1.PodSpec{
					Containers: []coreV1.Container{
						{
							Name:  "aialert",
							Image: "ai_alert_linux:v2.0",
							Command: []string{"/bin/sh","-c","./aialertzxyv1"},
	                        Resources: r,
							Ports: []coreV1.ContainerPort{
								{
									Name:          "http",
									Protocol:      coreV1.ProtocolTCP,
									ContainerPort: 9090,
									HostPort: 9090,
								},
							},
							VolumeMounts: []coreV1.VolumeMount{
								{
									Name: "configmap-volume",
									MountPath: "/ai_alert/src/config",
								},
							},
						},
					},
					Volumes: []coreV1.Volume{
						{
							Name: "configmap-volume",
							VolumeSource: coreV1.VolumeSource{
								ConfigMap: &coreV1.ConfigMapVolumeSource{
									LocalObjectReference: coreV1.LocalObjectReference{
										Name: "configcm",
									},
								},
							},
						},
					},
				},
			},

		},
	}

	// Create Deployment
	fmt.Println("Creating deployment...")
	result, err := deploymentsClient.Create(context.TODO(), deployment, metav1.CreateOptions{})
	if err != nil {
		panic(err)
	}
	fmt.Printf("Created deployment %q.\n", result.GetObjectMeta().GetName())
}

func CreateService(){

	namespace := "nzxy"
	service := &coreV1.Service{
		ObjectMeta: metav1.ObjectMeta{
			Name: "aialert-service",
			Labels: map[string]string{
				"env": "dev",
			},
		},
		Spec: coreV1.ServiceSpec{
			Selector: map[string]string{
				"env": "dev",
			},
			Type: "NodePort",
			Ports: []coreV1.ServicePort{
				{
					Name: "http",
					Port: 30111,
					TargetPort: intstr.IntOrString{
						IntVal: *int32Ptr(9090),
					},
					NodePort: 9090,
					Protocol: coreV1.ProtocolTCP,
				},
			},
		},
	}
	serviceList, err := clientset.CoreV1().Services(namespace).Create(context.TODO(), service, metav1.CreateOptions{})
	fmt.Println(err, serviceList)
}

module rbacDemo

go 1.16

require (
	k8s.io/api v0.20.5
	k8s.io/apimachinery v0.20.5
	k8s.io/client-go v12.0.0+incompatible

)

replace k8s.io/client-go => k8s.io/client-go v0.20.5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值