Chart Configuration

Voithos helm chart configuration options

Helm Value Reference

values.yaml

# =========================================================
#
# Helm Chart values for the voithos k8s autoscaling stack
#
# =========================================================

auth:

  # Account email
  virtexAccountEmail: ""

  # Account API key
  virtexApiKey: ""

  # Virtex API URL
  # 
  # Note: Voithos requires access to its API solely for 
  #       authorization and billing purposes. It does 
  #       not share information from your cluster.
  virtexApiUrl: "https://api.virtex.ai"


registry:

  # Virtex container registry
  host: "registry.virtex.ai"

  # Voithos software version
  imageTag: "latest"

  # Image pull policy
  imagePullPolicy: "IfNotPresent"


storage:

  # Storageclass resource name
  storageClass: "standard"

  # Volume access modes
  #
  # Note: It is recommended to change this value to
  #       "ReadWriteMany" if the driver specified in
  #       the storage class (under the `.provisioner`
  #       field) supports it (see Ref).
  # 
  # Ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
  volumeAccessMode: "ReadWriteOnce"

  # Volume size limit
  capacityLimit: "1Ti"


components:

  # Note: Container resources will be adjusted by Voithos 
  #       following installation.

  controller:
    logLevel: "info"
    resources: 
      requests:
        cpu: "200m"
        memory: "2Gi"
      limits:
        cpu: "2000m"
        memory: "8Gi"
    podSpecAffinity: {}

  collector:
    logLevel: "info"
    resources:
      requests:
        cpu: "10m"
        memory: "256Mi"
      limits:
        cpu: "50m"
        memory: "512Mi"
    podSpecAffinity: {}

  autoscaler:
    logLevel: "info"
    resources:
      requests:
        cpu: "500m"
        memory: "1Gi"
      limits:
        cpu: "2000m"
        memory: "4Gi"
    podSpecAffinity: {}

  api:
    logLevel: "info"
    resources:
      requests:
        cpu: "50m"
        memory: "128Mi"
      limits:
        cpu: "100m"
        memory: "256Mi"
    podSpecAffinity: {}

  dashboard:
    logLevel: "info"
    resources:
      requests:
        cpu: "25m"
        memory: "512Mi"
      limits:
        cpu: "100m"
        memory: "1024Mi"
    podSpecAffinity: {}

  kairos:
    replicas: 1
    resources:
      requests:
        cpu: "500m"
        memory: "4Gi"
      limits:
        cpu: "2000m"
        memory: "8Gi"
    podSpecAffinity: {}

  cassandra:

    manager:
      resources:
        requests:
          cpu: "100m"
          memory: "512Mi"
        limits:
          cpu: "500m"
          memory: "1Gi"

    operator:
      resources:
        requests:
          cpu: "100m"
          memory: "512Mi"
        limits:
          cpu: "500m"
          memory: "1Gi"

    cluster:
      size: 1
      softPodAntiAffinity: false  # Set true on single node
      jvmHeapSize: "2Gi"
      resources:
        requests:
          cpu: "1000m"
          memory: "4Gi"
        limits:
          cpu: "2000m"
          memory: "8Gi"
      volumeClaimSpecResources:
        requests:
          storage: "10Gi"

patching:
  
  # Note: This flag allows voithos to patch resources
  #       without the need to create finegrained 
  #       permissions. Alternatively, patching permissions 
  #       can to be granted when each voithosautoscalinggroup 
  #       CR is created. This can be done by creating a 
  #       Role/ClusterRole with `verbs: ["patch"]` and the 
  #       following label:
  #       
  #       `voithosautoscalinggroups.virtex.ai/aggregate-to-controller: "true"`
  #
  #       A full list of permissions can be found here: 
  #         - https://voithos.virtex.ai/docs/architecture/metrics/
  #         - https://voithos.virtex.ai/docs/architecture/rbac/
  #        
  # Note: Setting this to `true` (boolean) will not by 
  #       itself trigger voithos to patch resources. 
  #       Use the `VoithosAutoscalingGroup` custom resource 
  #       to group resources according to a common 
  #       autoscaling configuration, which includes the 
  #       ability to specify which resource fields to 
  #       optimize. Refer to the docs for more information.
  provisionRBAC: true

  # Namespace exclude list. 
  # 
  # This is an extra layer of safety for cluster 
  # administrators to specify namespaces that should NOT be 
  # autoscaled.
  #
  # Note: Recommendations will still be generated for 
  #       resources in these namespaces.
  #
  # Note: This setting will never be overriden by selection 
  #       rules specified in a voithosautoscalinggroup, or
  #       any associated Role or ClusterRole.  
  #
  # Note: Voithos reserves the right to patch the namespace
  #       in which it is deployed. Including that namespace
  #       in this list will have no effect.
  namespaceExcludeList:
  - "kube-system"


