I'm trying to play with autoscaling scenarios (currently with microk8s single node personal cluster).
Basic CPU scaling works fine.
For the more complex scenarios, I'm trying to follow the guide at https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics but I can't figure out how / where the possible pod metrics / object metrics are defined / documented. For example, .. where is "packets-per-second" documented .
I can kind of navigate via kubectl or manually exercising the REST APIs but there has to be a better way.
Thanks
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: AverageUtilization
averageUtilization: 50
- type: Pods
pods:
metric:
name: packets-per-second ====> where is this name defined/documented ?
targetAverageValue: 1k
- type: Object
object:
metric:
name: requests-per-second ====> where is this name defined/documented ?
describedObject:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
name: main-route
target:
kind: Value
value: 10k
CPU or Memory usage in ResourceMetric is provided by kubelet and collected by metric-server
But for packets-per-second
and requests-per-second
, there are no official provider, so this field can actually be any value, depend on the non-official custom metrics API you deployed.
Some popular custom metrics API are listed at https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md
The GitHub project below provides a lot of information about using custom metrics provided by Prometheus for autoscaling of Pods in Kubernetes.