From 6d9a38a74700fb4e61917a81e99ea42417590fb7 Mon Sep 17 00:00:00 2001 From: ben-toogood Date: Thu, 9 Jul 2020 16:29:01 +0100 Subject: [PATCH] kubernetes: fixes for production (#1812) * util/kubernetes/client: add secrets to deployments * util/kubernetes/client: remove ServiceAccountName override * debugging * runtime/kubernetes: fix error * runtime/kubernetes: remove test secret * util/kubernetes/client: update default image * util/kubernetes/client: remove default command for deployments * runtime/kubernetes: pass source as arg * runtime/kubernetes: remove debugging * util/kubernetes/client: revert default image change --- runtime/kubernetes/kubernetes.go | 2 +- runtime/kubernetes/service.go | 3 +++ util/kubernetes/client/client.go | 3 +-- util/kubernetes/client/templates.go | 13 +++++++++++++ util/kubernetes/client/types.go | 17 +++++++++++++++-- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/runtime/kubernetes/kubernetes.go b/runtime/kubernetes/kubernetes.go index c464d381..461b8875 100644 --- a/runtime/kubernetes/kubernetes.go +++ b/runtime/kubernetes/kubernetes.go @@ -341,7 +341,7 @@ func (k *kubernetes) Logs(s *runtime.Service, options ...runtime.LogsOption) (ru go func() { records, err := klo.Read() if err != nil { - log.Errorf("Failed to get logs for service '%v' from k8s: %v", err) + log.Errorf("Failed to get logs for service '%v' from k8s: %v", s.Name, err) return } // @todo: this might actually not run before podLogStream starts diff --git a/runtime/kubernetes/service.go b/runtime/kubernetes/service.go index 4cb71e37..d3fa3189 100644 --- a/runtime/kubernetes/service.go +++ b/runtime/kubernetes/service.go @@ -66,6 +66,9 @@ func newService(s *runtime.Service, c runtime.CreateOptions) *service { kdeploy.Spec.Template.PodSpec.Containers[i].Command = []string{} kdeploy.Spec.Template.PodSpec.Containers[i].Args = []string{} } + } else { + // use the default image (micro/cell:go), passing the source as the first argument + kdeploy.Spec.Template.PodSpec.Containers[0].Args = []string{s.Source} } // define the environment values used by the container diff --git a/util/kubernetes/client/client.go b/util/kubernetes/client/client.go index f1c27087..b04de0ab 100644 --- a/util/kubernetes/client/client.go +++ b/util/kubernetes/client/client.go @@ -312,12 +312,11 @@ func NewDeployment(name, version, typ, namespace string) *Deployment { Template: &Template{ Metadata: Metadata, PodSpec: &PodSpec{ - ServiceAccountName: namespace, Containers: []Container{{ Name: name, Image: DefaultImage, Env: []EnvVar{env}, - Command: []string{"go", "run", "."}, + Command: []string{}, Ports: []ContainerPort{{ Name: "service-port", ContainerPort: 8080, diff --git a/util/kubernetes/client/templates.go b/util/kubernetes/client/templates.go index ce0e3b0e..d2f8a6f1 100644 --- a/util/kubernetes/client/templates.go +++ b/util/kubernetes/client/templates.go @@ -62,6 +62,19 @@ spec: {{- range . }} - name: "{{ .Name }}" value: "{{ .Value }}" + {{- if .ValueFrom }} + {{- with .ValueFrom }} + valueFrom: + {{- if .SecretKeyRef }} + {{- with .SecretKeyRef }} + secretKeyRef: + key: {{ .Key }} + name: {{ .Name }} + optional: {{ .Optional }} + {{- end }} + {{- end }} + {{- end }} + {{- end }} {{- end }} {{- end }} args: diff --git a/util/kubernetes/client/types.go b/util/kubernetes/client/types.go index 1dc13e4e..093fe92b 100644 --- a/util/kubernetes/client/types.go +++ b/util/kubernetes/client/types.go @@ -10,8 +10,21 @@ type ContainerPort struct { // EnvVar is environment variable type EnvVar struct { - Name string `json:"name"` - Value string `json:"value,omitempty"` + Name string `json:"name"` + Value string `json:"value,omitempty"` + ValueFrom *EnvVarSource `json:"valueFrom,omitempty"` +} + +// EnvVarSource represents a source for the value of an EnvVar. +type EnvVarSource struct { + SecretKeyRef *SecretKeySelector `json:"secretKeyRef,omitempty"` +} + +// SecretKeySelector selects a key of a Secret. +type SecretKeySelector struct { + Key string `json:"key"` + Name string `json:"name"` + Optional bool `json:"optional,omitempty"` } type Condition struct {