Git Product home page Git Product logo

prometheus-custom-metrics-adapter's Introduction

Prometheus Adapter

Installs the Prometheus Adapter for the Custom Metrics API. Custom metrics are used in Kubernetes by Horizontal Pod Autoscalers to scale workloads based upon your own metric pulled from an external metrics provider like Prometheus. This chart complements the metrics-server chart that provides resource only metrics.

Prerequisites

Kubernetes 1.11+

Installing the Chart

To install the chart with the release name my-release:

$ helm install --name my-release stable/prometheus-adapter

This command deploys the prometheus adapter with the default configuration. The configuration section lists the parameters that can be configured during installation.

Using the Chart

To use the chart, ensure the prometheus.url and prometheus.port are configured with the correct Prometheus service endpoint. If Prometheus is exposed under HTTPS the host's CA Bundle must be exposed to the container using extraVolumes and extraVolumeMounts.

Additionally, the chart comes with a set of default rules out of the box but they may pull in too many metrics or not map them correctly for your needs. Therefore, it is recommended to populate rules.custom with a list of rules (see the config document for the proper format).

Finally, to configure your Horizontal Pod Autoscaler to use the custom metric, see the custom metrics section of the HPA walkthrough.

The Prometheus Adapter can serve three different metrics APIs:

Custom Metrics

Enabling this option will cause custom metrics to be served at /apis/custom.metrics.k8s.io/v1beta1. Enabled by default when rules.default is true, but can be customized by populating rules.custom:

rules:
  custom:
  - seriesQuery: '{__name__=~"^some_metric_count$"}'
    resources:
      template: <<.Resource>>
    name:
      matches: ""
      as: "my_custom_metric"
    metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)

External Metrics

Enabling this option will cause external metrics to be served at /apis/external.metrics.k8s.io/v1beta1. Can be enabled by populating rules.external:

rules:
  external:
  - seriesQuery: '{__name__=~"^some_metric_count$"}'
    resources:
      template: <<.Resource>>
    name:
      matches: ""
      as: "my_external_metric"
    metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)

Resource Metrics

Enabling this option will cause resource metrics to be served at /apis/metrics.k8s.io/v1beta1. Resource metrics will allow pod CPU and Memory metrics to be used in Horizontal Pod Autoscalers as well as the kubectl top command. Can be enabled by populating rules.resource:

rules:
  resource:
    cpu:
      containerQuery: sum(rate(container_cpu_usage_seconds_total{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)
      nodeQuery: sum(rate(container_cpu_usage_seconds_total{<<.LabelMatchers>>, id='/'}[3m])) by (<<.GroupBy>>)
      resources:
        overrides:
          instance:
            resource: node
          namespace:
            resource: namespace
          pod_name:
            resource: pod
      containerLabel: container_name
    memory:
      containerQuery: sum(container_memory_working_set_bytes{<<.LabelMatchers>>}) by (<<.GroupBy>>)
      nodeQuery: sum(container_memory_working_set_bytes{<<.LabelMatchers>>,id='/'}) by (<<.GroupBy>>)
      resources:
        overrides:
          instance:
            resource: node
          namespace:
            resource: namespace
          pod_name:
            resource: pod
      containerLabel: container_name
    window: 3m

NOTE: Setting a value for rules.resource will also deploy the resource metrics API service, providing the same functionality as metrics-server. As such it is not possible to deploy them both in the same cluster.

Uninstalling the Chart

To uninstall/delete the my-release deployment:

$ helm delete my-release

The command removes all the Kubernetes components associated with the chart and deletes the release.

Configuration

The following table lists the configurable parameters of the Prometheus Adapter chart and their default values.

Parameter Description Default
affinity Node affinity {}
image.repository Image repository directxman12/k8s-prometheus-adapter-amd64
image.tag Image tag v0.5.0
image.pullPolicy Image pull policy IfNotPresent
image.pullSecrets Image pull secrets {}
logLevel Log level 4
metricsRelistInterval Interval at which to re-list the set of all available metrics from Prometheus 1m
nodeSelector Node labels for pod assignment {}
podAnnotations Annotations to add to the pod {}
priorityClassName Pod priority ``
prometheus.url Url of where we can find the Prometheus service http://prometheus.default.svc
prometheus.port Port of where we can find the Prometheus service, zero to omit this option 9090
rbac.create If true, create & use RBAC resources true
resources CPU/Memory resource requests/limits {}
rules.default If true, enable a set of default rules in the configmap true
rules.custom A list of custom configmap rules []
rules.existing The name of an existing configMap with rules. Overrides default, custom and external. ``
rules.external A list of custom rules for external metrics API []
rules.resource resourceRules to set in configmap rules {}
service.annotations Annotations to add to the service {}
service.port Service port to expose 443
service.type Type of service to create ClusterIP
serviceAccount.create If true, create & use Serviceaccount true
serviceAccount.name If not set and create is true, a name is generated using the fullname template ``
tls.enable If true, use the provided certificates. If false, generate self-signed certs false
tls.ca Public CA file that signed the APIService (ignored if tls.enable=false) ``
tls.key Private key of the APIService (ignored if tls.enable=false) ``
tls.certificate Public key of the APIService (ignored if tls.enable=false) ``
extraVolumeMounts Any extra volumes mounts []
extraVolumes Any extra volumes []
tolerations List of node taints to tolerate []

Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,

$ helm install --name my-release \
  --set logLevel=1 \
 stable/prometheus-adapter

Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,

$ helm install --name my-release -f values.yaml stable/prometheus-adapter

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.