Files
wifi-densepose/k8s/hpa.yaml
2025-06-07 11:44:19 +00:00

324 lines
6.9 KiB
YAML

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: wifi-densepose-hpa
namespace: wifi-densepose
labels:
app: wifi-densepose
component: autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: wifi-densepose
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
- type: Pods
pods:
metric:
name: websocket_connections_per_pod
target:
type: AverageValue
averageValue: "50"
- type: Object
object:
metric:
name: nginx_ingress_controller_requests_rate
describedObject:
apiVersion: v1
kind: Service
name: nginx-service
target:
type: Value
value: "1000"
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
- type: Pods
value: 2
periodSeconds: 60
selectPolicy: Min
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Percent
value: 50
periodSeconds: 60
- type: Pods
value: 4
periodSeconds: 60
selectPolicy: Max
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: wifi-densepose
labels:
app: wifi-densepose
component: nginx-autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
- type: Object
object:
metric:
name: nginx_http_requests_per_second
describedObject:
apiVersion: v1
kind: Service
name: nginx-service
target:
type: Value
value: "500"
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 20
periodSeconds: 60
selectPolicy: Min
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 100
periodSeconds: 30
- type: Pods
value: 2
periodSeconds: 30
selectPolicy: Max
---
# Vertical Pod Autoscaler for database optimization
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: postgres-vpa
namespace: wifi-densepose
labels:
app: wifi-densepose
component: postgres-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: postgres
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: postgres
minAllowed:
cpu: 250m
memory: 512Mi
maxAllowed:
cpu: 2
memory: 4Gi
controlledResources: ["cpu", "memory"]
controlledValues: RequestsAndLimits
---
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: redis-vpa
namespace: wifi-densepose
labels:
app: wifi-densepose
component: redis-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: redis
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: redis
minAllowed:
cpu: 100m
memory: 256Mi
maxAllowed:
cpu: 1
memory: 2Gi
controlledResources: ["cpu", "memory"]
controlledValues: RequestsAndLimits
---
# Pod Disruption Budget for high availability
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: wifi-densepose-pdb
namespace: wifi-densepose
labels:
app: wifi-densepose
component: pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: wifi-densepose
component: api
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
namespace: wifi-densepose
labels:
app: wifi-densepose
component: nginx-pdb
spec:
minAvailable: 1
selector:
matchLabels:
app: wifi-densepose
component: nginx
---
# Custom Resource for advanced autoscaling (KEDA)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: wifi-densepose-keda-scaler
namespace: wifi-densepose
labels:
app: wifi-densepose
component: keda-scaler
spec:
scaleTargetRef:
name: wifi-densepose
pollingInterval: 30
cooldownPeriod: 300
idleReplicaCount: 3
minReplicaCount: 3
maxReplicaCount: 50
fallback:
failureThreshold: 3
replicas: 6
advanced:
restoreToOriginalReplicaCount: true
horizontalPodAutoscalerConfig:
name: wifi-densepose-keda-hpa
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Percent
value: 50
periodSeconds: 60
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus-service.monitoring.svc.cluster.local:9090
metricName: wifi_densepose_active_connections
threshold: '80'
query: sum(wifi_densepose_websocket_connections_active)
- type: prometheus
metadata:
serverAddress: http://prometheus-service.monitoring.svc.cluster.local:9090
metricName: wifi_densepose_request_rate
threshold: '1000'
query: sum(rate(http_requests_total{service="wifi-densepose"}[5m]))
- type: prometheus
metadata:
serverAddress: http://prometheus-service.monitoring.svc.cluster.local:9090
metricName: wifi_densepose_queue_length
threshold: '100'
query: sum(wifi_densepose_processing_queue_length)
- type: redis
metadata:
address: redis-service.wifi-densepose.svc.cluster.local:6379
listName: processing_queue
listLength: '50'
passwordFromEnv: REDIS_PASSWORD
---
# Network Policy for autoscaling components
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: autoscaling-network-policy
namespace: wifi-densepose
labels:
app: wifi-densepose
component: autoscaling-network-policy
spec:
podSelector:
matchLabels:
app: wifi-densepose
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: kube-system
- namespaceSelector:
matchLabels:
name: monitoring
ports:
- protocol: TCP
port: 8080
egress:
- to:
- namespaceSelector:
matchLabels:
name: monitoring
ports:
- protocol: TCP
port: 9090
- to:
- podSelector:
matchLabels:
component: redis
ports:
- protocol: TCP
port: 6379