Skip to content

Commit

Permalink
Support maxSurge, livenessProbe, readinessProbe. (#983)
Browse files Browse the repository at this point in the history
Signed-off-by: Syulin7 <[email protected]>
  • Loading branch information
Syulin7 committed Aug 29, 2023
1 parent 14fa45c commit 650d2ef
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 10 deletions.
42 changes: 37 additions & 5 deletions charts/custom-serving/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ metadata:
spec:
replicas: {{ .Values.replicas }}
strategy:
rollingUpdate:
{{- if .Values.maxSurge }}
maxSurge: {{ .Values.maxSurge }}
{{- end }}
{{- if .Values.maxUnavailable }}
maxUnavailable: {{ .Values.maxUnavailable }}
{{- end }}
type: RollingUpdate
selector:
matchLabels:
Expand Down Expand Up @@ -135,11 +142,36 @@ spec:
name: metrics
protocol: TCP
{{- end }}
#readinessProbe:
# tcpSocket:
# port: grpc
# initialDelaySeconds: 15
# timeoutSeconds: 1
{{- if .Values.livenessProbeAction }}
livenessProbe:
{{ .Values.livenessProbeAction }}:
{{- range $key := .Values.livenessProbeActionOption }}
{{ $key }}
{{- end }}
{{- range $key := .Values.livenessProbeOption }}
{{ $key }}
{{- end }}
{{- end }}
{{- if .Values.readinessProbeAction }}
readinessProbe:
{{ .Values.readinessProbeAction }}:
{{- range $key := .Values.readinessProbeActionOption }}
{{ $key }}
{{- end }}
{{- range $key := .Values.readinessProbeOption }}
{{ $key }}
{{- end }}
{{- end }}
{{- if .Values.startupProbeAction }}
startupProbe:
{{ .Values.startupProbeAction }}:
{{- range $key := .Values.startupProbeActionOption }}
{{ $key }}
{{- end }}
{{- range $key := .Values.startupProbeOption }}
{{ $key }}
{{- end }}
{{- end }}
resources:
limits:
{{- if .Values.cpu }}
Expand Down
3 changes: 2 additions & 1 deletion docs/releases/v0.9.11.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
### Changed

- Update dependent component version.
- Support KServe inference service.
- Support KServe inference service.
- Support maxSurge, livenessProbe, readinessProbe.
19 changes: 15 additions & 4 deletions pkg/apis/types/serving.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,21 @@ type CommonServingArgs struct {
}

type CustomServingArgs struct {
Port int `yaml:"port"` // --port
RestfulPort int `yaml:"restApiPort"` // --restfulPort
MetricsPort int `yaml:"metricsPort"` // --metrics-port
CommonServingArgs `yaml:",inline"`
Port int `yaml:"port"` // --port
RestfulPort int `yaml:"restApiPort"` // --restfulPort
MetricsPort int `yaml:"metricsPort"` // --metrics-port
MaxSurge string `yaml:"maxSurge"` // --maxSurge
MaxUnavailable string `yaml:"maxUnavailable"` // --maxUnavailable
LivenessProbeAction string `yaml:"livenessProbeAction"` // --liveness-probe-action
LivenessProbeActionOption []string `yaml:"livenessProbeActionOption"` // --liveness-probe-action-option
LivenessProbeOption []string `yaml:"livenessProbeOption"` // --liveness-probe-option
ReadinessProbeAction string `yaml:"readinessProbeAction"` // --readiness-probe-action
ReadinessProbeActionOption []string `yaml:"readinessProbeActionOption"` // --readiness-probe-action-option
ReadinessProbeOption []string `yaml:"readinessProbeOption"` // --readiness-probe-option
StartupProbeAction string `yaml:"startupProbeAction"` // --startup-probe-action
StartupProbeActionOption []string `yaml:"startupProbeActionOption"` // --startup-probe-action-option
StartupProbeOption []string `yaml:"startupProbeOption"` // --startup-probe-option
CommonServingArgs `yaml:",inline"`
}

type TensorFlowServingArgs struct {
Expand Down
107 changes: 107 additions & 0 deletions pkg/argsbuilder/serving_custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,16 @@ import (
"strings"

"github.com/kubeflow/arena/pkg/apis/types"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)

const (
LivenessProbeActionOption = "livenessProbeActionOption"
ReadinessProbeActionOption = "readinessProbeActionOption"
StartupProbeActionOption = "StartupProbeActionOption"
)

type CustomServingArgsBuilder struct {
args *types.CustomServingArgs
argValues map[string]interface{}
Expand Down Expand Up @@ -65,9 +72,31 @@ func (s *CustomServingArgsBuilder) AddCommandFlags(command *cobra.Command) {
for name := range s.subBuilders {
s.subBuilders[name].AddCommandFlags(command)
}

var (
livenessProbeActionOption []string
readinessProbeActionOption []string
startupProbeActionOption []string
)

command.Flags().IntVar(&s.args.Port, "port", 0, "the port of gRPC listening port, default is 0 represents that don't create service listening on this port")
command.Flags().IntVar(&s.args.RestfulPort, "restful-port", 0, "the port of RESTful listening port, default is 0 represents that don't create service listening on this port")
command.Flags().IntVar(&s.args.MetricsPort, "metrics-port", 0, "the port of metrics, default is 0 represents that don't create service listening on this port")
command.Flags().StringVar(&s.args.MaxSurge, "max-surge", "", "the maximum number of pods that can be created over the desired number of pods")
command.Flags().StringVar(&s.args.MaxUnavailable, "max-unavailable", "", "the maximum number of Pods that can be unavailable during the update process")
command.Flags().StringVar(&s.args.LivenessProbeAction, "liveness-probe-action", "", "the liveness probe action, support httpGet,exec,grpc,tcpSocket")
command.Flags().StringArrayVar(&livenessProbeActionOption, "liveness-probe-action-option", []string{}, `the liveness probe action option, usage: --liveness-probe-action-option="path: /healthz" or --liveness-probe-action-option="command=cat /tmp/healthy"`)
command.Flags().StringArrayVar(&s.args.LivenessProbeOption, "liveness-probe-option", []string{}, `the liveness probe option, usage: --liveness-probe-option="initialDelaySeconds: 3" or --liveness-probe-option="periodSeconds: 3"`)
command.Flags().StringVar(&s.args.ReadinessProbeAction, "readiness-probe-action", "", "the readiness probe action, support httpGet,exec,grpc,tcpSocket")
command.Flags().StringArrayVar(&readinessProbeActionOption, "readiness-probe-action-option", []string{}, `the readiness probe action option, usage: --readiness-probe-action-option="path: /healthz" or --readiness-probe-action-option="command=cat /tmp/healthy"`)
command.Flags().StringArrayVar(&s.args.ReadinessProbeOption, "readiness-probe-option", []string{}, `the readiness probe option, usage: --readiness-probe-option="initialDelaySeconds: 3" or --readiness-probe-option="periodSeconds: 3"`)
command.Flags().StringVar(&s.args.StartupProbeAction, "startup-probe-action", "", "the startup probe action, support httpGet,exec,grpc,tcpSocket")
command.Flags().StringArrayVar(&startupProbeActionOption, "startup-probe-action-option", []string{}, `the startup probe action option, usage: --startup-probe-action-option="path: /healthz" or --startup-probe-action-option="command=cat /tmp/healthy"`)
command.Flags().StringArrayVar(&s.args.StartupProbeOption, "startup-probe-option", []string{}, `the startup probe option, usage: --startup-probe-option="initialDelaySeconds: 3" or --startup-probe-option="periodSeconds: 3"`)

s.AddArgValue(LivenessProbeActionOption, &livenessProbeActionOption).
AddArgValue(ReadinessProbeActionOption, &readinessProbeActionOption).
AddArgValue(StartupProbeActionOption, &startupProbeActionOption)
}

func (s *CustomServingArgsBuilder) PreBuild() error {
Expand All @@ -91,6 +120,15 @@ func (s *CustomServingArgsBuilder) Build() error {
if err := s.check(); err != nil {
return err
}
if err := s.setLivenessProbeActionOption(); err != nil {
return err
}
if err := s.setReadinessProbeActionOption(); err != nil {
return err
}
if err := s.setStartupProbeActionOption(); err != nil {
return err
}
return nil
}

Expand All @@ -110,3 +148,72 @@ func (s *CustomServingArgsBuilder) checkPortsIsOk() error {
}
return fmt.Errorf("all ports are 0,invalid configuration.")
}

func (s *CustomServingArgsBuilder) setLivenessProbeActionOption() error {
value, ok := s.argValues[LivenessProbeActionOption]
if !ok {
return nil
}
livenessProbeActionOptions := value.(*[]string)
log.Debugf("livenessProbeActionOptions: %v", *livenessProbeActionOptions)
for _, option := range *livenessProbeActionOptions {
if strings.HasPrefix(option, "command=") {
s.args.LivenessProbeActionOption = append(s.args.LivenessProbeActionOption, "command:")
commands := strings.Split(option[8:], ` `)
for _, command := range commands {
cmd := fmt.Sprintf("- %s", command)
s.args.LivenessProbeActionOption = append(s.args.LivenessProbeActionOption, cmd)
}
} else {
s.args.LivenessProbeActionOption = append(s.args.LivenessProbeActionOption, option)
}
}

return nil
}

func (s *CustomServingArgsBuilder) setReadinessProbeActionOption() error {
value, ok := s.argValues[ReadinessProbeActionOption]
if !ok {
return nil
}
readinessProbeActionOptions := value.(*[]string)
log.Debugf("readinessProbeActionOptions: %v", *readinessProbeActionOptions)
for _, option := range *readinessProbeActionOptions {
if strings.HasPrefix(option, "command=") {
s.args.ReadinessProbeActionOption = append(s.args.ReadinessProbeActionOption, "command:")
commands := strings.Split(option[8:], ` `)
for _, command := range commands {
cmd := fmt.Sprintf("- %s", command)
s.args.ReadinessProbeActionOption = append(s.args.ReadinessProbeActionOption, cmd)
}
} else {
s.args.ReadinessProbeActionOption = append(s.args.ReadinessProbeActionOption, option)
}
}

return nil
}

func (s *CustomServingArgsBuilder) setStartupProbeActionOption() error {
value, ok := s.argValues[StartupProbeActionOption]
if !ok {
return nil
}
startupProbeActionOptions := value.(*[]string)
log.Debugf("startupProbeActionOptions: %v", *startupProbeActionOptions)
for _, lpo := range *startupProbeActionOptions {
if strings.HasPrefix(lpo, "command=") {
s.args.StartupProbeActionOption = append(s.args.StartupProbeActionOption, "command:")
commands := strings.Split(lpo[8:], ` `)
for _, command := range commands {
cmd := fmt.Sprintf("- %s", command)
s.args.StartupProbeActionOption = append(s.args.StartupProbeActionOption, cmd)
}
} else {
s.args.StartupProbeActionOption = append(s.args.StartupProbeActionOption, lpo)
}
}

return nil
}

0 comments on commit 650d2ef

Please sign in to comment.