193 lines
7.6 KiB
Smarty
193 lines
7.6 KiB
Smarty
{{/*
|
|
This template serves as a blueprint for horizontal pod autoscaler objects that are created
|
|
using the common library.
|
|
*/}}
|
|
{{- define "tc.v1.common.class.hpa" -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
{{- $objectData := .objectData }}
|
|
---
|
|
apiVersion: autoscaling/v2
|
|
kind: HorizontalPodAutoscaler
|
|
metadata:
|
|
name: {{ $objectData.name }}
|
|
namespace: {{ include "tc.v1.common.lib.metadata.namespace" (dict "rootCtx" $rootCtx "objectData" $objectData "caller" "VPA") }}
|
|
{{- $labels := (mustMerge ($objectData.labels | default dict) (include "tc.v1.common.lib.metadata.allLabels" $rootCtx | fromYaml)) -}}
|
|
{{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $rootCtx "labels" $labels) | trim) }}
|
|
labels:
|
|
{{- . | nindent 4 }}
|
|
{{- end -}}
|
|
{{- $annotations := (mustMerge ($objectData.annotations | default dict) (include "tc.v1.common.lib.metadata.allAnnotations" $rootCtx | fromYaml)) -}}
|
|
{{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $rootCtx "annotations" $annotations) | trim) }}
|
|
annotations:
|
|
{{- . | nindent 4 }}
|
|
{{- end }}
|
|
spec:
|
|
scaleTargetRef:
|
|
apiVersion: apps/v1
|
|
kind: {{ $objectData.workload.type }}
|
|
name: {{ $objectData.name }}
|
|
minReplicas: {{ $objectData.minReplicas }}
|
|
maxReplicas: {{ $objectData.maxReplicas }}
|
|
{{- if $objectData.metrics }}
|
|
metrics:
|
|
{{- include "tc.v1.common.class.hpa.metrics" (dict "objectData" $objectData "rootCtx" $rootCtx) | nindent 4 }}
|
|
{{- end -}}
|
|
{{- if $objectData.behavior }}
|
|
behavior:
|
|
{{- if $objectData.behavior.scaleUp }}
|
|
scaleUp:
|
|
{{- include "tc.v1.common.class.hpa.behavior" (dict "objectData" $objectData "rootCtx" $rootCtx "mode" "up") | nindent 4 }}
|
|
{{- end -}}
|
|
{{- if $objectData.behavior.scaleDown }}
|
|
scaleDown:
|
|
{{- include "tc.v1.common.class.hpa.behavior" (dict "objectData" $objectData "rootCtx" $rootCtx "mode" "down") | nindent 4 }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.behavior" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
{{- $mode := .mode -}}
|
|
|
|
{{- $key := ternary "scaleUp" "scaleDown" (eq $mode "up") -}}
|
|
{{- $behavior := get $objectData.behavior $key -}}
|
|
|
|
{{- $defaultStabilizationWindowSeconds := ternary 0 300 (eq $mode "up") }}
|
|
selectPolicy: {{ $behavior.selectPolicy | default "Max" }}
|
|
stabilizationWindowSeconds: {{ $behavior.stabilizationWindowSeconds | default $defaultStabilizationWindowSeconds }}
|
|
{{- if $behavior.policies }}
|
|
policies:
|
|
{{- range $idx, $policy := $behavior.policies }}
|
|
- type: {{ $policy.type }}
|
|
value: {{ $policy.value }}
|
|
periodSeconds: {{ $policy.periodSeconds }}
|
|
{{- end }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.metrics" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
|
|
{{- range $idx, $metric := $objectData.metrics }}
|
|
{{- if eq $metric.type "Resource" }}
|
|
{{- include "tc.v1.common.class.hpa.metrics.resource" (dict "objectData" $objectData "rootCtx" $rootCtx "metric" $metric) | nindent 6 }}
|
|
{{- else if eq $metric.type "ContainerResource" }}
|
|
{{- include "tc.v1.common.class.hpa.metrics.containerResource" (dict "objectData" $objectData "rootCtx" $rootCtx "metric" $metric) | nindent 6 }}
|
|
{{- else if eq $metric.type "Pods" }}
|
|
{{- include "tc.v1.common.class.hpa.metrics.pods" (dict "objectData" $objectData "rootCtx" $rootCtx "metric" $metric) | nindent 6 }}
|
|
{{- else if eq $metric.type "Object" }}
|
|
{{- include "tc.v1.common.class.hpa.metrics.object" (dict "objectData" $objectData "rootCtx" $rootCtx "metric" $metric) | nindent 6 }}
|
|
{{- else if eq $metric.type "External" }}
|
|
{{- include "tc.v1.common.class.hpa.metrics.external" (dict "objectData" $objectData "rootCtx" $rootCtx "metric" $metric) | nindent 6 }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.metrics.resource" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx }}
|
|
- type: Resource
|
|
resource:
|
|
name: {{ .metric.resource.name }}
|
|
target:
|
|
type: {{ .metric.resource.target.type }}
|
|
{{- if eq .metric.resource.target.type "AverageValue" }}
|
|
averageValue: {{ .metric.resource.target.averageValue | quote }}
|
|
{{- else if eq .metric.resource.target.type "Utilization" }}
|
|
averageUtilization: {{ .metric.resource.target.averageUtilization }}
|
|
{{- end -}}
|
|
{{- with .metric.resource.target.value }}
|
|
value: {{ . | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.metrics.containerResource" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx }}
|
|
- type: ContainerResource
|
|
containerResource:
|
|
name: {{ .metric.containerResource.name }}
|
|
container: {{ .metric.containerResource.container}}
|
|
target:
|
|
type: {{ .metric.containerResource.target.type }}
|
|
{{- if eq .metric.containerResource.target.type "AverageValue" }}
|
|
averageValue: {{ .metric.containerResource.target.averageValue | quote }}
|
|
{{- else if eq .metric.containerResource.target.type "Utilization" }}
|
|
averageUtilization: {{ .metric.containerResource.target.averageUtilization }}
|
|
{{- end -}}
|
|
{{- with .metric.containerResource.target.value }}
|
|
value: {{ . | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.metrics.pods" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx }}
|
|
- type: Pods
|
|
pods:
|
|
target:
|
|
type: AverageValue
|
|
averageValue: {{ .metric.pods.target.averageValue | quote }}
|
|
metric:
|
|
name: {{ .metric.pods.metric.name }}
|
|
{{- if .metric.pods.metric.selector }}
|
|
selector:
|
|
matchLabels:
|
|
{{- range $key, $value := .metric.pods.metric.selector.matchLabels }}
|
|
{{ $key }}: {{ $value | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.metrics.object" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx }}
|
|
- type: Object
|
|
object:
|
|
target:
|
|
type: {{ .metric.object.target.type }}
|
|
{{- if eq .metric.object.target.type "Value" }}
|
|
value: {{ .metric.object.target.value | quote }}
|
|
{{- else if eq .metric.object.target.type "AverageValue" }}
|
|
averageValue: {{ .metric.object.target.averageValue | quote }}
|
|
{{- end }}
|
|
describedObject:
|
|
apiVersion: {{ .metric.object.describedObject.apiVersion }}
|
|
kind: {{ .metric.object.describedObject.kind }}
|
|
name: {{ .metric.object.describedObject.name }}
|
|
metric:
|
|
name: {{ .metric.object.metric.name }}
|
|
{{- if .metric.object.metric.selector }}
|
|
selector:
|
|
matchLabels:
|
|
{{- range $key, $value := .metric.object.metric.selector.matchLabels }}
|
|
{{ $key }}: {{ $value | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "tc.v1.common.class.hpa.metrics.external" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx }}
|
|
- type: External
|
|
external:
|
|
metric:
|
|
name: {{ .metric.external.metric.name }}
|
|
{{- if .metric.external.metric.selector }}
|
|
selector:
|
|
matchLabels:
|
|
{{- range $key, $value := .metric.external.metric.selector.matchLabels }}
|
|
{{ $key }}: {{ $value | quote }}
|
|
{{- end -}}
|
|
{{- end }}
|
|
target:
|
|
type: {{ .metric.external.target.type }}
|
|
{{- if eq .metric.external.target.type "Value" }}
|
|
value: {{ .metric.external.target.value | quote }}
|
|
{{- else if eq .metric.external.target.type "AverageValue" }}
|
|
averageValue: {{ .metric.external.target.averageValue | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|