# Voithos engine configuration
voithosConfig:

  # Cluster API server FQDN
  kubeApiServerURL: "https://kubernetes.default.svc.cluster.local"

  # Control loop interval.
  #
  # The Voithos controller will generate recommendations 
  # for the entire cluster at this interval.
  #
  # Note: This sets the effective resolution at which kube
  #       state metrics are stored. 
  #
  # Note: For large clusters (~100K+ workloads), 
  #       this value may need to be increased to allow 
  #       voithos to complete each cycle in the allotted 
  #       time. This setting is honored with a best effort.
  controlLoopIntervalSeconds: "300"

  # The resolution at which container metrics get stored
  #
  # Note: The effective lower bound is 10, which is the 
  #       rate at which cadvisor publishes metrics.
  cadvisorScrapeIntervalSeconds: "15"

  # Local host to access cadvisor metrics on node
  cadvisorHost: "https://127.0.0.1:10250"

  # Sets the TTL for container metrics in seconds
  # 
  # Default is 8 weeks
  metricTTL: "4838400"

  # Number of `spec.configuration.patching.schedule` 
  # (default=1d) windows to lookback when querying resource 
  # metrics.
  metricQueryRangeMultiplier: "14"

  # Number of `spec.configuration.patching.schedule` 
  # (default=1d) windows of metrics data that must 
  # accumulate before applying autoscaling patches 
  # (if enabled via an autoscalinggroup). 
  # 
  # Fractional values are supported.
  patchMetricSaturation: "2.0"

  # Number of `spec.configuration.patching.schedule` 
  # (default=1d) windows of metrics data that must 
  # accumulate before voithos will start generating 
  # autoscaling recommendations. 
  #
  # Fractional values are supported.
  recommendationMetricSaturation: "0.1"

  # Extra cadvisor metrics to collect
  cadvisorMetricsExtras: []


# Default autoscaling group
# 
# Note: This is the autoscaling group that every workload 
#       in the cluster is assigned to by default.
#
# Note: To customize Voithos' behavior for specific
#       workloads, create a custom voithosautoscalinggroup
#       with the appropriate selector field and desired
#       configuation field.
#
# Note: Voithos currently supports k8s built-in workload types: 
#         - Deployment
#         - ReplicaSet
#         - DaemonSet
#         - StatefulSet
#         - Job
#         - CronJob
#
# Note: The configuration is not intended to be specific
#       to one workload type, but is a union of any set
#       of configuration options. For example, having
#      `DaemonSet` under the `selector.kinds` field with 
#       HPA settings configured is valid; in this case HPA 
#       patching will only occur for compatible built-in 
#       types with an attached HPA was also specified.
# 
# Note: Voithos will not scale to zero, but is compatible
#       with workloads that are scaled by KEDA. Voithos
#       will infer periods of inactivity based on replica
#       count when building it's recommendations.
defaultAutoscalingGroup:
  selector:
    kinds:
    - "Deployment"
    - "DaemonSet"
    - "ReplicaSet"
    - "StatefulSet"
    - "Job"
    - "CronJob"
  configuration:
    patching:
      schedule: "1d"
      allowReactiveUpdates: true
    resources:
      containers:
      - resources:
          requests:
            cpu:
              min: "5m"
              target:
                percentile: 97
                bufferPercentage: 15
            memory:
              min: "25Ki"
              target:
                percentile: 99
                bufferPercentage: 20
          limits:
            cpu:
              min: "50m"
            memory:
              min: "100Ki"