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  }