324 lines
6.9 KiB
YAML
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 |