From 462a8da239f7b2b2935902ca415cdd1fe58be1e3 Mon Sep 17 00:00:00 2001 From: Valeriano Manassero <14011549+valeriano-manassero@users.noreply.github.com> Date: Mon, 10 Oct 2022 09:17:05 +0200 Subject: [PATCH] Serving hpa (#113) * Added: basic hpa * Changed: version bump --- charts/clearml-serving/Chart.yaml | 3 +- charts/clearml-serving/README.md | 16 ++++++- charts/clearml-serving/templates/_helpers.tpl | 30 +++++++++++++ .../clearml-serving-inference-hpa.yaml | 42 +++++++++++++++++++ .../templates/clearml-serving-triton-hpa.yaml | 42 +++++++++++++++++++ charts/clearml-serving/values.yaml | 12 ++++++ 6 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 charts/clearml-serving/templates/clearml-serving-inference-hpa.yaml create mode 100644 charts/clearml-serving/templates/clearml-serving-triton-hpa.yaml diff --git a/charts/clearml-serving/Chart.yaml b/charts/clearml-serving/Chart.yaml index 6865dbd..52df7ce 100644 --- a/charts/clearml-serving/Chart.yaml +++ b/charts/clearml-serving/Chart.yaml @@ -2,8 +2,9 @@ apiVersion: v2 name: clearml-serving description: ClearML Serving Helm Chart type: application -version: 0.4.1 +version: 0.5.0 appVersion: "0.9.0" +kubeVersion: ">= 1.19.0-0 < 1.26.0-0" maintainers: - name: valeriano-manassero url: https://github.com/valeriano-manassero diff --git a/charts/clearml-serving/README.md b/charts/clearml-serving/README.md index 7abaa88..abac70c 100644 --- a/charts/clearml-serving/README.md +++ b/charts/clearml-serving/README.md @@ -1,6 +1,6 @@ # clearml-serving -![Version: 0.4.1](https://img.shields.io/badge/Version-0.4.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square) +![Version: 0.5.0](https://img.shields.io/badge/Version-0.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square) ClearML Serving Helm Chart @@ -11,6 +11,10 @@ ClearML Serving Helm Chart | valeriano-manassero | | | | stefano-cherchi | | | +## Requirements + +Kubernetes: `>= 1.19.0-0 < 1.26.0-0` + ## Values | Key | Type | Default | Description | @@ -28,6 +32,11 @@ ClearML Serving Helm Chart | clearml.servingTaskId | string | `"ClearML Serving Task ID"` | | | clearml.webHost | string | `"http://clearml-server-webserver:80"` | | | clearml_serving_inference.affinity | object | `{}` | | +| clearml_serving_inference.autoscaling.enabled | bool | `false` | | +| clearml_serving_inference.autoscaling.maxReplicas | int | `11` | | +| clearml_serving_inference.autoscaling.minReplicas | int | `1` | | +| clearml_serving_inference.autoscaling.targetCPU | int | `50` | | +| clearml_serving_inference.autoscaling.targetMemory | int | `50` | | | clearml_serving_inference.extraPythonPackages | list | `[]` | Extra Python Packages to be installed in running pods | | clearml_serving_inference.image | string | `"allegroai/clearml-serving-inference"` | | | clearml_serving_inference.nodeSelector | object | `{}` | | @@ -40,6 +49,11 @@ ClearML Serving Helm Chart | clearml_serving_statistics.resources | object | `{}` | | | clearml_serving_statistics.tolerations | list | `[]` | | | clearml_serving_triton.affinity | object | `{}` | | +| clearml_serving_triton.autoscaling.enabled | bool | `false` | | +| clearml_serving_triton.autoscaling.maxReplicas | int | `11` | | +| clearml_serving_triton.autoscaling.minReplicas | int | `1` | | +| clearml_serving_triton.autoscaling.targetCPU | int | `50` | | +| clearml_serving_triton.autoscaling.targetMemory | int | `50` | | | clearml_serving_triton.enabled | bool | `true` | | | clearml_serving_triton.extraPythonPackages | list | `[]` | Extra Python Packages to be installed in running pods | | clearml_serving_triton.image | string | `"allegroai/clearml-serving-triton"` | | diff --git a/charts/clearml-serving/templates/_helpers.tpl b/charts/clearml-serving/templates/_helpers.tpl index 468f264..62af4d0 100644 --- a/charts/clearml-serving/templates/_helpers.tpl +++ b/charts/clearml-serving/templates/_helpers.tpl @@ -60,3 +60,33 @@ Create the name of the service account to use {{- default "default" .Values.serviceAccount.name }} {{- end }} {{- end }} + +{{/* +Return the target Kubernetes version +*/}} +{{- define "common.capabilities.kubeVersion" -}} +{{- if .Values.global }} + {{- if .Values.global.kubeVersion }} + {{- .Values.global.kubeVersion -}} + {{- else }} + {{- default .Capabilities.KubeVersion.Version .Values.kubeVersion -}} + {{- end -}} +{{- else }} +{{- default .Capabilities.KubeVersion.Version .Values.kubeVersion -}} +{{- end -}} +{{- end -}} + +{{/* +Return the appropriate apiVersion for Horizontal Pod Autoscaler. +*/}} +{{- define "common.capabilities.hpa.apiVersion" -}} +{{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .context) -}} +{{- if .beta2 -}} +{{- print "autoscaling/v2beta2" -}} +{{- else -}} +{{- print "autoscaling/v2beta1" -}} +{{- end -}} +{{- else -}} +{{- print "autoscaling/v2" -}} +{{- end -}} +{{- end -}} diff --git a/charts/clearml-serving/templates/clearml-serving-inference-hpa.yaml b/charts/clearml-serving/templates/clearml-serving-inference-hpa.yaml new file mode 100644 index 0000000..c4832d4 --- /dev/null +++ b/charts/clearml-serving/templates/clearml-serving-inference-hpa.yaml @@ -0,0 +1,42 @@ +{{- if .Values.clearml_serving_inference.autoscaling.enabled }} +apiVersion: {{ include "common.capabilities.hpa.apiVersion" ( dict "context" $ ) }} +kind: HorizontalPodAutoscaler +metadata: + name: clearml-serving-inference-hpa + namespace: {{ .Release.Namespace | quote }} + annotations: {} + labels: + clearml.serving.service: clearml-serving-inference +spec: + scaleTargetRef: + apiVersion: "apps/v1" + kind: Deployment + name: clearml-serving-inference + minReplicas: {{ .Values.clearml_serving_inference.autoscaling.minReplicas }} + maxReplicas: {{ .Values.clearml_serving_inference.autoscaling.maxReplicas }} + metrics: + {{- if .Values.clearml_serving_inference.autoscaling.targetCPU }} + - type: Resource + resource: + name: cpu + {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} + targetAverageUtilization: {{ .Values.clearml_serving_inference.autoscaling.targetCPU }} + {{- else }} + target: + type: Utilization + averageUtilization: {{ .Values.clearml_serving_inference.autoscaling.targetCPU }} + {{- end }} + {{- end }} + {{- if .Values.clearml_serving_inference.autoscaling.targetMemory }} + - type: Resource + resource: + name: memory + {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} + targetAverageUtilization: {{ .Values.clearml_serving_inference.autoscaling.targetMemory }} + {{- else }} + target: + type: Utilization + averageUtilization: {{ .Values.clearml_serving_inference.autoscaling.targetMemory }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/clearml-serving/templates/clearml-serving-triton-hpa.yaml b/charts/clearml-serving/templates/clearml-serving-triton-hpa.yaml new file mode 100644 index 0000000..773fc0f --- /dev/null +++ b/charts/clearml-serving/templates/clearml-serving-triton-hpa.yaml @@ -0,0 +1,42 @@ +{{- if .Values.clearml_serving_triton.autoscaling.enabled }} +apiVersion: {{ include "common.capabilities.hpa.apiVersion" ( dict "context" $ ) }} +kind: HorizontalPodAutoscaler +metadata: + name: clearml-serving-triton-hpa + namespace: {{ .Release.Namespace | quote }} + annotations: {} + labels: + clearml.serving.service: clearml-serving-triton +spec: + scaleTargetRef: + apiVersion: "apps/v1" + kind: Deployment + name: clearml-serving-triton + minReplicas: {{ .Values.clearml_serving_triton.autoscaling.minReplicas }} + maxReplicas: {{ .Values.clearml_serving_triton.autoscaling.maxReplicas }} + metrics: + {{- if .Values.clearml_serving_triton.autoscaling.targetCPU }} + - type: Resource + resource: + name: cpu + {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} + targetAverageUtilization: {{ .Values.clearml_serving_triton.autoscaling.targetCPU }} + {{- else }} + target: + type: Utilization + averageUtilization: {{ .Values.clearml_serving_triton.autoscaling.targetCPU }} + {{- end }} + {{- end }} + {{- if .Values.clearml_serving_triton.autoscaling.targetMemory }} + - type: Resource + resource: + name: memory + {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} + targetAverageUtilization: {{ .Values.clearml_serving_triton.autoscaling.targetMemory }} + {{- else }} + target: + type: Utilization + averageUtilization: {{ .Values.clearml_serving_triton.autoscaling.targetMemory }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/clearml-serving/values.yaml b/charts/clearml-serving/values.yaml index f82a250..44c5ca8 100644 --- a/charts/clearml-serving/values.yaml +++ b/charts/clearml-serving/values.yaml @@ -65,6 +65,12 @@ clearml_serving_inference: extraPythonPackages: [] # - numpy==1.22.4 # - pandas==1.4.2 + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 11 + targetCPU: 50 + targetMemory: 50 clearml_serving_triton: enabled: true @@ -77,3 +83,9 @@ clearml_serving_triton: extraPythonPackages: [] # - numpy==1.22.4 # - pandas==1.4.2 + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 11 + targetCPU: 50 + targetMemory: 50