apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: keda
  namespace: argocd
spec:
  project: default
  destination:
    server: https://kubernetes.default.svc
    namespace: keda
  source:
    repoURL: ghcr.io/purisev
    chart: universal-helm-chart
    targetRevision: 3.3.0
    helm:
      releaseName: keda
      values: |
        integrations:
          monitoring:
            defaults:
              enabled: true
              provider: prometheus
              discovery: crd
              type: service
              exposeService:
                enabled: true
                port: 9090
                targetPort: 9090
        deployments:
          worker:
            enabled: true
            image:
              repository: ghcr.io/example/orders-worker
              tag: v0.9.0
            service:
              enabled: false
            metrics:
              enabled: true
              type: pod
            keda:
              enabled: true
              minReplicas: 1
              maxReplicas: 30
              pollingInterval: 30
              cooldownPeriod: 300
              triggers:
                - type: kafka
                  metadata:
                    bootstrapServers: kafka.kafka:9092
                    consumerGroup: orders-worker
                    topic: orders
                    lagThreshold: "100"
                    offsetResetPolicy: earliest
              advanced:
                restoreToOriginalReplicaCount: true
                horizontalPodAutoscalerConfig:
                  behavior:
                    scaleUp:
                      stabilizationWindowSeconds: 60
                      policies:
                        - type: Pods
                          value: 1
                          periodSeconds: 60
                    scaleDown:
                      stabilizationWindowSeconds: 900
                      policies:
                        - type: Pods
                          value: 1
                          periodSeconds: 300
            verticalPodAutoscaler:
              enabled: true
              updateMode: Initial
              resourcePolicy:
                containerPolicies:
                  - containerName: "*"
                    minAllowed:
                      cpu: 50m
                      memory: 128Mi
                    maxAllowed:
                      cpu: "2"
                      memory: 1Gi
            env:
              LOG_LEVEL:
                value: info
            resources:
              requests:
                cpu: 100m
                memory: 256Mi
              limits:
                memory: 512Mi
        podDisruptionBudget:
          enabled: true
          minAvailable: 1
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
      - ServerSideApply=true
