From 1263806a39d91de8eeda11c32012b198837c2c4d Mon Sep 17 00:00:00 2001 From: ben-toogood Date: Tue, 11 Aug 2020 08:38:30 +0100 Subject: [PATCH] util/kubernetes: add readiness check to deployments (#1923) --- util/kubernetes/client/client.go | 7 +++++++ util/kubernetes/client/templates.go | 16 +++++++++++++++- util/kubernetes/client/types.go | 26 ++++++++++++++++++++------ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/util/kubernetes/client/client.go b/util/kubernetes/client/client.go index 910ec64d..7b14e08c 100644 --- a/util/kubernetes/client/client.go +++ b/util/kubernetes/client/client.go @@ -321,6 +321,13 @@ func NewDeployment(name, version, typ, namespace string) *Deployment { Name: "service-port", ContainerPort: 8080, }}, + ReadinessProbe: &Probe{ + TCPSocket: TCPSocketAction{ + Port: 8080, + }, + PeriodSeconds: 10, + InitialDelaySeconds: 10, + }, }}, }, }, diff --git a/util/kubernetes/client/templates.go b/util/kubernetes/client/templates.go index 829d6415..61231119 100644 --- a/util/kubernetes/client/templates.go +++ b/util/kubernetes/client/templates.go @@ -92,8 +92,22 @@ spec: name: {{ .Name }} {{- end}} {{- end}} + {{- if .ReadinessProbe }} + {{- with .ReadinessProbe }} + readinessProbe: + {{- with .TCPSocket }} + tcpSocket: + {{- if .Host }} + host: {{ .Host }} + {{- end }} + port: {{ .Port }} + {{- end }} + initialDelaySeconds: {{ .InitialDelaySeconds }} + periodSeconds: {{ .PeriodSeconds }} + {{- end }} + {{- end }} + {{- end }} {{- end }} - {{- end}} ` var serviceTmpl = ` diff --git a/util/kubernetes/client/types.go b/util/kubernetes/client/types.go index cfc40235..41392733 100644 --- a/util/kubernetes/client/types.go +++ b/util/kubernetes/client/types.go @@ -35,12 +35,13 @@ type Condition struct { // Container defined container runtime values type Container struct { - Name string `json:"name"` - Image string `json:"image"` - Env []EnvVar `json:"env,omitempty"` - Command []string `json:"command,omitempty"` - Args []string `json:"args,omitempty"` - Ports []ContainerPort `json:"ports,omitempty"` + Name string `json:"name"` + Image string `json:"image"` + Env []EnvVar `json:"env,omitempty"` + Command []string `json:"command,omitempty"` + Args []string `json:"args,omitempty"` + Ports []ContainerPort `json:"ports,omitempty"` + ReadinessProbe *Probe `json:"readinessProbe,omitempty"` } // DeploymentSpec defines micro deployment spec @@ -220,3 +221,16 @@ type ServiceAccount struct { Metadata *Metadata `json:"metadata,omitempty"` ImagePullSecrets []ImagePullSecret `json:"imagePullSecrets,omitempty"` } + +// Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic. +type Probe struct { + TCPSocket TCPSocketAction `json:"tcpSocket,omitempty"` + PeriodSeconds int `json:"periodSeconds"` + InitialDelaySeconds int `json:"initialDelaySeconds"` +} + +// TCPSocketAction describes an action based on opening a socket +type TCPSocketAction struct { + Host string `json:"host,omitempty"` + Port int `json:"port,omitempty"` +}