Workload Triggers
Kubernetes-based Event-Driven Autoscaler (KEDA) supports Kubernetes Workload triggers, enabling scaling based on the number of Pods in one or more workloads. This is very useful in multi-level service call scenarios. For details, please refer to KEDA Scalers: Kubernetes Workload. Use Cases
Multi-level Service Simultaneous Scaling
The picture shows multi-level microservice call:
The services A, B, and C usually have a fixed proportional quantity.
If the pressure on A suddenly increases, forcing a scale-out, B and C can also scale out almost simultaneously with A by using KEDA's Kubernetes Workload triggers, without waiting for pressure to propagate slowly.
First, configure the scale-out for A, which can be based on CPU and memory pressure. For example:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: a
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: a
pollingInterval: 15
minReplicaCount: 10
maxReplicaCount: 1000
triggers:
- type: memory
metricType: Utilization
metadata:
value: "60"
- type: cpu
metricType: Utilization
metadata:
value: "60"
Then, configure the scale-out for B and C, assuming a fixed ratio of A:B:C = 3:3:2. For example:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: b
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: b
pollingInterval: 15
minReplicaCount: 10
maxReplicaCount: 1000
triggers:
- type: kubernetes-workload
metadata:
podSelector: 'app=a'
value: '1'
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: c
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: c
pollingInterval: 15
minReplicaCount: 3
maxReplicaCount: 340
triggers:
- type: kubernetes-workload
metadata:
podSelector: 'app=a'
value: '3'
With the above configuration, when the pressure on A increases, A, B, and C will scale out almost simultaneously without waiting for the pressure to propagate step by step. This allows for faster adaptation to pressure changes, improving system elasticity and performance.
Was this page helpful?