diff --git a/charts/osm/README.md b/charts/osm/README.md index 98d68e2e09..316a52148a 100644 --- a/charts/osm/README.md +++ b/charts/osm/README.md @@ -96,12 +96,22 @@ The following table lists the configurable parameters of the osm chart and their | OpenServiceMesh.image.registry | string | `"openservicemesh"` | Container image registry | | OpenServiceMesh.image.tag | string | `"v0.8.4"` | Container image tag | | OpenServiceMesh.imagePullSecrets | list | `[]` | `osm-controller` image pull secret | +| OpenServiceMesh.injector.autoScale | object | `{"enable":false,"maxReplicas":5,"minReplicas":1,"targetAverageUtilization":80}` | Auto scale configuration | +| OpenServiceMesh.injector.autoScale.enable | bool | `false` | Enable Autoscale | +| OpenServiceMesh.injector.autoScale.maxReplicas | int | `5` | Maximum replicas for autoscale | +| OpenServiceMesh.injector.autoScale.minReplicas | int | `1` | Minimum replicas for autoscale | +| OpenServiceMesh.injector.autoScale.targetAverageUtilization | int | `80` | Average target CPU utilization (%) | | OpenServiceMesh.injector.enablePodDisruptionBudget | bool | `false` | Enable Pod Disruption Budget | | OpenServiceMesh.injector.podLabels | object | `{}` | Sidecar injector's pod labels | | OpenServiceMesh.injector.replicaCount | int | `1` | Sidecar injector's replica count | | OpenServiceMesh.injector.resource | object | `{"limits":{"cpu":"0.5","memory":"64M"},"requests":{"cpu":"0.3","memory":"64M"}}` | Sidecar injector's container resource parameters | | OpenServiceMesh.maxDataPlaneConnections | int | `0` | Sets the max data plane connections allowed for an instance of osm-controller, set to 0 to not enforce limits | | OpenServiceMesh.meshName | string | `"osm"` | Identifier for the instance of a service mesh within a cluster | +| OpenServiceMesh.osmController.autoScale | object | `{"enable":false,"maxReplicas":5,"minReplicas":1,"targetAverageUtilization":80}` | Auto scale configuration | +| OpenServiceMesh.osmController.autoScale.enable | bool | `false` | Enable Autoscale | +| OpenServiceMesh.osmController.autoScale.maxReplicas | int | `5` | Maximum replicas for autoscale | +| OpenServiceMesh.osmController.autoScale.minReplicas | int | `1` | Minimum replicas for autoscale | +| OpenServiceMesh.osmController.autoScale.targetAverageUtilization | int | `80` | Average target CPU utilization (%) | | OpenServiceMesh.osmController.enablePodDisruptionBudget | bool | `false` | Enable Pod Disruption Budget | | OpenServiceMesh.osmController.podLabels | object | `{}` | OSM controller's pod labels | | OpenServiceMesh.osmController.replicaCount | int | `1` | OSM controller's replica count | diff --git a/charts/osm/templates/osm-controller-hpa.yaml b/charts/osm/templates/osm-controller-hpa.yaml new file mode 100644 index 0000000000..588a33461b --- /dev/null +++ b/charts/osm/templates/osm-controller-hpa.yaml @@ -0,0 +1,21 @@ +{{- if .Values.OpenServiceMesh.osmController.autoScale.enable }} +apiVersion: autoscaling/v2beta2 +kind: HorizontalPodAutoscaler +metadata: + name: osm-controller-hpa + namespace: {{ include "osm.namespace" . }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: osm-controller + minReplicas: {{.Values.OpenServiceMesh.osmController.autoScale.minReplicas}} + maxReplicas: {{.Values.OpenServiceMesh.osmController.autoScale.maxReplicas}} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{.Values.OpenServiceMesh.osmController.autoScale.targetAverageUtilization}} +{{- end }} diff --git a/charts/osm/templates/osm-injector-hpa.yaml b/charts/osm/templates/osm-injector-hpa.yaml new file mode 100644 index 0000000000..d9650abbdd --- /dev/null +++ b/charts/osm/templates/osm-injector-hpa.yaml @@ -0,0 +1,21 @@ +{{- if .Values.OpenServiceMesh.injector.autoScale.enable }} +apiVersion: autoscaling/v2beta2 +kind: HorizontalPodAutoscaler +metadata: + name: osm-injector-hpa + namespace: {{ include "osm.namespace" . }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: osm-injector + minReplicas: {{.Values.OpenServiceMesh.injector.autoScale.minReplicas}} + maxReplicas: {{.Values.OpenServiceMesh.injector.autoScale.maxReplicas}} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{.Values.OpenServiceMesh.injector.autoScale.targetAverageUtilization}} +{{- end }} diff --git a/charts/osm/values.schema.json b/charts/osm/values.schema.json index 4e8869adec..9831d8bd29 100644 --- a/charts/osm/values.schema.json +++ b/charts/osm/values.schema.json @@ -67,6 +67,59 @@ "additionalProperties": false } } + }, + "autoScale": { + "$id": "#/properties/definitions/properties/autoScale", + "type": "object", + "title": "The autoScale schema", + "description": "Autoscale configuration parameters", + "required": [ + "enable" + ], + "properties": { + "enable": { + "$id": "#/properties/definitions/properties/autoScale/properties/enable", + "type": "boolean", + "title": "Autoscale enable", + "description": "Indicates whether autoscale should be enabled or not.", + "examples": [ + false + ] + }, + "minReplicas": { + "$id": "#/properties/definitions/properties/autoScale/properties/minReplicas", + "type": "integer", + "title": "Autoscale minimum replicas", + "description": "Indicates the minimum replicas for autoscale.", + "minimum": 1, + "maximum": 10, + "examples": [ + 1 + ] + }, + "maxReplicas": { + "$id": "#/properties/definitions/properties/autoScale/properties/maxReplicas", + "type": "integer", + "title": "Autoscale maximum replicase", + "description": "Indicates the maximum replicas for autoscale.", + "minimum": 1, + "maximum": 10, + "examples": [ + 5 + ] + }, + "targetAverageUtilization": { + "$id": "#/properties/definitions/properties/autoScale/properties/targetAverageUtilization", + "type": "integer", + "title": "Autoscale targetAverageUtilization", + "description": "Indicates average target CPU utilization (percentage) for autoscale.", + "minimum": 0, + "maximum": 100, + "examples": [ + 80 + ] + } + } } }, "properties": { @@ -138,6 +191,9 @@ "examples": [ false ] + }, + "autoScale": { + "$ref": "#/definitions/autoScale" } }, "additionalProperties": false @@ -596,6 +652,9 @@ "examples": [ false ] + }, + "autoScale": { + "$ref": "#/definitions/autoScale" } }, "additionalProperties": false diff --git a/charts/osm/values.yaml b/charts/osm/values.yaml index 7e3e4fb795..ce98130f56 100644 --- a/charts/osm/values.yaml +++ b/charts/osm/values.yaml @@ -36,6 +36,16 @@ OpenServiceMesh: podLabels: {} # -- Enable Pod Disruption Budget enablePodDisruptionBudget: false + # -- Auto scale configuration + autoScale: + # -- Enable Autoscale + enable: false + # -- Minimum replicas for autoscale + minReplicas: 1 + # -- Maximum replicas for autoscale + maxReplicas: 5 + # -- Average target CPU utilization (%) + targetAverageUtilization: 80 # # -- Prometheus parameters @@ -207,6 +217,16 @@ OpenServiceMesh: podLabels: {} # -- Enable Pod Disruption Budget enablePodDisruptionBudget: false + # -- Auto scale configuration + autoScale: + # -- Enable Autoscale + enable: false + # -- Minimum replicas for autoscale + minReplicas: 1 + # -- Maximum replicas for autoscale + maxReplicas: 5 + # -- Average target CPU utilization (%) + targetAverageUtilization: 80 # -- Run init container in privileged mode enablePrivilegedInitContainer: false