gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/runtime/kubernetes/client/kubernetes.go (about) 1 // Package client provides an implementation of a restricted subset of kubernetes API client 2 package client 3 4 import ( 5 "strings" 6 7 "gitee.com/liuxuezhan/go-micro-v1.18.0/util/log" 8 ) 9 10 var ( 11 // DefaultImage is default micro image 12 DefaultImage = "micro/go-micro" 13 ) 14 15 // Kubernetes client 16 type Kubernetes interface { 17 // Create creates new API resource 18 Create(*Resource) error 19 // Get queries API resrouces 20 Get(*Resource, map[string]string) error 21 // Update patches existing API object 22 Update(*Resource) error 23 // Delete deletes API resource 24 Delete(*Resource) error 25 // List lists API resources 26 List(*Resource) error 27 } 28 29 // NewService returns default micro kubernetes service definition 30 func NewService(name, version, typ string) *Service { 31 log.Tracef("kubernetes default service: name: %s, version: %s", name, version) 32 33 Labels := map[string]string{ 34 "name": name, 35 "version": version, 36 "micro": typ, 37 } 38 39 svcName := name 40 if len(version) > 0 { 41 // API service object name joins name and version over "-" 42 svcName = strings.Join([]string{name, version}, "-") 43 } 44 45 Metadata := &Metadata{ 46 Name: svcName, 47 Namespace: "default", 48 Version: version, 49 Labels: Labels, 50 } 51 52 Spec := &ServiceSpec{ 53 Type: "ClusterIP", 54 Selector: Labels, 55 Ports: []ServicePort{{ 56 name + "-port", 9090, "", 57 }}, 58 } 59 60 return &Service{ 61 Metadata: Metadata, 62 Spec: Spec, 63 } 64 } 65 66 // NewService returns default micro kubernetes deployment definition 67 func NewDeployment(name, version, typ string) *Deployment { 68 log.Tracef("kubernetes default deployment: name: %s, version: %s", name, version) 69 70 Labels := map[string]string{ 71 "name": name, 72 "version": version, 73 "micro": typ, 74 } 75 76 depName := name 77 if len(version) > 0 { 78 // API deployment object name joins name and version over "-" 79 depName = strings.Join([]string{name, version}, "-") 80 } 81 82 Metadata := &Metadata{ 83 Name: depName, 84 Namespace: "default", 85 Version: version, 86 Labels: Labels, 87 Annotations: map[string]string{}, 88 } 89 90 // enable go modules by default 91 env := EnvVar{ 92 Name: "GO111MODULE", 93 Value: "on", 94 } 95 96 Spec := &DeploymentSpec{ 97 Replicas: 1, 98 Selector: &LabelSelector{ 99 MatchLabels: Labels, 100 }, 101 Template: &Template{ 102 Metadata: Metadata, 103 PodSpec: &PodSpec{ 104 Containers: []Container{{ 105 Name: name, 106 Image: DefaultImage, 107 Env: []EnvVar{env}, 108 Command: []string{"go", "run", "main.go"}, 109 Ports: []ContainerPort{{ 110 Name: name + "-port", 111 ContainerPort: 8080, 112 }}, 113 }}, 114 }, 115 }, 116 } 117 118 return &Deployment{ 119 Metadata: Metadata, 120 Spec: Spec, 121 } 122 }