client-go gin的简单整合二(list列表相关进一步操作)

网友投稿 283 2022-09-11

client-go gin的简单整合二(list列表相关进一步操作)

背景

上一步完成了client-go gin的简单整合一(list列表相关操作),实现了简单的namespace deployment service的name的输出!现在我想输出更多的内容,也当时深入一下kubernetes这些基础!

1. client-go gin的简单整合二(list列表相关进一步操作)

1. 从namespace开始

[root@zhangpeng ~]# kubectl get ns -o wide

[root@zhangpeng ~]# kubectl get ns develop -o yaml

package service import ( "context" "github.com/gin-gonic/gin" . "k8s-demo1/src/lib" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "time" ) type Time struct { time.Time `protobuf:"-"` } type Namespace struct { Name string CreateTime Time `json:"CreateTime"` Status string Labels map[string]string } func ListNamespace(g *gin.Context) { ns, err := K8sClient.CoreV1().Namespaces().List(context.Background(), metav1.ListOptions{}) if err != nil { g.Error(err) return } ret := make([]*Namespace, 0) for _, item := range ns.Items { ret = append(ret, &Namespace{ Name: item.Name, CreateTime: Time(item.CreationTimestamp), Status: string(item.Status.Phase), Labels: item.Labels, }) } g.JSON(200, ret) return }

package main import ( "github.com/gin-gonic/gin" "k8s-demo1/src/service" ) func main() { r := gin.Default() r.GET("/", func(context *gin.Context) { context.JSON(200, "hello") }) r.GET("/namespaces", service.ListNamespace) r.GET("/deployments", service.ListDeployment) r.GET("/service", service.ListService) r.Run() }

2.继续deployment的进一步深入

[root@zhangpeng ~]# kubectl get deployment -o wide

[root@zhangpeng ~]# kubectl get deployment nginx -o yaml

apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2022-05-01T13:47:52Z" generation: 1 labels: app: nginx env: dev name: nginx namespace: default resourceVersion: "16449910" uid: ec1423a5-1268-40ea-bbf5-15576a332755 spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: nginx env: dev strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: nginx env: dev name: nginx spec: containers: - image: nginx:1.16.1 imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 name: http protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 1 conditions: - lastTransitionTime: "2022-05-01T13:48:10Z" lastUpdateTime: "2022-05-01T13:48:10Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2022-05-01T13:47:52Z" lastUpdateTime: "2022-05-01T13:48:10Z" message: ReplicaSet "nginx-7b5d9df6b8" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 1 readyReplicas: 1 replicas: 1 updatedReplicas: 1

package service import ( "context" "github.com/gin-gonic/gin" . "k8s-demo1/src/lib" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type Deployment struct { Name string Replicas int32 AvailableReplicas int32 UnavailableReplicas int32 Images string Labels map[string]string } func ListDeployment(g *gin.Context) { ns := g.Query("ns") dps, err := K8sClient.AppsV1().Deployments(ns).List(context.Background(), metav1.ListOptions{}) if err != nil { g.Error(err) } ret := make([]*Deployment, 0) for _, item := range dps.Items { ret = append(ret, &Deployment{ Name: item.Name, Replicas: item.Status.Replicas, AvailableReplicas: item.Status.AvailableReplicas, UnavailableReplicas: item.Status.UnavailableReplicas, Images: item.Spec.Template.Spec.Containers[0].Image, Labels: item.Labels, }) } g.JSON(200, ret) return }

3.同理service

[root@zhangpeng .kube]# kubectl get svc -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 192.168.0.1 443/TCP 55d

基本就输出NAME TYPE CLUSTER-IP EXTERNAL-IP PORTS SELECTOR

package service import ( "context" "github.com/gin-gonic/gin" . "k8s-demo1/src/lib" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type Service struct { Name string Type string ClusterIp string ExternalIp []string Ports []string Select map[string]string } func ListService(g *gin.Context) { ns := g.Query("ns") svc, err := K8sClient.CoreV1().Services(ns).List(context.Background(), metav1.ListOptions{}) if err != nil { g.Error(err) return } ret := make([]*Service, 0) for _, item := range svc.Items { ret = append(ret, &Service{ Name: item.Name, Type: string(item.Spec.Type), ClusterIp: item.Spec.ClusterIP, ExternalIp: item.Spec.ExternalIPs, Select: item.Spec.Selector, }) } g.JSON(200, ret) return }

总结

算是基本上实现了list接口的自定义显示? goland神器是不错,查看源码,可惜还不能深入读懂 service ports ExternalIp,deployment READY CONTAINERS展现,还有image多镜像的处理? AGE的计算

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

上一篇:k8s 通过node节点获取资源信息
下一篇:直播营销明确“8条红线”!
相关文章

 发表评论

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