diff --git a/stable/prometheus-operator/CONTRIBUTING.md b/stable/prometheus-operator/CONTRIBUTING.md index 074b3cd904..2fba4f200f 100644 --- a/stable/prometheus-operator/CONTRIBUTING.md +++ b/stable/prometheus-operator/CONTRIBUTING.md @@ -1,8 +1,11 @@ # Contributing Guidelines - ## How to contribute to this chart - 1. Fork this repository, develop and test your Chart. +## How to contribute to this chart +1. Fork this repository, develop and test your Chart. 1. Bump the chart version for every change. 1. Ensure PR title has the prefix `[stable/prometheus-operator]` +1. When making changes to values.yaml, update the files in `ci/` by running `hack/update-ci.sh` +1. When making changes to rules or dashboards, see the README.md section on how to sync data from upstream repositories +1. Check the `hack/minikube` folder has scripts to set up minikube and components of this chart that will allow all components to be scraped. You can use this configuration when validating your changes. 1. Check for changes of RBAC rules. 1. Check for changes in CRD specs. 1. PR must pass the linter (`helm lint`) \ No newline at end of file diff --git a/stable/prometheus-operator/Chart.yaml b/stable/prometheus-operator/Chart.yaml index ffe3136e00..a46902263f 100644 --- a/stable/prometheus-operator/Chart.yaml +++ b/stable/prometheus-operator/Chart.yaml @@ -9,7 +9,7 @@ name: prometheus-operator sources: - https://github.com/coreos/prometheus-operator - https://coreos.com/operators/prometheus -version: 4.3.6 +version: 5.0.0 appVersion: 0.29.0 home: https://github.com/coreos/prometheus-operator keywords: diff --git a/stable/prometheus-operator/README.md b/stable/prometheus-operator/README.md index c1d27b204f..d4dddf75a1 100644 --- a/stable/prometheus-operator/README.md +++ b/stable/prometheus-operator/README.md @@ -139,6 +139,7 @@ The following tables list the configurable parameters of the prometheus-operator | `prometheusOperator.kubeletService.enabled` | If true, the operator will create and maintain a service for scraping kubelets | `true` | | `prometheusOperator.kubeletService.namespace` | Namespace to deploy kubelet service | `kube-system` | | `prometheusOperator.serviceMonitor.selfMonitor` | Enable monitoring of prometheus operator | `true` | +| `prometheus.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `prometheusOperator.service.type` | Prometheus operator service type | `ClusterIP` | | `prometheusOperator.service.clusterIP` | Prometheus operator service clusterIP IP | `""` | | `prometheusOperator.service.nodePort` | Port to expose prometheus operator service on each node | `38080` | @@ -170,6 +171,7 @@ The following tables list the configurable parameters of the prometheus-operator | ----- | ----------- | ------ | | `prometheus.enabled` | Deploy prometheus | `true` | | `prometheus.serviceMonitor.selfMonitor` | Create a `serviceMonitor` to automatically monitor the prometheus instance | `true` | +| `prometheus.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `prometheus.serviceAccount.create` | Create a default serviceaccount for prometheus to use | `true` | | `prometheus.serviceAccount.name` | Name for prometheus serviceaccount | `""` | | `prometheus.rbac.roleNamespaces` | Create role bindings in the specified namespaces, to allow Prometheus monitoring a role binding in the release namespace will always be created. | `["kube-system"]` | @@ -238,6 +240,7 @@ The following tables list the configurable parameters of the prometheus-operator | ----- | ----------- | ------ | | `alertmanager.enabled` | Deploy alertmanager | `true` | | `alertmanager.serviceMonitor.selfMonitor` | Create a `serviceMonitor` to automatically monitor the alartmanager instance | `true` | +| `alertmanager.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `alertmanager.serviceAccount.create` | Create a `serviceAccount` for alertmanager | `true` | | `alertmanager.serviceAccount.name` | Name for Alertmanager service account | `""` | | `alertmanager.podDisruptionBudget.enabled` | If true, create a pod disruption budget for Alertmanager pods. The created resource cannot be modified once created - it must be deleted to perform a change | `true` | @@ -308,46 +311,55 @@ The following tables list the configurable parameters of the prometheus-operator | `kubeApiServer.tlsConfig.serverName` | Name of the server to use when validating TLS certificate | `kubernetes` | | `kubeApiServer.tlsConfig.insecureSkipVerify` | Skip TLS certificate validation when scraping | `false` | | `kubeApiServer.serviceMonitor.jobLabel` | The name of the label on the target service to use as the job name in prometheus | `component` | -| `kubeApiServer.serviceMonitor.selector` | The service selector | `{"matchLabels":{"component":"apiserver","provider":"kubernetes"}}` +| `kubeApiServer.serviceMonitor.selector` | The service selector | `{"matchLabels":{"component":"apiserver","provider":"kubernetes"}}` | +| `kubeApiServer.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kubelet.enabled` | Deploy servicemonitor to scrape the kubelet service. See also `prometheusOperator.kubeletService` | `true` | | `kubelet.namespace` | Namespace where the kubelet is deployed. See also `prometheusOperator.kubeletService.namespace` | `kube-system` | -| `kubelet.serviceMonitor.https` | Enable scraping of the kubelet over HTTPS. For more information, see https://github.com/coreos/prometheus-operator/issues/926 | `false` | +| `kubelet.serviceMonitor.https` | Enable scraping of the kubelet over HTTPS. For more information, see https://github.com/coreos/prometheus-operator/issues/926 | `true` | | `kubelet.serviceMonitor.cAdvisorMetricRelabelings` | The `metric_relabel_configs` for scraping cAdvisor. | `` | +| `kubelet.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kubeControllerManager.enabled` | Deploy a `service` and `serviceMonitor` to scrape the Kubernetes controller-manager | `true` | | `kubeControllerManager.endpoints` | Endpoints where Controller-manager runs. Provide this if running Controller-manager outside the cluster | `[]` | | `kubeControllermanager.service.port` | Controller-manager port for the service runs on | `10252` | | `kubeControllermanager.service.targetPort` | Controller-manager targetPort for the service runs on | `10252` | -| `kubeControllermanager.service.selector` | Controller-manager service selector | `{"k8s-app" : "kube-controller-manager" }` | +| `kubeControllermanager.service.selector` | Controller-manager service selector | `{"component" : "kube-controller-manager" }` | | `kubeControllermanager.serviceMonitor.https` | Controller-manager service scrape over https | `false` | +| `kubeControllermanager.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `coreDns.enabled` | Deploy coreDns scraping components. Use either this or kubeDns | true | | `coreDns.service.port` | CoreDns port | `9153` | | `coreDns.service.targetPort` | CoreDns targetPort | `9153` | -| `coreDns.service.selector` | CoreDns service selector | `{"k8s-app" : "coredns" }` +| `coreDns.service.selector` | CoreDns service selector | `{"k8s-app" : "kube-dns" }` | +| `coreDns.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kubeDns.enabled` | Deploy kubeDns scraping components. Use either this or coreDns| `false` | | `kubeDns.service.selector` | kubeDns service selector | `{"k8s-app" : "kube-dns" }` | +| `kubeDns.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kubeEtcd.enabled` | Deploy components to scrape etcd | `true` | | `kubeEtcd.endpoints` | Endpoints where etcd runs. Provide this if running etcd outside the cluster | `[]` | | `kubeEtcd.service.port` | Etcd port | `4001` | | `kubeEtcd.service.targetPort` | Etcd targetPort | `4001` | -| `kubeEtcd.service.selector` | Selector for etcd if running inside the cluster | `{"k8s-app":"etcd-server"}` | +| `kubeEtcd.service.selector` | Selector for etcd if running inside the cluster | `{"component":"etcd"}` | | `kubeEtcd.serviceMonitor.scheme` | Etcd servicemonitor scheme | `http` | | `kubeEtcd.serviceMonitor.insecureSkipVerify` | Skip validating etcd TLS certificate when scraping | `false` | | `kubeEtcd.serviceMonitor.serverName` | Etcd server name to validate certificate against when scraping | `""` | | `kubeEtcd.serviceMonitor.caFile` | Certificate authority file to use when connecting to etcd. See `prometheus.prometheusSpec.secrets` | `""` | | `kubeEtcd.serviceMonitor.certFile` | Client certificate file to use when connecting to etcd. See `prometheus.prometheusSpec.secrets` | `""` | | `kubeEtcd.serviceMonitor.keyFile` | Client key file to use when connecting to etcd. See `prometheus.prometheusSpec.secrets` | `""` | +| `kubeEtcd.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kubeScheduler.enabled` | Deploy a `service` and `serviceMonitor` to scrape the Kubernetes scheduler | `true` | | `kubeScheduler.endpoints` | Endpoints where scheduler runs. Provide this if running scheduler outside the cluster | `[]` | | `kubeScheduler.service.port` | Scheduler port for the service runs on | `10251` | | `kubeScheduler.service.targetPort` | Scheduler targetPort for the service runs on | `10251` | -| `kubeScheduler.service.selector` | Scheduler service selector | `{"k8s-app" : "kube-scheduler" }` | +| `kubeScheduler.service.selector` | Scheduler service selector | `{"component" : "kube-scheduler" }` | | `kubeScheduler.serviceMonitor.https` | Scheduler service scrape over https | `false` | +| `kubeScheduler.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kubeStateMetrics.enabled` | Deploy the `kube-state-metrics` chart and configure a servicemonitor to scrape | `true` | +| `kubeStateMetrics.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `kube-state-metrics.rbac.create` | Create RBAC components in kube-state-metrics. See `global.rbac.create` | `true` | | `kube-state-metrics.podSecurityPolicy.enabled` | Create pod security policy resource for kube-state-metrics. | `true` | | `nodeExporter.enabled` | Deploy the `prometheus-node-exporter` and scrape it | `true` | | `nodeExporter.jobLabel` | The name of the label on the target service to use as the job name in prometheus. See `prometheus-node-exporter.podLabels.jobLabel=node-exporter` default | `jobLabel` | | `nodeExporter.serviceMonitor.metricRelabelings` | Metric relablings for the `prometheus-node-exporter` ServiceMonitor | `[]` | +| `nodeExporter.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `nil` | | `prometheus-node-exporter.podLabels` | Additional labels for pods in the DaemonSet | `{"jobLabel":"node-exporter"}` | | `prometheus-node-exporter.extraArgs` | Additional arguments for the node exporter container | `["--collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+)($|/)", "--collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$"]` | diff --git a/stable/prometheus-operator/ci/test-values.yaml b/stable/prometheus-operator/ci/test-values.yaml index af9726d8eb..b6f19a3d6d 100644 --- a/stable/prometheus-operator/ci/test-values.yaml +++ b/stable/prometheus-operator/ci/test-values.yaml @@ -176,6 +176,9 @@ alertmanager: ## If true, create a serviceMonitor for alertmanager ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Settings affecting alertmanagerSpec @@ -357,14 +360,8 @@ grafana: # configMap: certs-configmap # readOnly: true - ## If true, create a serviceMonitor for grafana - ## - serviceMonitor: - selfMonitor: true - ## Configure additional grafana datasources ## ref: http://docs.grafana.org/administration/provisioning/#datasources - ## additionalDataSources: [] # - name: prometheus-sample # access: proxy @@ -379,6 +376,13 @@ grafana: # url: https://prometheus.svc:9090 # version: 1 + ## If true, create a serviceMonitor for grafana + ## + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + selfMonitor: true ## Component scraping the kube api server ## @@ -401,6 +405,9 @@ kubeApiServer: # replacement: kubernetes.default.svc:443 serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" jobLabel: component selector: matchLabels: @@ -414,11 +421,18 @@ kubelet: namespace: kube-system serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## Enable scraping the kubelet over https. For requirements to enable this see ## https://github.com/coreos/prometheus-operator/issues/926 ## - https: false - # cAdvisorMetricRelabelings: + https: true + + ## Metric relabellings to apply to samples before ingestion + ## + cAdvisorMetricRelabelings: [] # - sourceLabels: [__name__, image] # separator: ; # regex: container_([a-z_]+); @@ -449,7 +463,18 @@ kubeControllerManager: port: 10252 targetPort: 10252 selector: - k8s-app: kube-controller-manager + component: kube-controller-manager + + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + + ## Enable scraping kube-controller-manager over https. + ## Requires proper certs (not self-signed) and delegated authentication/authorization checks + ## + https: false + ## Component scraping coreDns. Use either this or kubeDns ## coreDns: @@ -458,7 +483,11 @@ coreDns: port: 9153 targetPort: 9153 selector: - k8s-app: coredns + k8s-app: kube-dns + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Component scraping kubeDns. Use either this or coreDns ## @@ -467,6 +496,10 @@ kubeDns: service: selector: k8s-app: kube-dns + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Component scraping etcd ## kubeEtcd: @@ -482,10 +515,10 @@ kubeEtcd: ## Etcd service. If using kubeEtcd.endpoints only the port and targetPort are used ## service: - port: 4001 - targetPort: 4001 + port: 2379 + targetPort: 2379 selector: - k8s-app: etcd-server + component: etcd ## Configure secure access to the etcd cluster by loading a secret into prometheus and ## specifying security configuration below. For example, with a secret named etcd-client-cert @@ -499,6 +532,9 @@ kubeEtcd: ## keyFile: /etc/prometheus/secrets/etcd-client-cert/etcd-client-key ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" scheme: http insecureSkipVerify: false serverName: "" @@ -525,12 +561,25 @@ kubeScheduler: port: 10251 targetPort: 10251 selector: - k8s-app: kube-scheduler + component: kube-scheduler + + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## Enable scraping kube-controller-manager over https. + ## Requires proper certs (not self-signed) and delegated authentication/authorization checks + ## + https: false ## Component scraping kube state metrics ## kubeStateMetrics: enabled: true + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Configuration for kube-state-metrics subchart ## @@ -549,10 +598,14 @@ nodeExporter: ## jobLabel: jobLabel - serviceMonitor: {} + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## metric relabel configs to apply to samples before ingestion. ## - # metricRelabelings: + metricRelabelings: [] # - sourceLabels: [__name__] # separator: ; # regex: ^node_mountstats_nfs_(event|operations|transport)_.+ @@ -653,6 +706,9 @@ prometheusOperator: ## Create a servicemonitor for the operator ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Resource limits & requests @@ -812,6 +868,9 @@ prometheus: # - prometheus.example.com serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Settings affecting prometheusSpec @@ -885,7 +944,6 @@ prometheus: ## QuerySpec defines the query command line flags when starting Prometheus. ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#queryspec ## - query: {} ## Namespaces to be selected for PrometheusRules discovery. diff --git a/stable/prometheus-operator/hack/minikube/README.md b/stable/prometheus-operator/hack/minikube/README.md new file mode 100644 index 0000000000..a5db53be64 --- /dev/null +++ b/stable/prometheus-operator/hack/minikube/README.md @@ -0,0 +1,3 @@ +The configuration in this folder lets you locally test the setup on minikube. Use cmd.sh to set up components and hack a working etcd scrape configuration. Run the commands in the sequence listed in the script to get a local working minikube cluster. + +If you're using windows, there's a commented-out section that you should add to the minikube command. \ No newline at end of file diff --git a/stable/prometheus-operator/hack/minikube/cmd.sh b/stable/prometheus-operator/hack/minikube/cmd.sh new file mode 100755 index 0000000000..e0dfe2cc0d --- /dev/null +++ b/stable/prometheus-operator/hack/minikube/cmd.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +HELM_RELEASE_NAME=prom-op +CHART=./ +NAMESPACE=monitoring +VALUES_FILES=./hack/minikube/values.yaml + +if [ "$1" = "reset-minikube" ]; then + minikube delete + minikube start \ + #--vm-driver hyperv --hyperv-virtual-switch "Default Switch" \ + --kubernetes-version=v1.13.3 \ + --memory=4096 --bootstrapper=kubeadm \ + --extra-config=kubelet.authentication-token-webhook=true \ + --extra-config=kubelet.authorization-mode=Webhook \ + --extra-config=scheduler.address=0.0.0.0 \ + --extra-config=controller-manager.address=0.0.0.0 + exit 0 +fi + +if [ "$1" = "init-helm" ]; then + helm init + helm repo update + exit 0 +fi + +if [ "$1" = "init-etcd-secret" ]; then + kubectl create namespace monitoring + kubectl delete secret etcd-certs -nmonitoring + kubectl create secret generic etcd-certs -nmonitoring \ + --from-literal=ca.crt="$(kubectl exec kube-apiserver-minikube -nkube-system -- cat /var/lib/minikube/certs/etcd/ca.crt)" \ + --from-literal=client.crt="$(kubectl exec kube-apiserver-minikube -nkube-system -- cat /var/lib/minikube/certs/apiserver-etcd-client.crt)" \ + --from-literal=client.key="$(kubectl exec kube-apiserver-minikube -nkube-system -- cat /var/lib/minikube/certs/apiserver-etcd-client.key)" + + exit 0 +fi + + +if [ "$1" = "prometheus-operator" ]; then + helm upgrade $HELM_RELEASE_NAME $CHART \ + --namespace $NAMESPACE \ + --values $VALUES_FILES \ + --set grafana.podAnnotations.redeploy-hack="$(cat /proc/sys/kernel/random/uuid)" \ + --install --debug + exit 0 +fi + +if [ "$1" = "port-forward" ]; then + killall kubectl &>/dev/null + kubectl port-forward service/prom-op-prometheus-operato-prometheus 9090 &>/dev/null & + kubectl port-forward service/prom-op-prometheus-operato-alertmanager 9093 &>/dev/null & + kubectl port-forward service/prom-op-grafana 3000:80 &>/dev/null & + echo "Started port-forward commands" + echo "localhost:9090 - prometheus" + echo "localhost:9093 - alertmanager" + echo "localhost:3000 - grafana" + exit 0 +fi + +cat << EOF +Usage: + install.sh + +Commands: + reset-minikube - resets minikube with values suitable for running prometheus operator + the normal installation will not allow scraping of the kubelet, + scheduler or controller-manager components + init-helm - initialize helm and update repository so that we can install + the prometheus-operator chart. This has to be run only once after + a minikube installation is done + init-etcd-secret - pulls the certs used to access etcd from the api server and creates + a secret in the monitoring namespace with them. The values files + in the install command assume that this secret exists and is valid. + If not, then prometheus will not start + prometheus-operator - install or upgrade the prometheus operator chart in the cluster + port-forward - starts port-forwarding for prometheus, alertmanager, grafana + localhost:9090 - prometheus + localhost:9093 - alertmanager + localhost:3000 - grafana +EOF + +exit 0 +} + diff --git a/stable/prometheus-operator/hack/minikube/values.yaml b/stable/prometheus-operator/hack/minikube/values.yaml new file mode 100644 index 0000000000..8bdce3131f --- /dev/null +++ b/stable/prometheus-operator/hack/minikube/values.yaml @@ -0,0 +1,9 @@ +prometheus: + prometheusSpec: + secrets: [etcd-certs] +kubeEtcd: + serviceMonitor: + scheme: https + caFile: /etc/prometheus/secrets/etcd-certs/ca.crt + certFile: /etc/prometheus/secrets/etcd-certs/client.crt + keyFile: /etc/prometheus/secrets/etcd-certs/client.key \ No newline at end of file diff --git a/stable/prometheus-operator/hack/update-ci.sh b/stable/prometheus-operator/hack/update-ci.sh new file mode 100755 index 0000000000..e879bd60b4 --- /dev/null +++ b/stable/prometheus-operator/hack/update-ci.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +cat values.yaml | sed 's/cleanupCustomResource: false/cleanupCustomResource: true/' > ci/test-values.yaml \ No newline at end of file diff --git a/stable/prometheus-operator/templates/alertmanager/servicemonitor.yaml b/stable/prometheus-operator/templates/alertmanager/servicemonitor.yaml index 5c8cab9038..13e537da12 100644 --- a/stable/prometheus-operator/templates/alertmanager/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/alertmanager/servicemonitor.yaml @@ -16,6 +16,8 @@ spec: - {{ .Release.Namespace | quote }} endpoints: - port: web - interval: 30s + {{- if .Values.alertmanager.serviceMonitor.interval }} + interval: {{ .Values.alertmanager.serviceMonitor.interval }} + {{- end }} path: "{{ trimSuffix "/" .Values.alertmanager.alertmanagerSpec.routePrefix }}/metrics" {{- end }} diff --git a/stable/prometheus-operator/templates/exporters/core-dns/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/core-dns/servicemonitor.yaml index 2c29b95060..803882b1fd 100644 --- a/stable/prometheus-operator/templates/exporters/core-dns/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/core-dns/servicemonitor.yaml @@ -17,6 +17,8 @@ spec: - "kube-system" endpoints: - port: http-metrics - interval: 15s + {{- if .Values.coreDns.serviceMonitor.interval}} + interval: {{ .Values.coreDns.serviceMonitor.interval }} + {{- end }} bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token {{- end }} diff --git a/stable/prometheus-operator/templates/exporters/kube-api-server/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/kube-api-server/servicemonitor.yaml index 60d600cda8..2a64c3bc26 100644 --- a/stable/prometheus-operator/templates/exporters/kube-api-server/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kube-api-server/servicemonitor.yaml @@ -9,7 +9,9 @@ metadata: spec: endpoints: - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token - interval: 30s + {{- if .Values.kubeApiServer.serviceMonitor.interval }} + interval: {{ .Values.kubeApiServer.serviceMonitor.interval }} + {{- end }} port: https scheme: https {{- if .Values.kubeApiServer.relabelings }} diff --git a/stable/prometheus-operator/templates/exporters/kube-controller-manager/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/kube-controller-manager/servicemonitor.yaml index d78f05e704..dcf2b1d99e 100644 --- a/stable/prometheus-operator/templates/exporters/kube-controller-manager/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kube-controller-manager/servicemonitor.yaml @@ -17,7 +17,9 @@ spec: - "kube-system" endpoints: - port: http-metrics - interval: 15s + {{- if .Values.kubeControllerManager.serviceMonitor.interval }} + interval: {{ .Values.kubeControllerManager.serviceMonitor.interval }} + {{- end }} bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token {{- if .Values.kubeControllerManager.serviceMonitor.https }} scheme: https diff --git a/stable/prometheus-operator/templates/exporters/kube-dns/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/kube-dns/servicemonitor.yaml index 0ba0984ade..be12b54e02 100644 --- a/stable/prometheus-operator/templates/exporters/kube-dns/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kube-dns/servicemonitor.yaml @@ -17,9 +17,13 @@ spec: - "kube-system" endpoints: - port: http-metrics-dnsmasq - interval: 15s + {{- if .Values.kubeDns.serviceMonitor.interval }} + interval: {{ .Values.kubeDns.serviceMonitor.interval }} + {{- end }} bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token - port: http-metrics-skydns - interval: 15s + {{- if .Values.kubeDns.serviceMonitor.interval }} + interval: {{ .Values.kubeDns.serviceMonitor.interval }} + {{- end }} bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token {{- end }} diff --git a/stable/prometheus-operator/templates/exporters/kube-etcd/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/kube-etcd/servicemonitor.yaml index 6d4a4447a6..f62d48d42b 100644 --- a/stable/prometheus-operator/templates/exporters/kube-etcd/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kube-etcd/servicemonitor.yaml @@ -17,7 +17,9 @@ spec: - "kube-system" endpoints: - port: http-metrics - interval: 15s + {{- if .Values.kubeEtcd.serviceMonitor.interval }} + interval: {{ .Values.kubeEtcd.serviceMonitor.interval }} + {{- end }} bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token {{- if eq .Values.kubeEtcd.serviceMonitor.scheme "https" }} scheme: https diff --git a/stable/prometheus-operator/templates/exporters/kube-scheduler/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/kube-scheduler/servicemonitor.yaml index 371e06bfec..b5a9b14846 100644 --- a/stable/prometheus-operator/templates/exporters/kube-scheduler/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kube-scheduler/servicemonitor.yaml @@ -17,7 +17,9 @@ spec: - "kube-system" endpoints: - port: http-metrics - interval: 15s + {{- if .Values.kubeScheduler.serviceMonitor.interval }} + interval: {{ .Values.kubeScheduler.serviceMonitor.interval }} + {{- end }} bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token {{- if .Values.kubeScheduler.serviceMonitor.https }} scheme: https diff --git a/stable/prometheus-operator/templates/exporters/kube-state-metrics/serviceMonitor.yaml b/stable/prometheus-operator/templates/exporters/kube-state-metrics/serviceMonitor.yaml index cfbe2d7087..c1a15e6f2a 100644 --- a/stable/prometheus-operator/templates/exporters/kube-state-metrics/serviceMonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kube-state-metrics/serviceMonitor.yaml @@ -9,8 +9,10 @@ metadata: spec: jobLabel: app endpoints: - - interval: 30s - port: http + - port: http + {{- if .Values.kubeStateMetrics.serviceMonitor.interval }} + interval: {{ .Values.kubeStateMetrics.serviceMonitor.interval }} + {{- end }} honorLabels: true selector: matchLabels: diff --git a/stable/prometheus-operator/templates/exporters/kubelet/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/kubelet/servicemonitor.yaml index d89b092f4b..679aac9fc4 100644 --- a/stable/prometheus-operator/templates/exporters/kubelet/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/kubelet/servicemonitor.yaml @@ -11,7 +11,9 @@ spec: {{- if .Values.kubelet.serviceMonitor.https }} - port: https-metrics scheme: https - interval: 15s + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecureSkipVerify: true @@ -20,19 +22,29 @@ spec: - port: https-metrics scheme: https path: /metrics/cadvisor - interval: 30s + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} honorLabels: true tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecureSkipVerify: true bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- if .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings }} + metricRelabelings: +{{ toYaml .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings | indent 4 }} +{{- end }} {{- else }} - port: http-metrics - interval: 30s + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} honorLabels: true - port: http-metrics path: /metrics/cadvisor - interval: 30s + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} honorLabels: true {{- if .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings }} metricRelabelings: diff --git a/stable/prometheus-operator/templates/exporters/node-exporter/servicemonitor.yaml b/stable/prometheus-operator/templates/exporters/node-exporter/servicemonitor.yaml index fa5e52dcf8..b18c224767 100644 --- a/stable/prometheus-operator/templates/exporters/node-exporter/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/exporters/node-exporter/servicemonitor.yaml @@ -14,7 +14,9 @@ spec: release: {{ .Release.Name }} endpoints: - port: metrics - interval: 30s + {{- if .Values.nodeExporter.serviceMonitor.interval }} + interval: {{ .Values.nodeExporter.serviceMonitor.interval }} + {{- end }} {{- if .Values.nodeExporter.serviceMonitor.metricRelabelings }} metricRelabelings: {{ toYaml .Values.nodeExporter.serviceMonitor.metricRelabelings | indent 4 }} diff --git a/stable/prometheus-operator/templates/grafana/servicemonitor.yaml b/stable/prometheus-operator/templates/grafana/servicemonitor.yaml index 954a842c3f..b2f9150b39 100644 --- a/stable/prometheus-operator/templates/grafana/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/grafana/servicemonitor.yaml @@ -16,6 +16,8 @@ spec: - {{ .Release.Namespace | quote }} endpoints: - port: service - interval: 30s + {{- if .Values.grafana.serviceMonitor.interval }} + interval: {{ .Values.grafana.serviceMonitor.interval }} + {{- end }} path: "{{ trimSuffix "/" .Values.grafana.ingress.path }}/metrics" {{- end }} diff --git a/stable/prometheus-operator/templates/prometheus-operator/servicemonitor.yaml b/stable/prometheus-operator/templates/prometheus-operator/servicemonitor.yaml index 9532c1f973..38009c7ee9 100644 --- a/stable/prometheus-operator/templates/prometheus-operator/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/prometheus-operator/servicemonitor.yaml @@ -10,6 +10,9 @@ spec: endpoints: - port: http honorLabels: true + {{- if .Values.prometheusOperator.serviceMonitor.interval }} + interval: {{ .Values.prometheusOperator.serviceMonitor.interval }} + {{- end }} selector: matchLabels: app: {{ template "prometheus-operator.name" . }}-operator diff --git a/stable/prometheus-operator/templates/prometheus/servicemonitor.yaml b/stable/prometheus-operator/templates/prometheus/servicemonitor.yaml index 36790450b8..b63711ad4e 100644 --- a/stable/prometheus-operator/templates/prometheus/servicemonitor.yaml +++ b/stable/prometheus-operator/templates/prometheus/servicemonitor.yaml @@ -16,6 +16,8 @@ spec: - {{ .Release.Namespace | quote }} endpoints: - port: web - interval: 30s + {{- if .Values.prometheus.serviceMonitor.interval }} + interval: {{ .Values.prometheus.serviceMonitor.interval }} + {{- end }} path: "{{ trimSuffix "/" .Values.prometheus.prometheusSpec.routePrefix }}/metrics" {{- end }} diff --git a/stable/prometheus-operator/values.yaml b/stable/prometheus-operator/values.yaml index 2db01f6970..613117d951 100644 --- a/stable/prometheus-operator/values.yaml +++ b/stable/prometheus-operator/values.yaml @@ -176,6 +176,9 @@ alertmanager: ## If true, create a serviceMonitor for alertmanager ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Settings affecting alertmanagerSpec @@ -376,6 +379,9 @@ grafana: ## If true, create a serviceMonitor for grafana ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Component scraping the kube api server @@ -399,6 +405,9 @@ kubeApiServer: # replacement: kubernetes.default.svc:443 serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" jobLabel: component selector: matchLabels: @@ -412,11 +421,18 @@ kubelet: namespace: kube-system serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## Enable scraping the kubelet over https. For requirements to enable this see ## https://github.com/coreos/prometheus-operator/issues/926 ## - https: false - # cAdvisorMetricRelabelings: + https: true + + ## Metric relabellings to apply to samples before ingestion + ## + cAdvisorMetricRelabelings: [] # - sourceLabels: [__name__, image] # separator: ; # regex: container_([a-z_]+); @@ -447,9 +463,13 @@ kubeControllerManager: port: 10252 targetPort: 10252 selector: - k8s-app: kube-controller-manager + component: kube-controller-manager serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## Enable scraping kube-controller-manager over https. ## Requires proper certs (not self-signed) and delegated authentication/authorization checks ## @@ -463,7 +483,11 @@ coreDns: port: 9153 targetPort: 9153 selector: - k8s-app: coredns + k8s-app: kube-dns + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Component scraping kubeDns. Use either this or coreDns ## @@ -472,6 +496,10 @@ kubeDns: service: selector: k8s-app: kube-dns + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Component scraping etcd ## kubeEtcd: @@ -487,10 +515,10 @@ kubeEtcd: ## Etcd service. If using kubeEtcd.endpoints only the port and targetPort are used ## service: - port: 4001 - targetPort: 4001 + port: 2379 + targetPort: 2379 selector: - k8s-app: etcd-server + component: etcd ## Configure secure access to the etcd cluster by loading a secret into prometheus and ## specifying security configuration below. For example, with a secret named etcd-client-cert @@ -504,6 +532,9 @@ kubeEtcd: ## keyFile: /etc/prometheus/secrets/etcd-client-cert/etcd-client-key ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" scheme: http insecureSkipVerify: false serverName: "" @@ -530,9 +561,12 @@ kubeScheduler: port: 10251 targetPort: 10251 selector: - k8s-app: kube-scheduler + component: kube-scheduler serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Enable scraping kube-controller-manager over https. ## Requires proper certs (not self-signed) and delegated authentication/authorization checks ## @@ -542,6 +576,10 @@ kubeScheduler: ## kubeStateMetrics: enabled: true + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" ## Configuration for kube-state-metrics subchart ## @@ -560,10 +598,14 @@ nodeExporter: ## jobLabel: jobLabel - serviceMonitor: {} + serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## metric relabel configs to apply to samples before ingestion. ## - # metricRelabelings: + metricRelabelings: [] # - sourceLabels: [__name__] # separator: ; # regex: ^node_mountstats_nfs_(event|operations|transport)_.+ @@ -664,6 +706,9 @@ prometheusOperator: ## Create a servicemonitor for the operator ## serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Resource limits & requests @@ -823,6 +868,9 @@ prometheus: # - prometheus.example.com serviceMonitor: + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" selfMonitor: true ## Settings affecting prometheusSpec