# Default values for kubecost parent chart (wraps kubecost cost-analyzer chart). # This is a YAML-formatted file. # Declare variables to be passed into your templates. hooks: # Modifies the prometheus configmap to set the prometheus cluster_id # external label to the cluster's kube-system ns uid. # Creates configmap to pass kube-system ns uid as envvar to kubecost. clusterID: enabled: true kubectlImage: "bitnamilegacy/kubectl:1.30.5" priorityClassName: "" cost-analyzer: enabled: true global: prometheus: # If false, Prometheus will not be installed -- only actively supported on paid Kubecost plans enabled: true thanos: enabled: false grafana: # If false, Grafana will not be installed enabled: true notifications: alertmanager: # If true, allow kubecost to write to alertmanager enabled: true podSecurityPolicy: enabled: false # Define persistence volume for cost-analyzer, more information at https://github.com/kubecost/docs/blob/master/storage.md persistentVolume: # Upgrades from original default 0.2Gi may break if automatic disk resize is not supported # https://github.com/kubecost/cost-analyzer-helm-chart/issues/507 size: 32Gi # Note that setting this to false means configurations will be wiped out on pod restart. enabled: true # storageClass: "-" prometheus: kubeStateMetrics: enabled: false kube-state-metrics: disabled: true nodeExporter: enabled: false serviceAccounts: nodeExporter: create: false extraScrapeConfigs: | - job_name: kubecost honor_labels: true scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: http dns_sd_configs: - names: - {{ .Release.Name }}-cost-analyzer type: 'A' port: 9003 - job_name: kubecost-networking kubernetes_sd_configs: - role: pod relabel_configs: # Scrape only the the targets matching the following metadata - source_labels: [__meta_kubernetes_pod_label_app] action: keep regex: {{ .Release.Name }}-network-costs server: image: tag: v2.55.0 # If clusterIDConfigmap is defined, instead use user-generated configmap with key CLUSTER_ID # to use as unique cluster ID in kubecost cost-analyzer deployment. # This overrides the cluster_id set in prometheus.server.global.external_labels. # NOTE: This does not affect the external_labels set in prometheus config. clusterIDConfigmap: kubecost-cluster-info-configmap extraFlags: - web.enable-admin-api - web.enable-lifecycle - storage.tsdb.wal-compression resources: limits: cpu: 1000m memory: 2500Mi requests: cpu: 300m memory: 1500Mi global: scrape_interval: 1m scrape_timeout: 10s evaluation_interval: 1m external_labels: cluster_id: $CLUSTER_ID persistentVolume: size: 32Gi enabled: true extraArgs: log.level: info log.format: json storage.tsdb.min-block-duration: 2h storage.tsdb.max-block-duration: 2h query.max-concurrency: 1 query.max-samples: 100000000 enableAdminApi: true service: gRPC: enabled: true sidecarContainers: - name: thanos-sidecar image: quay.io/thanos/thanos:v0.36.1 args: - sidecar - --log.level=debug - --tsdb.path=/data/ - --prometheus.url=http://127.0.0.1:9090 - --reloader.config-file=/etc/config/prometheus.yml # Start of time range limit to serve. Thanos sidecar will serve only metrics, which happened # later than this value. Option can be a constant time in RFC3339 format or time duration # relative to current time, such as -1d or 2h45m. Valid duration units are ms, s, m, h, d, w, y. - --min-time=-3h env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name ports: - name: sidecar-http containerPort: 10902 - name: grpc containerPort: 10901 - name: cluster containerPort: 10900 volumeMounts: - name: config-volume mountPath: /etc/config - name: storage-volume mountPath: /data subPath: "" alertmanager: enabled: true image: repository: quay.io/prometheus/alertmanager tag: v0.27.0 resources: limits: cpu: 50m memory: 100Mi requests: cpu: 10m memory: 50Mi persistentVolume: enabled: true pushgateway: enabled: false persistentVolume: enabled: false serverFiles: alerts: groups: - name: Kubecost rules: - alert: kubecostDown expr: up{job="kubecost"} == 0 annotations: message: 'Kubecost metrics endpoint is not being scraped successfully.' for: 10m labels: severity: warning - alert: kubecostMetricsUnavailable expr: sum(sum_over_time(node_cpu_hourly_cost[5m])) == 0 annotations: message: 'Kubecost metrics are not available in Prometheus.' for: 10m labels: severity: warning - alert: kubecostRecordingRulesNotEvaluated expr: avg_over_time(kubecost_cluster_memory_working_set_bytes[5m]) == 0 annotations: message: 'Kubecost recording rules are not being successfully evaluated.' for: 10m labels: severity: warning grafana: sidecar: image: repository: docker.io/kiwigrid/k8s-sidecar tag: 1.28.0 dashboards: enabled: true label: kubecost_grafana_dashboard datasources: enabled: true defaultDatasourceEnabled: false label: kubecost_grafana_datasource # Enable grafana ingress with below annotations to use Konvoy traefik auth # ingress: # enabled: true # annotations: # kubernetes.io/ingress.class: kommander-traefik # ingress.kubernetes.io/auth-response-headers: X-Forwarded-User # traefik.ingress.kubernetes.io/router.tls: "true" # traefik.ingress.kubernetes.io/router.middlewares: "${workspaceNamespace}-stripprefixes@kubernetescrd,${workspaceNamespace}-forwardauth@kubernetescrd" # hosts: [""] # path: "/dkp/kubecost/grafana" # Configure grafana.ini server.root_url properly if ingress is enabled # grafana.ini: # server: # protocol: http # enable_gzip: true # root_url: "%(protocol)s://%(domain)s:%(http_port)s/dkp/kubecost/grafana" # auth.proxy: # enabled: true # header_name: X-Forwarded-User # auto-sign-up: true # auth.basic: # enabled: false # users: # auto_assign_org_role: Admin thanos: store: enabled: false query: enabled: false sidecar: enabled: false bucket: enabled: false compact: enabled: false