From 129b7d119eb5a26b045e36a96272e5ad932a3ba9 Mon Sep 17 00:00:00 2001 From: Brandon Pinske Date: Wed, 18 Nov 2020 13:22:34 -0700 Subject: [PATCH] Support Keda Autoscaling Keda autoscaling is exclusive with regular hpa scaling. If both are set to true, keda takes precedence. --- charts/ingress-nginx/Chart.yaml | 2 +- .../templates/controller-hpa.yaml | 4 +++ .../templates/controller-keda.yaml | 33 +++++++++++++++++ charts/ingress-nginx/values.yaml | 35 +++++++++++++++++++ 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 charts/ingress-nginx/templates/controller-keda.yaml diff --git a/charts/ingress-nginx/Chart.yaml b/charts/ingress-nginx/Chart.yaml index eca4f9546..9c39a6f98 100644 --- a/charts/ingress-nginx/Chart.yaml +++ b/charts/ingress-nginx/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v1 name: ingress-nginx -version: 3.10.1 +version: 3.11.0 appVersion: 0.41.2 home: https://github.com/kubernetes/ingress-nginx description: Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer diff --git a/charts/ingress-nginx/templates/controller-hpa.yaml b/charts/ingress-nginx/templates/controller-hpa.yaml index 4923cf8d2..c2ad10530 100644 --- a/charts/ingress-nginx/templates/controller-hpa.yaml +++ b/charts/ingress-nginx/templates/controller-hpa.yaml @@ -1,4 +1,6 @@ {{- if and .Values.controller.autoscaling.enabled (or (eq .Values.controller.kind "Deployment") (eq .Values.controller.kind "Both")) -}} +{{- if not .Values.controller.keda.enabled }} + apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: @@ -34,3 +36,5 @@ spec: {{- toYaml . | nindent 2 }} {{- end }} {{- end }} +{{- end }} + diff --git a/charts/ingress-nginx/templates/controller-keda.yaml b/charts/ingress-nginx/templates/controller-keda.yaml new file mode 100644 index 000000000..7c391de9d --- /dev/null +++ b/charts/ingress-nginx/templates/controller-keda.yaml @@ -0,0 +1,33 @@ +{{- if .Values.controller.keda.enabled }} +# https://keda.sh/docs/ + +apiVersion: {{ .Values.controller.keda.apiVersion }} +kind: ScaledObject +metadata: + labels: + {{- include "ingress-nginx.labels" . | nindent 4 }} + app.kubernetes.io/component: controller + name: {{ include "ingress-nginx.controller.fullname" . }} + +spec: + scaleTargetRef: + deploymentName: {{ include "ingress-nginx.controller.fullname" . }} + pollingInterval: {{ .Values.controller.keda.pollingInterval }} + cooldownPeriod: {{ .Values.controller.keda.cooldownPeriod }} + minReplicaCount: {{ .Values.controller.keda.minReplicas }} + maxReplicaCount: {{ .Values.controller.keda.maxReplicas }} + triggers: +{{- with .Values.controller.keda.triggers }} +{{ toYaml . | indent 2 }} +{{ end }} + advanced: + restoreToOriginalReplicaCount: {{ .Values.controller.keda.restoreToOriginalReplicaCount }} +{{- if .Values.controller.keda.behavior }} + horizontalPodAutoscalerConfig: + behavior: +{{ with .Values.controller.keda.behavior -}} +{{ toYaml . | indent 8 }} +{{ end }} + +{{- end }} +{{- end }} diff --git a/charts/ingress-nginx/values.yaml b/charts/ingress-nginx/values.yaml index f62f466a1..7e2e54c72 100644 --- a/charts/ingress-nginx/values.yaml +++ b/charts/ingress-nginx/values.yaml @@ -273,6 +273,7 @@ controller: cpu: 100m memory: 90Mi + # Mutually exclusive with keda autoscaling autoscaling: enabled: false minReplicas: 1 @@ -291,6 +292,40 @@ controller: # type: AverageValue # averageValue: 10000m + # Mutually exclusive with hpa autoscaling + keda: + apiVersion: "keda.sh/v1alpha1" + # apiVersion changes with keda 1.x vs 2.x + # 2.x = keda.sh/v1alpha1 + # 1.x = keda.k8s.io/v1alpha1 + enabled: false + minReplicas: 1 + maxReplicas: 11 + pollingInterval: 30 + cooldownPeriod: 300 + restoreToOriginalReplicaCount: false + triggers: [] + # - type: prometheus + # metadata: + # serverAddress: http://:9090 + # metricName: http_requests_total + # threshold: '100' + # query: sum(rate(http_requests_total{deployment="my-deployment"}[2m])) + + behavior: {} + # scaleDown: + # stabilizationWindowSeconds: 300 + # policies: + # - type: Pods + # value: 1 + # periodSeconds: 180 + # scaleUp: + # stabilizationWindowSeconds: 300 + # policies: + # - type: Pods + # value: 2 + # periodSeconds: 60 + ## Enable mimalloc as a drop-in replacement for malloc. ## ref: https://github.com/microsoft/mimalloc ##