Metrics
The metric configuration defines which metric type is watched by the Autoscaler.
Setting metrics per revision
For per-revision configuration, this is determined using the autoscaling.knative.dev/metric
annotation. The possible metric types that can be configured per revision depend on the type of Autoscaler implementation you are using:
- The default KPA Autoscaler supports the
concurrency
andrps
metrics. - The HPA Autoscaler supports the
cpu
metric.
For more information about KPA and HPA, see the documentation on Supported Autoscaler types.
- Per-revision annotation key:
autoscaling.knative.dev/metric
- Possible values:
"concurrency"
,"rps"
,"cpu"
,"memory"
or any custom metric name, depending on your Autoscaler type. The"cpu"
,"memory"
, and custom metrics are supported on revisions that use the HPA class. - Default:
"concurrency"
ConcurrencyRequests per secondCPUMemoryCustom metric
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "concurrency"
autoscaling.knative.dev/target-utilization-percentage: "70"
Note
The autoscaling.knative.dev/target-utilization-percentage
annotation for “Concurrency” specifies a percentage value. See Configuring targets for more details.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "rps"
autoscaling.knative.dev/target: "150"
Note
The autoscaling.knative.dev/target
annotation for “Requests per second” specifies an integer value. See Configuring targets for more details.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev"
autoscaling.knative.dev/metric: "cpu"
autoscaling.knative.dev/target: "100"
Note
The autoscaling.knative.dev/target
annotation for “CPU” specifies the integer value in millicore. See Configuring targets for more details.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev"
autoscaling.knative.dev/metric: "memory"
autoscaling.knative.dev/target: "75"
Note
The autoscaling.knative.dev/target
annotation for “Memory” specifies the integer value in Mi. See Configuring targets for more details.
You can create an HPA to scale the revision by a metric that you specify. The HPA will be configured to use the average value of your metric over all the Pods of the revision.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev"
autoscaling.knative.dev/metric: "<metric-name>"
autoscaling.knative.dev/target: "<target>"
Where <metric-name>
is your custom metric.
Next steps
- Configure concurrency targets for applications
- Configure requests per second targets for replicas of an application