Merge pull request #140 from elenalape/kubecost-upgrade-1.83.1
(Kubecost) Upgrade Kubecost to 1.83.2pull/156/head
commit
0d00d4f79f
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,14 @@
|
||||||
|
annotations:
|
||||||
|
artifacthub.io/links: |
|
||||||
|
- name: Homepage
|
||||||
|
url: https://www.kubecost.com
|
||||||
|
catalog.cattle.io/certified: partner
|
||||||
|
catalog.cattle.io/display-name: Kubecost
|
||||||
|
catalog.cattle.io/release-name: kubecost
|
||||||
|
apiVersion: v2
|
||||||
|
appVersion: 1.83.2
|
||||||
|
description: A Helm chart that sets up Kubecost, Prometheus, and Grafana to monitor
|
||||||
|
cloud costs.
|
||||||
|
icon: https://partner-charts.rancher.io/assets/logos/kubecost.png
|
||||||
|
name: cost-analyzer
|
||||||
|
version: 1.83.201
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Kubecost helm chart
|
||||||
|
Helm chart for the Kubecost project, which is created to monitor and manage Kubernetes resource spend. Please contact team@kubecost.com or visit [kubecost.com](http://kubecost.com) for more info.
|
||||||
|
|
||||||
|
While Helm is the [recommended install path](http://kubecost.com/install), these resources can also be deployed with the following command:<a name="manifest"></a>
|
||||||
|
|
||||||
|
`kubectl apply -f https://raw.githubusercontent.com/kubecost/cost-analyzer-helm-chart/master/kubecost.yaml --namespace kubecost`
|
||||||
|
|
||||||
|
<a name="config-options"></a><br/>
|
||||||
|
The following table lists the commonly used configurable parameters of the Kubecost Helm chart and their default values.
|
||||||
|
|
||||||
|
Parameter | Description | Default
|
||||||
|
--------- | ----------- | -------
|
||||||
|
`global.prometheus.enabled` | If false, use an existing Prometheus install. [More info](http://docs.kubecost.com/custom-prom). | `true`
|
||||||
|
`prometheus.kubeStateMetrics.enabled` | If true, deploy [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) for Kubernetes metrics | `true`
|
||||||
|
`prometheus.kube-state-metrics.resources` | Set kube-state-metrics resource requests and limits. | `{}`
|
||||||
|
`prometheus.server.persistentVolume.enabled` | If true, Prometheus server will create a Persistent Volume Claim. | `true`
|
||||||
|
`prometheus.server.persistentVolume.size` | Prometheus server data Persistent Volume size. Default set to retain ~6000 samples per second for 15 days. | `32Gi`
|
||||||
|
`prometheus.server.retention` | Determines when to remove old data. | `15d`
|
||||||
|
`prometheus.server.resources` | Prometheus server resource requests and limits. | `{}`
|
||||||
|
`prometheus.nodeExporter.resources` | Node exporter resource requests and limits. | `{}`
|
||||||
|
`prometheus.nodeExporter.enabled` `prometheus.serviceAccounts.nodeExporter.create` | If false, do not crate NodeExporter daemonset. | `true`
|
||||||
|
`prometheus.alertmanager.persistentVolume.enabled` | If true, Alertmanager will create a Persistent Volume Claim. | `true`
|
||||||
|
`prometheus.pushgateway.persistentVolume.enabled` | If true, Prometheus Pushgateway will create a Persistent Volume Claim. | `true`
|
||||||
|
`persistentVolume.enabled` | If true, Kubecost will create a Persistent Volume Claim for product config data. | `true`
|
||||||
|
`persistentVolume.size` | Define PVC size for cost-analyzer | `0.2Gi`
|
||||||
|
`persistentVolume.dbSize` | Define PVC size for cost-analyzer's flat file database | `32.0Gi`
|
||||||
|
`ingress.enabled` | If true, Ingress will be created | `false`
|
||||||
|
`ingress.annotations` | Ingress annotations | `{}`
|
||||||
|
`ingress.paths` | Ingress paths | `["/"]`
|
||||||
|
`ingress.hosts` | Ingress hostnames | `[cost-analyzer.local]`
|
||||||
|
`ingress.tls` | Ingress TLS configuration (YAML) | `[]`
|
||||||
|
`networkPolicy.enabled` | If true, create a NetworkPolicy to deny egress | `false`
|
||||||
|
`networkCosts.enabled` | If true, collect network allocation metrics [More info](http://docs.kubecost.com/network-allocation) | `false`
|
||||||
|
`networkCosts.podMonitor.enabled` | If true, a [PodMonitor](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#podmonitor) for the network-cost daemonset is created | `false`
|
||||||
|
`serviceMonitor.enabled` | Set this to `true` to create ServiceMonitor for Prometheus operator | `false`
|
||||||
|
`serviceMonitor.additionalLabels` | Additional labels that can be used so ServiceMonitor will be discovered by Prometheus | `{}`
|
||||||
|
`prometheusRule.enabled` | Set this to `true` to create PrometheusRule for Prometheus operator | `false`
|
||||||
|
`prometheusRule.additionalLabels` | Additional labels that can be used so PrometheusRule will be discovered by Prometheus | `{}`
|
||||||
|
`grafana.resources` | Grafana resource requests and limits. | `{}`
|
||||||
|
`grafana.sidecar.datasources.defaultDatasourceEnabled` | Set this to `false` to disable creation of Prometheus datasource in Grafana | `true`
|
||||||
|
`serviceAccount.create` | Set this to `false` if you want to create the service account `kubecost-cost-analyzer` on your own | `true`
|
||||||
|
`tolerations` | node taints to tolerate | `[]`
|
||||||
|
`affinity` | pod affinity | `{}`
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Kubecost
|
||||||
|
|
||||||
|
[Kubecost](https://kubecost.com/) is an open-source Kubernetes cost monitoring solution.
|
||||||
|
|
||||||
|
Kubecost gives teams visibility into current and historical Kubernetes spend and resource allocation. These models provide cost transparency in Kubernetes environments that support multiple applications, teams, departments, etc.
|
||||||
|
|
||||||
|
To see more on the functionality of the full Kubecost product, please visit the [features page](https://kubecost.com/#features) on our website.
|
||||||
|
|
||||||
|
Here is a summary of features enabled by this cost model:
|
||||||
|
|
||||||
|
- Real-time cost allocation by Kubernetes service, deployment, namespace, label, statefulset, daemonset, pod, and container
|
||||||
|
- Dynamic asset pricing enabled by integrations with AWS, Azure, and GCP billing APIs
|
||||||
|
- Supports on-prem k8s clusters with custom pricing sheets
|
||||||
|
- Allocation for in-cluster resources like CPU, GPU, memory, and persistent volumes.
|
||||||
|
- Allocation for AWS & GCP out-of-cluster resources like RDS instances and S3 buckets with key (optional)
|
||||||
|
- Easily export pricing data to Prometheus with /metrics endpoint ([learn more](https://github.com/kubecost/cost-model/blob/develop/PROMETHEUS.md))
|
||||||
|
- Free and open source distribution (Apache2 license)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Kubernetes 1.8+
|
||||||
|
- kube-state-metrics
|
||||||
|
- Grafana
|
||||||
|
- Prometheus
|
||||||
|
- Node Exporter
|
|
@ -0,0 +1,444 @@
|
||||||
|
{
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": "-- Grafana --",
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editable": true,
|
||||||
|
"gnetId": null,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": 10,
|
||||||
|
"iteration": 1589748792557,
|
||||||
|
"links": [],
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${datasource}",
|
||||||
|
"fill": 1,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 9,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(container_fs_limit_bytes{instance=~'$disk', device!=\"tmpfs\", id=\"/\"}) by (instance)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 1,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Disk Size",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${datasource}",
|
||||||
|
"fill": 1,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 9,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(container_fs_usage_bytes{instance=~'$disk',id=\"/\"}) by (instance) / sum(container_fs_limit_bytes{instance=~'$disk',device!=\"tmpfs\", id=\"/\"}) by (instance)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 1,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Disk Utilization",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"decimals": 1,
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": "0",
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${datasource}",
|
||||||
|
"fill": 1,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 9,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 9
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "1 - sum(container_fs_inodes_free{instance=~'$disk',id=\"/\"}) by (instance) / sum(container_fs_inodes_total{instance=~'$disk',id=\"/\"}) by (instance)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 1,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "iNode Utilization",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"decimals": 1,
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": "0",
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${datasource}",
|
||||||
|
"fill": 1,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 9,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 9
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(container_fs_usage_bytes{instance=~'$disk',id=\"/\"}) by (instance)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 1,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Disk Usage",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"schemaVersion": 16,
|
||||||
|
"style": "dark",
|
||||||
|
"tags": [
|
||||||
|
"cost",
|
||||||
|
"utilization",
|
||||||
|
"metrics"
|
||||||
|
],
|
||||||
|
"templating": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
"text": "All",
|
||||||
|
"value": "$__all"
|
||||||
|
},
|
||||||
|
"datasource": "${datasource}",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "disk",
|
||||||
|
"options": [],
|
||||||
|
"query": "query_result(sum(container_fs_limit_bytes{device!=\"tmpfs\", id=\"/\"}) by (instance))",
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "/instance=\\\"(.*?)(\\\")/",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"sort": 0,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": "default-kubecost",
|
||||||
|
"value": "default-kubecost"
|
||||||
|
},
|
||||||
|
"error": null,
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "datasource",
|
||||||
|
"options": [],
|
||||||
|
"query": "prometheus",
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"type": "datasource"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-7d",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {
|
||||||
|
"refresh_intervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
],
|
||||||
|
"time_options": [
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"1h",
|
||||||
|
"6h",
|
||||||
|
"12h",
|
||||||
|
"24h",
|
||||||
|
"2d",
|
||||||
|
"7d",
|
||||||
|
"30d"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timezone": "",
|
||||||
|
"title": "Attached disk metrics",
|
||||||
|
"uid": "nBH7qBgMk",
|
||||||
|
"version": 2
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
apiVersion: v1
|
||||||
|
appVersion: 6.0.0
|
||||||
|
description: The leading tool for querying and visualizing time series and metrics.
|
||||||
|
home: https://grafana.net
|
||||||
|
icon: https://raw.githubusercontent.com/grafana/grafana/master/public/img/logo_transparent_400x.png
|
||||||
|
kubeVersion: ^1.8.0-0
|
||||||
|
maintainers:
|
||||||
|
- email: zanhsieh@gmail.com
|
||||||
|
name: zanhsieh
|
||||||
|
- email: rluckie@cisco.com
|
||||||
|
name: rtluckie
|
||||||
|
name: grafana
|
||||||
|
sources:
|
||||||
|
- https://github.com/grafana/grafana
|
||||||
|
version: 1.17.2
|
|
@ -0,0 +1,162 @@
|
||||||
|
# Grafana Helm Chart
|
||||||
|
|
||||||
|
* Installs the web dashboarding system [Grafana](http://grafana.org/)
|
||||||
|
|
||||||
|
## TL;DR;
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install stable/grafana
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
To install the chart with the release name `my-release`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install --name my-release stable/grafana
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uninstalling the Chart
|
||||||
|
|
||||||
|
To uninstall/delete the my-release deployment:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm delete my-release
|
||||||
|
```
|
||||||
|
|
||||||
|
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|---------------------------------|-----------------------------------------------|---------------------------------------------------------|
|
||||||
|
| `replicas` | Number of nodes | `1` |
|
||||||
|
| `deploymentStrategy` | Deployment strategy | `RollingUpdate` |
|
||||||
|
| `livenessProbe` | Liveness Probe settings | `{ "httpGet": { "path": "/api/health", "port": 3000 } "initialDelaySeconds": 60, "timeoutSeconds": 30, "failureThreshold": 10 }` |
|
||||||
|
| `readinessProbe` | Rediness Probe settings | `{ "httpGet": { "path": "/api/health", "port": 3000 } }`|
|
||||||
|
| `securityContext` | Deployment securityContext | `{"runAsUser": 472, "fsGroup": 472}` |
|
||||||
|
| `image.repository` | Image repository | `grafana/grafana` |
|
||||||
|
| `image.tag` | Image tag. (`Must be >= 5.0.0`) | `5.3.1` |
|
||||||
|
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||||
|
| `service.type` | Kubernetes service type | `ClusterIP` |
|
||||||
|
| `service.port` | Kubernetes port where service is exposed | `80` |
|
||||||
|
| `service.annotations` | Service annotations | `{}` |
|
||||||
|
| `service.labels` | Custom labels | `{}` |
|
||||||
|
| `ingress.enabled` | Enables Ingress | `false` |
|
||||||
|
| `ingress.annotations` | Ingress annotations | `{}` |
|
||||||
|
| `ingress.labels` | Custom labels | `{}` |
|
||||||
|
| `ingress.hosts` | Ingress accepted hostnames | `[]` |
|
||||||
|
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
||||||
|
| `resources` | CPU/Memory resource requests/limits | `{}` |
|
||||||
|
| `nodeSelector` | Node labels for pod assignment | `{}` |
|
||||||
|
| `tolerations` | Toleration labels for pod assignment | `[]` |
|
||||||
|
| `affinity` | Affinity settings for pod assignment | `{}` |
|
||||||
|
| `persistence.enabled` | Use persistent volume to store data | `false` |
|
||||||
|
| `persistence.size` | Size of persistent volume claim | `10Gi` |
|
||||||
|
| `persistence.existingClaim` | Use an existing PVC to persist data | `nil` |
|
||||||
|
| `persistence.storageClassName` | Type of persistent volume claim | `nil` |
|
||||||
|
| `persistence.accessModes` | Persistence access modes | `[]` |
|
||||||
|
| `persistence.subPath` | Mount a sub dir of the persistent volume | `""` |
|
||||||
|
| `schedulerName` | Alternate scheduler name | `nil` |
|
||||||
|
| `env` | Extra environment variables passed to pods | `{}` |
|
||||||
|
| `envFromSecret` | Name of a Kubenretes secret (must be manually created in the same namespace) containing values to be added to the environment | `""` |
|
||||||
|
| `extraSecretMounts` | Additional grafana server secret mounts | `[]` |
|
||||||
|
| `plugins` | Plugins to be loaded along with Grafana | `[]` |
|
||||||
|
| `datasources` | Configure grafana datasources | `{}` |
|
||||||
|
| `dashboardProviders` | Configure grafana dashboard providers | `{}` |
|
||||||
|
| `dashboards` | Dashboards to import | `{}` |
|
||||||
|
| `dashboardsConfigMaps` | ConfigMaps reference that contains dashboards | `{}` |
|
||||||
|
| `grafana.ini` | Grafana's primary configuration | `{}` |
|
||||||
|
| `ldap.existingSecret` | The name of an existing secret containing the `ldap.toml` file, this must have the key `ldap-toml`. | `""` |
|
||||||
|
| `ldap.config ` | Grafana's LDAP configuration | `""` |
|
||||||
|
| `annotations` | Deployment annotations | `{}` |
|
||||||
|
| `podAnnotations` | Pod annotations | `{}` |
|
||||||
|
| `sidecar.dashboards.enabled` | Enabled the cluster wide search for dashboards and adds/updates/deletes them in grafana | `false` |
|
||||||
|
| `sidecar.dashboards.label` | Label that config maps with dashboards should have to be added | `false` |
|
||||||
|
| `sidecar.datasources.enabled` | Enabled the cluster wide search for datasources and adds/updates/deletes them in grafana |`false` |
|
||||||
|
| `sidecar.datasources.label` | Label that config maps with datasources should have to be added | `false` |
|
||||||
|
| `smtp.existingSecret` | The name of an existing secret containing the SMTP credentials, this must have the keys `user` and `password`. | `""` |
|
||||||
|
|
||||||
|
## Sidecar for dashboards
|
||||||
|
|
||||||
|
If the parameter `sidecar.dashboards.enabled` is set, a sidecar container is deployed in the grafana pod. This container watches all config maps in the cluster and filters out the ones with a label as defined in `sidecar.dashboards.label`. The files defined in those configmaps are written to a folder and accessed by grafana. Changes to the configmaps are monitored and the imported dashboards are deleted/updated. A recommendation is to use one configmap per dashboard, as an reduction of multiple dashboards inside one configmap is currently not properly mirrored in grafana.
|
||||||
|
Example dashboard config:
|
||||||
|
```
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: sample-grafana-dashboard
|
||||||
|
labels:
|
||||||
|
grafana_dashboard: 1
|
||||||
|
data:
|
||||||
|
k8s-dashboard.json: |-
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sidecar for datasources
|
||||||
|
|
||||||
|
If the parameter `sidecar.datasource.enabled` is set, a sidecar container is deployed in the grafana pod. This container watches all config maps in the cluster and filters out the ones with a label as defined in `sidecar.datasources.label`. The files defined in those configmaps are written to a folder and accessed by grafana on startup. Using these yaml files, the data sources in grafana can be modified.
|
||||||
|
|
||||||
|
Example datasource config adapted from [Grafana](http://docs.grafana.org/administration/provisioning/#example-datasource-config-file):
|
||||||
|
```
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: sample-grafana-datasource
|
||||||
|
labels:
|
||||||
|
grafana_datasource: 1
|
||||||
|
data:
|
||||||
|
datasource.yaml: |-
|
||||||
|
# config file version
|
||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
# list of datasources that should be deleted from the database
|
||||||
|
deleteDatasources:
|
||||||
|
- name: Graphite
|
||||||
|
orgId: 1
|
||||||
|
|
||||||
|
# list of datasources to insert/update depending
|
||||||
|
# whats available in the database
|
||||||
|
datasources:
|
||||||
|
# <string, required> name of the datasource. Required
|
||||||
|
- name: Graphite
|
||||||
|
# <string, required> datasource type. Required
|
||||||
|
type: graphite
|
||||||
|
# <string, required> access mode. proxy or direct (Server or Browser in the UI). Required
|
||||||
|
access: proxy
|
||||||
|
# <int> org id. will default to orgId 1 if not specified
|
||||||
|
orgId: 1
|
||||||
|
# <string> url
|
||||||
|
url: http://localhost:8080
|
||||||
|
# <string> database password, if used
|
||||||
|
password:
|
||||||
|
# <string> database user, if used
|
||||||
|
user:
|
||||||
|
# <string> database name, if used
|
||||||
|
database:
|
||||||
|
# <bool> enable/disable basic auth
|
||||||
|
basicAuth:
|
||||||
|
# <string> basic auth username
|
||||||
|
basicAuthUser:
|
||||||
|
# <string> basic auth password
|
||||||
|
basicAuthPassword:
|
||||||
|
# <bool> enable/disable with credentials headers
|
||||||
|
withCredentials:
|
||||||
|
# <bool> mark as default datasource. Max one per org
|
||||||
|
isDefault:
|
||||||
|
# <map> fields that will be converted to json and stored in json_data
|
||||||
|
jsonData:
|
||||||
|
graphiteVersion: "1.1"
|
||||||
|
tlsAuth: true
|
||||||
|
tlsAuthWithCACert: true
|
||||||
|
# <string> json object of data that will be encrypted.
|
||||||
|
secureJsonData:
|
||||||
|
tlsCACert: "..."
|
||||||
|
tlsClientCert: "..."
|
||||||
|
tlsClientKey: "..."
|
||||||
|
version: 1
|
||||||
|
# <bool> allow users to edit datasources from the UI.
|
||||||
|
editable: false
|
||||||
|
|
||||||
|
```
|
|
@ -0,0 +1,37 @@
|
||||||
|
1. Get your '{{ .Values.adminUser }}' user password by running:
|
||||||
|
|
||||||
|
kubectl get secret --namespace {{ .Release.Namespace }} {{ template "grafana.fullname" . }} -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
|
||||||
|
|
||||||
|
2. The Grafana server can be accessed via port {{ .Values.service.port }} on the following DNS name from within your cluster:
|
||||||
|
|
||||||
|
{{ template "grafana.fullname" . }}.{{ .Release.Namespace }}.svc
|
||||||
|
{{ if .Values.ingress.enabled }}
|
||||||
|
From outside the cluster, the server URL(s) are:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
http://{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ else }}
|
||||||
|
Get the Grafana URL to visit by running these commands in the same shell:
|
||||||
|
{{ if contains "NodePort" .Values.service.type -}}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "grafana.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{ else if contains "LoadBalancer" .Values.service.type -}}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "grafana.fullname" . }}'
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "grafana.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
http://$SERVICE_IP:{{ .Values.service.port -}}
|
||||||
|
{{ else if contains "ClusterIP" .Values.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "grafana.fullname" . }},component={{ .Values.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 3000
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
3. Login with the password from step 1 and the username: {{ .Values.adminUser }}
|
||||||
|
|
||||||
|
{{- if not .Values.persistence.enabled }}
|
||||||
|
#################################################################################
|
||||||
|
###### WARNING: Persistence is disabled!!! You will lose your data when #####
|
||||||
|
###### the Grafana pod is terminated. #####
|
||||||
|
#################################################################################
|
||||||
|
{{- end }}
|
|
@ -0,0 +1,43 @@
|
||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account
|
||||||
|
*/}}
|
||||||
|
{{- define "grafana.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
{{ default (include "grafana.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "grafana.fullname" . }}-clusterrole
|
||||||
|
{{- if or .Values.sidecar.dashboards.enabled .Values.sidecar.datasources.enabled }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""] # "" indicates the core API group
|
||||||
|
resources: ["configmaps"]
|
||||||
|
verbs: ["get", "watch", "list"]
|
||||||
|
{{- else }}
|
||||||
|
rules: []
|
||||||
|
{{- end}}
|
||||||
|
{{- end}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}-clusterrolebinding
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "grafana.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "grafana.fullname" . }}-clusterrole
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
{{- end}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.sidecar.dashboards.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "grafana.fullname" . }}-config-dashboards
|
||||||
|
data:
|
||||||
|
provider.yaml: |-
|
||||||
|
apiVersion: 1
|
||||||
|
providers:
|
||||||
|
- name: 'default'
|
||||||
|
orgId: 1
|
||||||
|
folder: ''
|
||||||
|
type: file
|
||||||
|
disableDeletion: false
|
||||||
|
options:
|
||||||
|
path: {{ .Values.sidecar.dashboards.folder }}
|
||||||
|
{{- end}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,76 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
data:
|
||||||
|
{{- if .Values.plugins }}
|
||||||
|
plugins: {{ join "," .Values.plugins }}
|
||||||
|
{{- end }}
|
||||||
|
grafana.ini: |
|
||||||
|
{{- range $key, $value := index .Values "grafana.ini" }}
|
||||||
|
[{{ $key }}]
|
||||||
|
{{- range $elem, $elemVal := $value }}
|
||||||
|
{{ $elem }} = {{ $elemVal }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.datasources }}
|
||||||
|
{{- range $key, $value := .Values.datasources }}
|
||||||
|
{{ $key }}: |
|
||||||
|
{{ toYaml $value | trim | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.global.prometheus.enabled }}
|
||||||
|
- access: proxy
|
||||||
|
isDefault: true
|
||||||
|
name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
url: http://{{ template "cost-analyzer.prometheus.server.name" . }}.{{ .Release.Namespace }}.svc
|
||||||
|
{{ else }}
|
||||||
|
- access: proxy
|
||||||
|
isDefault: true
|
||||||
|
name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
url: {{ .Values.global.prometheus.fqdn }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .Values.dashboardProviders }}
|
||||||
|
{{- range $key, $value := .Values.dashboardProviders }}
|
||||||
|
{{ $key }}: |
|
||||||
|
{{ toYaml $value | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .Values.dashboards }}
|
||||||
|
download_dashboards.sh: |
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -euf
|
||||||
|
{{- if .Values.dashboardProviders }}
|
||||||
|
{{- range $key, $value := .Values.dashboardProviders }}
|
||||||
|
{{- range $value.providers }}
|
||||||
|
mkdir -p {{ .options.path }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range $provider, $dashboards := .Values.dashboards }}
|
||||||
|
{{- range $key, $value := $dashboards }}
|
||||||
|
{{- if (or (hasKey $value "gnetId") (hasKey $value "url")) }}
|
||||||
|
curl -sk \
|
||||||
|
--connect-timeout 60 \
|
||||||
|
--max-time 60 \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
-H "Content-Type: application/json;charset=UTF-8" \
|
||||||
|
{{- if $value.url -}}{{ $value.url }}{{- else -}} https://grafana.com/api/dashboards/{{ $value.gnetId }}/revisions/{{- if $value.revision -}}{{ $value.revision }}{{- else -}}1{{- end -}}/download{{- end -}}{{ if $value.datasource }}| sed 's|\"datasource\":[^,]*|\"datasource\": \"{{ $value.datasource }}\"|g'{{ end }} \
|
||||||
|
> /var/lib/grafana/dashboards/{{ $provider }}/{{ $key }}.json
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,24 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.dashboards }}
|
||||||
|
{{- range $provider, $dashboards := .Values.dashboards }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" $ }}-dashboards-{{ $provider }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" $ }}
|
||||||
|
chart: {{ template "grafana.chart" $ }}
|
||||||
|
release: {{ $.Release.Name }}
|
||||||
|
heritage: {{ $.Release.Service }}
|
||||||
|
dashboard-provider: {{ $provider }}
|
||||||
|
data:
|
||||||
|
{{- range $key, $value := $dashboards }}
|
||||||
|
{{- if hasKey $value "json" }}
|
||||||
|
{{ $key }}.json: |
|
||||||
|
{{ $value.json | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,276 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicas }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
strategy:
|
||||||
|
type: {{ .Values.deploymentStrategy }}
|
||||||
|
{{- if ne .Values.deploymentStrategy "RollingUpdate" }}
|
||||||
|
rollingUpdate: null
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: {{ template "grafana.serviceAccountName" . }}
|
||||||
|
{{- if .Values.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.dashboards }}
|
||||||
|
initContainers:
|
||||||
|
- name: download-dashboards
|
||||||
|
image: "{{ .Values.downloadDashboardsImage.repository }}:{{ .Values.downloadDashboardsImage.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.downloadDashboardsImage.pullPolicy }}
|
||||||
|
command: ["sh", "/etc/grafana/download_dashboards.sh"]
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: "/etc/grafana/download_dashboards.sh"
|
||||||
|
subPath: download_dashboards.sh
|
||||||
|
- name: storage
|
||||||
|
mountPath: "/var/lib/grafana"
|
||||||
|
subPath: {{ .Values.persistence.subPath }}
|
||||||
|
{{- range .Values.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.image.pullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- range .Values.image.pullSecrets }}
|
||||||
|
- name: {{ . }}
|
||||||
|
{{- end}}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
{{- if .Values.sidecar.dashboards.enabled }}
|
||||||
|
- name: {{ template "grafana.name" . }}-sc-dashboard
|
||||||
|
image: "{{ .Values.sidecar.image }}"
|
||||||
|
imagePullPolicy: {{ .Values.sidecar.imagePullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: LABEL
|
||||||
|
value: "{{ .Values.sidecar.dashboards.label }}"
|
||||||
|
- name: FOLDER
|
||||||
|
value: "{{ .Values.sidecar.dashboards.folder }}"
|
||||||
|
- name: ERROR_THROTTLE_SLEEP
|
||||||
|
value: "{{ .Values.sidecar.dashboards.error_throttle_sleep }}"
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.sidecar.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: sc-dashboard-volume
|
||||||
|
mountPath: {{ .Values.sidecar.dashboards.folder | quote }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.sidecar.datasources.enabled }}
|
||||||
|
- name: {{ template "grafana.name" . }}-sc-datasources
|
||||||
|
image: "{{ .Values.sidecar.image }}"
|
||||||
|
imagePullPolicy: {{ .Values.sidecar.imagePullPolicy }}
|
||||||
|
env:
|
||||||
|
- name: LABEL
|
||||||
|
value: "{{ .Values.sidecar.datasources.label }}"
|
||||||
|
- name: FOLDER
|
||||||
|
value: "/etc/grafana/provisioning/datasources"
|
||||||
|
- name: ERROR_THROTTLE_SLEEP
|
||||||
|
value: "{{ .Values.sidecar.datasources.error_throttle_sleep }}"
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.sidecar.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: sc-datasources-volume
|
||||||
|
mountPath: "/etc/grafana/provisioning/datasources"
|
||||||
|
{{- end}}
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: "/etc/grafana/grafana.ini"
|
||||||
|
subPath: grafana.ini
|
||||||
|
- name: ldap
|
||||||
|
mountPath: "/etc/grafana/ldap.toml"
|
||||||
|
subPath: ldap.toml
|
||||||
|
{{- if .Values.dashboards }}
|
||||||
|
{{- range $provider, $dashboards := .Values.dashboards }}
|
||||||
|
{{- range $key, $value := $dashboards }}
|
||||||
|
{{- if hasKey $value "json" }}
|
||||||
|
- name: dashboards-{{ $provider }}
|
||||||
|
mountPath: "/var/lib/grafana/dashboards/{{ $provider }}/{{ $key }}.json"
|
||||||
|
subPath: "{{ $key }}.json"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.dashboardsConfigMaps }}
|
||||||
|
{{- range keys .Values.dashboardsConfigMaps }}
|
||||||
|
- name: dashboards-{{ . }}
|
||||||
|
mountPath: "/var/lib/grafana/dashboards/{{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.datasources }}
|
||||||
|
- name: config
|
||||||
|
mountPath: "/etc/grafana/provisioning/datasources/datasources.yaml"
|
||||||
|
subPath: datasources.yaml
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.dashboardProviders }}
|
||||||
|
- name: config
|
||||||
|
mountPath: "/etc/grafana/provisioning/dashboards/dashboardproviders.yaml"
|
||||||
|
subPath: dashboardproviders.yaml
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.sidecar.dashboards.enabled }}
|
||||||
|
- name: sc-dashboard-volume
|
||||||
|
mountPath: {{ .Values.sidecar.dashboards.folder | quote }}
|
||||||
|
- name: sc-dashboard-provider
|
||||||
|
mountPath: "/etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml"
|
||||||
|
subPath: provider.yaml
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.sidecar.datasources.enabled }}
|
||||||
|
- name: sc-datasources-volume
|
||||||
|
mountPath: "/etc/grafana/provisioning/datasources"
|
||||||
|
{{- end}}
|
||||||
|
- name: storage
|
||||||
|
mountPath: "/var/lib/grafana"
|
||||||
|
subPath: {{ .Values.persistence.subPath }}
|
||||||
|
{{- range .Values.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: service
|
||||||
|
containerPort: {{ .Values.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
- name: grafana
|
||||||
|
containerPort: 3000
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: GF_SECURITY_ADMIN_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
key: admin-user
|
||||||
|
- name: GF_SECURITY_ADMIN_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
key: admin-password
|
||||||
|
{{- if .Values.plugins }}
|
||||||
|
- name: GF_INSTALL_PLUGINS
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
key: plugins
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.smtp.existingSecret }}
|
||||||
|
- name: GF_SMTP_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.smtp.existingSecret }}
|
||||||
|
key: user
|
||||||
|
- name: GF_SMTP_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.smtp.existingSecret }}
|
||||||
|
key: password
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := .Values.env }}
|
||||||
|
- name: "{{ $key }}"
|
||||||
|
value: "{{ $value }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.envFromSecret }}
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: {{ .Values.envFromSecret }}
|
||||||
|
{{- end }}
|
||||||
|
livenessProbe:
|
||||||
|
{{ toYaml .Values.livenessProbe | indent 12 }}
|
||||||
|
readinessProbe:
|
||||||
|
{{ toYaml .Values.readinessProbe | indent 12 }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.resources | indent 12 }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml . | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml . | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml . | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
{{- if .Values.dashboards }}
|
||||||
|
{{- range keys .Values.dashboards }}
|
||||||
|
- name: dashboards-{{ . }}
|
||||||
|
configMap:
|
||||||
|
name: {{ template "grafana.fullname" $ }}-dashboards-{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.dashboardsConfigMaps }}
|
||||||
|
{{- range $provider, $name := .Values.dashboardsConfigMaps }}
|
||||||
|
- name: dashboards-{{ $provider }}
|
||||||
|
configMap:
|
||||||
|
name: {{ $name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
- name: ldap
|
||||||
|
secret:
|
||||||
|
{{- if .Values.ldap.existingSecret }}
|
||||||
|
secretName: {{ .Values.ldap.existingSecret }}
|
||||||
|
{{- else }}
|
||||||
|
secretName: {{ template "grafana.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
items:
|
||||||
|
- key: ldap-toml
|
||||||
|
path: ldap.toml
|
||||||
|
- name: storage
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ .Values.persistence.existingClaim | default (include "grafana.fullname" .) }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.sidecar.dashboards.enabled }}
|
||||||
|
- name: sc-dashboard-volume
|
||||||
|
emptyDir: {}
|
||||||
|
- name: sc-dashboard-provider
|
||||||
|
configMap:
|
||||||
|
name: {{ template "grafana.fullname" . }}-config-dashboards
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.sidecar.datasources.enabled }}
|
||||||
|
- name: sc-datasources-volume
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end -}}
|
||||||
|
{{- range .Values.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
defaultMode: {{ .defaultMode }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,44 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $fullName := include "grafana.fullname" . -}}
|
||||||
|
{{- $servicePort := .Values.service.port -}}
|
||||||
|
{{- $ingressPath := .Values.ingress.path -}}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- if .Values.ingress.labels }}
|
||||||
|
{{ toYaml .Values.ingress.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $fullName }}
|
||||||
|
servicePort: {{ $servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,45 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.rbac.pspEnabled }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
annotations:
|
||||||
|
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'
|
||||||
|
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
||||||
|
{{- if .Values.rbac.pspUseAppArmor }}
|
||||||
|
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
|
||||||
|
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- 'configMap'
|
||||||
|
- 'emptyDir'
|
||||||
|
- 'projected'
|
||||||
|
- 'secret'
|
||||||
|
- 'downwardAPI'
|
||||||
|
- 'persistentVolumeClaim'
|
||||||
|
hostNetwork: false
|
||||||
|
hostIPC: false
|
||||||
|
hostPID: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
fsGroup:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,26 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.persistence.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{- range .Values.persistence.accessModes }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size | quote }}
|
||||||
|
storageClassName: {{ .Values.persistence.storageClassName }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
{{- if .Values.rbac.pspEnabled }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['extensions']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames: [{{ template "grafana.fullname" . }}]
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "grafana.serviceAccountName" . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,22 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
admin-user: {{ .Values.adminUser | b64enc | quote }}
|
||||||
|
{{- if .Values.adminPassword }}
|
||||||
|
admin-password: {{ .Values.adminPassword | b64enc | quote }}
|
||||||
|
{{- else }}
|
||||||
|
admin-password: {{ randAlphaNum 40 | b64enc | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not .Values.ldap.existingSecret }}
|
||||||
|
ldap-toml: {{ .Values.ldap.config | b64enc | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,51 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "grafana.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ template "grafana.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- if .Values.service.labels }}
|
||||||
|
{{ toYaml .Values.service.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }}
|
||||||
|
type: ClusterIP
|
||||||
|
{{- if .Values.service.clusterIP }}
|
||||||
|
clusterIP: {{ .Values.service.clusterIP }}
|
||||||
|
{{end}}
|
||||||
|
{{- else if eq .Values.service.type "LoadBalancer" }}
|
||||||
|
type: {{ .Values.service.type }}
|
||||||
|
{{- if .Values.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else }}
|
||||||
|
type: {{ .Values.service.type }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{ toYaml .Values.service.externalIPs | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: tcp-service
|
||||||
|
port: {{ .Values.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 3000
|
||||||
|
{{ if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
|
||||||
|
nodePort: {{.Values.service.nodePort}}
|
||||||
|
{{ end }}
|
||||||
|
selector:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{{ if .Values.global.grafana.enabled }}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: {{ template "grafana.name" . }}
|
||||||
|
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
name: {{ template "grafana.serviceAccountName" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,276 @@
|
||||||
|
rbac:
|
||||||
|
create: true
|
||||||
|
pspEnabled: true
|
||||||
|
pspUseAppArmor: true
|
||||||
|
serviceAccount:
|
||||||
|
create: true
|
||||||
|
name:
|
||||||
|
|
||||||
|
replicas: 1
|
||||||
|
|
||||||
|
deploymentStrategy: RollingUpdate
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /api/health
|
||||||
|
port: 3000
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /api/health
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 60
|
||||||
|
timeoutSeconds: 30
|
||||||
|
failureThreshold: 10
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: grafana/grafana
|
||||||
|
tag: 7.5.6
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
## Optionally specify an array of imagePullSecrets.
|
||||||
|
## Secrets must be manually created in the namespace.
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||||
|
##
|
||||||
|
# pullSecrets:
|
||||||
|
# - myRegistrKeySecretName
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 472
|
||||||
|
fsGroup: 472
|
||||||
|
|
||||||
|
downloadDashboardsImage:
|
||||||
|
repository: appropriate/curl
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
## Pod Annotations
|
||||||
|
# podAnnotations: {}
|
||||||
|
|
||||||
|
## Deployment annotations
|
||||||
|
# annotations: {}
|
||||||
|
|
||||||
|
## Expose the grafana service to be accessed from outside the cluster (LoadBalancer service).
|
||||||
|
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
|
||||||
|
## ref: http://kubernetes.io/docs/user-guide/services/
|
||||||
|
##
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
annotations: {}
|
||||||
|
labels: {}
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
annotations: {}
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# kubernetes.io/tls-acme: "true"
|
||||||
|
labels: {}
|
||||||
|
path: /
|
||||||
|
hosts:
|
||||||
|
- chart-example.local
|
||||||
|
tls: []
|
||||||
|
# - secretName: chart-example-tls
|
||||||
|
# hosts:
|
||||||
|
# - chart-example.local
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
## Node labels for pod assignment
|
||||||
|
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||||
|
#
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
## Tolerations for pod assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||||
|
##
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
## Affinity for pod assignment
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||||
|
##
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
## Enable persistence using Persistent Volume Claims
|
||||||
|
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||||
|
##
|
||||||
|
persistence:
|
||||||
|
enabled: false
|
||||||
|
# storageClassName: default
|
||||||
|
# accessModes:
|
||||||
|
# - ReadWriteOnce
|
||||||
|
# size: 10Gi
|
||||||
|
# annotations: {}
|
||||||
|
# subPath: ""
|
||||||
|
# existingClaim:
|
||||||
|
|
||||||
|
adminUser: admin
|
||||||
|
adminPassword: strongpassword
|
||||||
|
|
||||||
|
## Use an alternate scheduler, e.g. "stork".
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
|
||||||
|
##
|
||||||
|
# schedulerName:
|
||||||
|
|
||||||
|
## Extra environment variables that will be pass onto deployment pods
|
||||||
|
env: {}
|
||||||
|
|
||||||
|
## The name of a secret in the same kubernetes namespace which contain values to be added to the environment
|
||||||
|
## This can be useful for auth tokens, etc
|
||||||
|
envFromSecret: ""
|
||||||
|
|
||||||
|
## Additional grafana server secret mounts
|
||||||
|
# Defines additional mounts with secrets. Secrets must be manually created in the namespace.
|
||||||
|
extraSecretMounts: []
|
||||||
|
# - name: secret-files
|
||||||
|
# mountPath: /etc/secrets
|
||||||
|
# secretName: grafana-secret-files
|
||||||
|
# readOnly: true
|
||||||
|
|
||||||
|
## Pass the plugins you want installed as a list.
|
||||||
|
##
|
||||||
|
plugins: []
|
||||||
|
# - digrich-bubblechart-panel
|
||||||
|
# - grafana-clock-panel
|
||||||
|
|
||||||
|
## Configure grafana datasources
|
||||||
|
## ref: http://docs.grafana.org/administration/provisioning/#datasources
|
||||||
|
##
|
||||||
|
datasources: {}
|
||||||
|
# datasources.yaml:
|
||||||
|
# apiVersion: 1
|
||||||
|
# datasources:
|
||||||
|
# - name: Prometheus2
|
||||||
|
# type: prometheus
|
||||||
|
# url: http://prometheus-server.default.svc
|
||||||
|
# access: proxy
|
||||||
|
# isDefault: false
|
||||||
|
|
||||||
|
## Configure grafana dashboard providers
|
||||||
|
## ref: http://docs.grafana.org/administration/provisioning/#dashboards
|
||||||
|
##
|
||||||
|
## `path` must be /var/lib/grafana/dashboards/<provider_name>
|
||||||
|
##
|
||||||
|
dashboardProviders: {}
|
||||||
|
# dashboardproviders.yaml:
|
||||||
|
# apiVersion: 1
|
||||||
|
# providers:
|
||||||
|
# - name: 'default'
|
||||||
|
# orgId: 1
|
||||||
|
# folder: ''
|
||||||
|
# type: file
|
||||||
|
# disableDeletion: false
|
||||||
|
# editable: true
|
||||||
|
# options:
|
||||||
|
# path: /var/lib/grafana/dashboards/default
|
||||||
|
|
||||||
|
## Configure grafana dashboard to import
|
||||||
|
## NOTE: To use dashboards you must also enable/configure dashboardProviders
|
||||||
|
## ref: https://grafana.com/dashboards
|
||||||
|
##
|
||||||
|
## dashboards per provider, use provider name as key.
|
||||||
|
##
|
||||||
|
dashboards: {}
|
||||||
|
# default:
|
||||||
|
# prometheus-stats:
|
||||||
|
# gnetId: 3662
|
||||||
|
# revision: 2
|
||||||
|
# datasource: Prometheus
|
||||||
|
|
||||||
|
## Reference to external ConfigMap per provider. Use provider name as key and ConfiMap name as value.
|
||||||
|
## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
|
||||||
|
## ConfigMap data example:
|
||||||
|
##
|
||||||
|
## data:
|
||||||
|
## example-dashboard.json: |
|
||||||
|
## RAW_JSON
|
||||||
|
##
|
||||||
|
dashboardsConfigMaps: {}
|
||||||
|
# default: ""
|
||||||
|
|
||||||
|
## Grafana's primary configuration
|
||||||
|
## NOTE: values in map will be converted to ini format
|
||||||
|
## ref: http://docs.grafana.org/installation/configuration/
|
||||||
|
##
|
||||||
|
grafana.ini:
|
||||||
|
paths:
|
||||||
|
data: /var/lib/grafana/data
|
||||||
|
logs: /var/log/grafana
|
||||||
|
plugins: /var/lib/grafana/plugins
|
||||||
|
provisioning: /etc/grafana/provisioning
|
||||||
|
analytics:
|
||||||
|
check_for_updates: true
|
||||||
|
log:
|
||||||
|
mode: console
|
||||||
|
grafana_net:
|
||||||
|
url: https://grafana.net
|
||||||
|
auth.anonymous:
|
||||||
|
enabled: true
|
||||||
|
org_role: Editor
|
||||||
|
org_name: Main Org.
|
||||||
|
|
||||||
|
## LDAP Authentication can be enabled with the following values on grafana.ini
|
||||||
|
## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
|
||||||
|
# auth.ldap:
|
||||||
|
# enabled: true
|
||||||
|
# allow_sign_up: true
|
||||||
|
# config_file: /etc/grafana/ldap.toml
|
||||||
|
|
||||||
|
## Grafana's LDAP configuration
|
||||||
|
## Templated by the template in _helpers.tpl
|
||||||
|
## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
|
||||||
|
## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
|
||||||
|
## ref: http://docs.grafana.org/installation/ldap/#configuration
|
||||||
|
ldap:
|
||||||
|
# `existingSecret` is a reference to an existing secret containing the ldap configuration
|
||||||
|
# for Grafana in a key `ldap-toml`.
|
||||||
|
existingSecret: ""
|
||||||
|
# `config` is the content of `ldap.toml` that will be stored in the created secret
|
||||||
|
config: ""
|
||||||
|
# config: |-
|
||||||
|
# verbose_logging = true
|
||||||
|
|
||||||
|
# [[servers]]
|
||||||
|
# host = "my-ldap-server"
|
||||||
|
# port = 636
|
||||||
|
# use_ssl = true
|
||||||
|
# start_tls = false
|
||||||
|
# ssl_skip_verify = false
|
||||||
|
# bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
|
||||||
|
|
||||||
|
## Grafana's SMTP configuration
|
||||||
|
## NOTE: To enable, grafana.ini must be configured with smtp.enabled
|
||||||
|
## ref: http://docs.grafana.org/installation/configuration/#smtp
|
||||||
|
smtp:
|
||||||
|
# `existingSecret` is a reference to an existing secret containing the smtp configuration
|
||||||
|
# for Grafana in keys `user` and `password`.
|
||||||
|
existingSecret: ""
|
||||||
|
|
||||||
|
## Sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
|
||||||
|
## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
|
||||||
|
sidecar:
|
||||||
|
image: kiwigrid/k8s-sidecar:1.12.2
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
resources:
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 100Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 50m
|
||||||
|
# memory: 50Mi
|
||||||
|
dashboards:
|
||||||
|
enabled: false
|
||||||
|
# label that the configmaps with dashboards are marked with
|
||||||
|
label: grafana_dashboard
|
||||||
|
# folder in the pod that should hold the collected dashboards
|
||||||
|
folder: /tmp/dashboards
|
||||||
|
datasources:
|
||||||
|
enabled: false
|
||||||
|
# label that the configmaps with datasources are marked with
|
||||||
|
label: grafana_datasource
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
|
||||||
|
OWNERS
|
|
@ -0,0 +1,18 @@
|
||||||
|
apiVersion: v1
|
||||||
|
appVersion: 2.17.2
|
||||||
|
description: Prometheus is a monitoring system and time series database.
|
||||||
|
home: https://prometheus.io/
|
||||||
|
icon: https://raw.githubusercontent.com/prometheus/prometheus.github.io/master/assets/prometheus_logo-cb55bb5c346.png
|
||||||
|
maintainers:
|
||||||
|
- email: gianrubio@gmail.com
|
||||||
|
name: gianrubio
|
||||||
|
- email: zanhsieh@gmail.com
|
||||||
|
name: zanhsieh
|
||||||
|
name: prometheus
|
||||||
|
sources:
|
||||||
|
- https://github.com/prometheus/alertmanager
|
||||||
|
- https://github.com/prometheus/prometheus
|
||||||
|
- https://github.com/prometheus/pushgateway
|
||||||
|
- https://github.com/prometheus/node_exporter
|
||||||
|
- https://github.com/kubernetes/kube-state-metrics
|
||||||
|
version: 11.0.2
|
|
@ -0,0 +1,471 @@
|
||||||
|
# Prometheus
|
||||||
|
|
||||||
|
[Prometheus](https://prometheus.io/), a [Cloud Native Computing Foundation](https://cncf.io/) project, is a systems and service monitoring system. It collects metrics from configured targets at given intervals, evaluates rule expressions, displays the results, and can trigger alerts if some condition is observed to be true.
|
||||||
|
|
||||||
|
## TL;DR;
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install stable/prometheus
|
||||||
|
```
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This chart bootstraps a [Prometheus](https://prometheus.io/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Kubernetes 1.3+ with Beta APIs enabled
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
To install the chart with the release name `my-release`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install --name my-release stable/prometheus
|
||||||
|
```
|
||||||
|
|
||||||
|
The command deploys Prometheus on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||||
|
|
||||||
|
> **Tip**: List all releases using `helm list`
|
||||||
|
|
||||||
|
## Uninstalling the Chart
|
||||||
|
|
||||||
|
To uninstall/delete the `my-release` deployment:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm delete my-release
|
||||||
|
```
|
||||||
|
|
||||||
|
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||||
|
|
||||||
|
## Prometheus 2.x
|
||||||
|
|
||||||
|
Prometheus version 2.x has made changes to alertmanager, storage and recording rules. Check out the migration guide [here](https://prometheus.io/docs/prometheus/2.0/migration/)
|
||||||
|
|
||||||
|
Users of this chart will need to update their alerting rules to the new format before they can upgrade.
|
||||||
|
|
||||||
|
## Upgrading from previous chart versions.
|
||||||
|
|
||||||
|
Version 9.0 adds a new option to enable or disable the Prometheus Server.
|
||||||
|
This supports the use case of running a Prometheus server in one k8s cluster and scraping exporters in another cluster while using the same chart for each deployment.
|
||||||
|
To install the server `server.enabled` must be set to `true`.
|
||||||
|
|
||||||
|
As of version 5.0, this chart uses Prometheus 2.x. This version of prometheus introduces a new data format and is not compatible with prometheus 1.x. It is recommended to install this as a new release, as updating existing releases will not work. See the [prometheus docs](https://prometheus.io/docs/prometheus/latest/migration/#storage) for instructions on retaining your old data.
|
||||||
|
|
||||||
|
### Example migration
|
||||||
|
|
||||||
|
Assuming you have an existing release of the prometheus chart, named `prometheus-old`. In order to update to prometheus 2.x while keeping your old data do the following:
|
||||||
|
|
||||||
|
1. Update the `prometheus-old` release. Disable scraping on every component besides the prometheus server, similar to the configuration below:
|
||||||
|
|
||||||
|
```
|
||||||
|
alertmanager:
|
||||||
|
enabled: false
|
||||||
|
alertmanagerFiles:
|
||||||
|
alertmanager.yml: ""
|
||||||
|
kubeStateMetrics:
|
||||||
|
enabled: false
|
||||||
|
nodeExporter:
|
||||||
|
enabled: false
|
||||||
|
pushgateway:
|
||||||
|
enabled: false
|
||||||
|
server:
|
||||||
|
extraArgs:
|
||||||
|
storage.local.retention: 720h
|
||||||
|
serverFiles:
|
||||||
|
alerts: ""
|
||||||
|
prometheus.yml: ""
|
||||||
|
rules: ""
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Deploy a new release of the chart with version 5.0+ using prometheus 2.x. In the values.yaml set the scrape config as usual, and also add the `prometheus-old` instance as a remote-read target.
|
||||||
|
|
||||||
|
```
|
||||||
|
prometheus.yml:
|
||||||
|
...
|
||||||
|
remote_read:
|
||||||
|
- url: http://prometheus-old/api/v1/read
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Old data will be available when you query the new prometheus instance.
|
||||||
|
|
||||||
|
## Scraping Pod Metrics via Annotations
|
||||||
|
|
||||||
|
This chart uses a default configuration that causes prometheus
|
||||||
|
to scrape a variety of kubernetes resource types, provided they have the correct annotations.
|
||||||
|
In this section we describe how to configure pods to be scraped;
|
||||||
|
for information on how other resource types can be scraped you can
|
||||||
|
do a `helm template` to get the kubernetes resource definitions,
|
||||||
|
and then reference the prometheus configuration in the ConfigMap against the prometheus documentation
|
||||||
|
for [relabel_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config)
|
||||||
|
and [kubernetes_sd_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config).
|
||||||
|
|
||||||
|
In order to get prometheus to scrape pods, you must add annotations to the the pods as below:
|
||||||
|
|
||||||
|
```
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
prometheus.io/scrape: "true"
|
||||||
|
prometheus.io/path: /metrics
|
||||||
|
prometheus.io/port: "8080"
|
||||||
|
spec:
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
You should adjust `prometheus.io/path` based on the URL that your pod serves metrics from.
|
||||||
|
`prometheus.io/port` should be set to the port that your pod serves metrics from.
|
||||||
|
Note that the values for `prometheus.io/scrape` and `prometheus.io/port` must be
|
||||||
|
enclosed in double quotes.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
The following table lists the configurable parameters of the Prometheus chart and their default values.
|
||||||
|
|
||||||
|
Parameter | Description | Default
|
||||||
|
--------- | ----------- | -------
|
||||||
|
`alertmanager.enabled` | If true, create alertmanager | `true`
|
||||||
|
`alertmanager.name` | alertmanager container name | `alertmanager`
|
||||||
|
`alertmanager.image.repository` | alertmanager container image repository | `prom/alertmanager`
|
||||||
|
`alertmanager.image.tag` | alertmanager container image tag | `v0.20.0`
|
||||||
|
`alertmanager.image.pullPolicy` | alertmanager container image pull policy | `IfNotPresent`
|
||||||
|
`alertmanager.prefixURL` | The prefix slug at which the server can be accessed | ``
|
||||||
|
`alertmanager.baseURL` | The external url at which the server can be accessed | `"http://localhost:9093"`
|
||||||
|
`alertmanager.extraArgs` | Additional alertmanager container arguments | `{}`
|
||||||
|
`alertmanager.extraSecretMounts` | Additional alertmanager Secret mounts | `[]`
|
||||||
|
`alertmanager.configMapOverrideName` | Prometheus alertmanager ConfigMap override where full-name is `{{.Release.Name}}-{{.Values.alertmanager.configMapOverrideName}}` and setting this value will prevent the default alertmanager ConfigMap from being generated | `""`
|
||||||
|
`alertmanager.configFromSecret` | The name of a secret in the same kubernetes namespace which contains the Alertmanager config, setting this value will prevent the default alertmanager ConfigMap from being generated | `""`
|
||||||
|
`alertmanager.configFileName` | The configuration file name to be loaded to alertmanager. Must match the key within configuration loaded from ConfigMap/Secret. | `alertmanager.yml`
|
||||||
|
`alertmanager.ingress.enabled` | If true, alertmanager Ingress will be created | `false`
|
||||||
|
`alertmanager.ingress.annotations` | alertmanager Ingress annotations | `{}`
|
||||||
|
`alertmanager.ingress.extraLabels` | alertmanager Ingress additional labels | `{}`
|
||||||
|
`alertmanager.ingress.hosts` | alertmanager Ingress hostnames | `[]`
|
||||||
|
`alertmanager.ingress.extraPaths` | Ingress extra paths to prepend to every alertmanager host configuration. Useful when configuring [custom actions with AWS ALB Ingress Controller](https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/#actions) | `[]`
|
||||||
|
`alertmanager.ingress.tls` | alertmanager Ingress TLS configuration (YAML) | `[]`
|
||||||
|
`alertmanager.nodeSelector` | node labels for alertmanager pod assignment | `{}`
|
||||||
|
`alertmanager.tolerations` | node taints to tolerate (requires Kubernetes >=1.6) | `[]`
|
||||||
|
`alertmanager.affinity` | pod affinity | `{}`
|
||||||
|
`alertmanager.podDisruptionBudget.enabled` | If true, create a PodDisruptionBudget | `false`
|
||||||
|
`alertmanager.podDisruptionBudget.maxUnavailable` | Maximum unavailable instances in PDB | `1`
|
||||||
|
`alertmanager.schedulerName` | alertmanager alternate scheduler name | `nil`
|
||||||
|
`alertmanager.persistentVolume.enabled` | If true, alertmanager will create a Persistent Volume Claim | `true`
|
||||||
|
`alertmanager.persistentVolume.accessModes` | alertmanager data Persistent Volume access modes | `[ReadWriteOnce]`
|
||||||
|
`alertmanager.persistentVolume.annotations` | Annotations for alertmanager Persistent Volume Claim | `{}`
|
||||||
|
`alertmanager.persistentVolume.existingClaim` | alertmanager data Persistent Volume existing claim name | `""`
|
||||||
|
`alertmanager.persistentVolume.mountPath` | alertmanager data Persistent Volume mount root path | `/data`
|
||||||
|
`alertmanager.persistentVolume.size` | alertmanager data Persistent Volume size | `2Gi`
|
||||||
|
`alertmanager.persistentVolume.storageClass` | alertmanager data Persistent Volume Storage Class | `unset`
|
||||||
|
`alertmanager.persistentVolume.volumeBindingMode` | alertmanager data Persistent Volume Binding Mode | `unset`
|
||||||
|
`alertmanager.persistentVolume.subPath` | Subdirectory of alertmanager data Persistent Volume to mount | `""`
|
||||||
|
`alertmanager.podAnnotations` | annotations to be added to alertmanager pods | `{}`
|
||||||
|
`alertmanager.podLabels` | labels to be added to Prometheus AlertManager pods | `{}`
|
||||||
|
`alertmanager.podSecurityPolicy.annotations` | Specify pod annotations in the pod security policy | `{}` |
|
||||||
|
`alertmanager.replicaCount` | desired number of alertmanager pods | `1`
|
||||||
|
`alertmanager.statefulSet.enabled` | If true, use a statefulset instead of a deployment for pod management | `false`
|
||||||
|
`alertmanager.statefulSet.podManagementPolicy` | podManagementPolicy of alertmanager pods | `OrderedReady`
|
||||||
|
`alertmanager.statefulSet.headless.annotations` | annotations for alertmanager headless service | `{}`
|
||||||
|
`alertmanager.statefulSet.headless.labels` | labels for alertmanager headless service | `{}`
|
||||||
|
`alertmanager.statefulSet.headless.enableMeshPeer` | If true, enable the mesh peer endpoint for the headless service | `{}`
|
||||||
|
`alertmanager.statefulSet.headless.servicePort` | alertmanager headless service port | `80`
|
||||||
|
`alertmanager.priorityClassName` | alertmanager priorityClassName | `nil`
|
||||||
|
`alertmanager.resources` | alertmanager pod resource requests & limits | `{}`
|
||||||
|
`alertmanager.securityContext` | Custom [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) for Alert Manager containers | `{}`
|
||||||
|
`alertmanager.service.annotations` | annotations for alertmanager service | `{}`
|
||||||
|
`alertmanager.service.clusterIP` | internal alertmanager cluster service IP | `""`
|
||||||
|
`alertmanager.service.externalIPs` | alertmanager service external IP addresses | `[]`
|
||||||
|
`alertmanager.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""`
|
||||||
|
`alertmanager.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]`
|
||||||
|
`alertmanager.service.servicePort` | alertmanager service port | `80`
|
||||||
|
`alertmanager.service.sessionAffinity` | Session Affinity for alertmanager service, can be `None` or `ClientIP` | `None`
|
||||||
|
`alertmanager.service.type` | type of alertmanager service to create | `ClusterIP`
|
||||||
|
`alertmanager.strategy` | Deployment strategy | `{ "type": "RollingUpdate" }`
|
||||||
|
`alertmanagerFiles.alertmanager.yml` | Prometheus alertmanager configuration | example configuration
|
||||||
|
`configmapReload.prometheus.enabled` | If false, the configmap-reload container for Prometheus will not be deployed | `true`
|
||||||
|
`configmapReload.prometheus.name` | configmap-reload container name | `configmap-reload`
|
||||||
|
`configmapReload.prometheus.image.repository` | configmap-reload container image repository | `jimmidyson/configmap-reload`
|
||||||
|
`configmapReload.prometheus.image.tag` | configmap-reload container image tag | `v0.3.0`
|
||||||
|
`configmapReload.prometheus.image.pullPolicy` | configmap-reload container image pull policy | `IfNotPresent`
|
||||||
|
`configmapReload.prometheus.extraArgs` | Additional configmap-reload container arguments | `{}`
|
||||||
|
`configmapReload.prometheus.extraVolumeDirs` | Additional configmap-reload volume directories | `{}`
|
||||||
|
`configmapReload.prometheus.extraConfigmapMounts` | Additional configmap-reload configMap mounts | `[]`
|
||||||
|
`configmapReload.prometheus.resources` | configmap-reload pod resource requests & limits | `{}`
|
||||||
|
`configmapReload.alertmanager.enabled` | If false, the configmap-reload container for AlertManager will not be deployed | `true`
|
||||||
|
`configmapReload.alertmanager.name` | configmap-reload container name | `configmap-reload`
|
||||||
|
`configmapReload.alertmanager.image.repository` | configmap-reload container image repository | `jimmidyson/configmap-reload`
|
||||||
|
`configmapReload.alertmanager.image.tag` | configmap-reload container image tag | `v0.3.0`
|
||||||
|
`configmapReload.alertmanager.image.pullPolicy` | configmap-reload container image pull policy | `IfNotPresent`
|
||||||
|
`configmapReload.alertmanager.extraArgs` | Additional configmap-reload container arguments | `{}`
|
||||||
|
`configmapReload.alertmanager.extraVolumeDirs` | Additional configmap-reload volume directories | `{}`
|
||||||
|
`configmapReload.alertmanager.extraConfigmapMounts` | Additional configmap-reload configMap mounts | `[]`
|
||||||
|
`configmapReload.alertmanager.resources` | configmap-reload pod resource requests & limits | `{}`
|
||||||
|
`initChownData.enabled` | If false, don't reset data ownership at startup | true
|
||||||
|
`initChownData.name` | init-chown-data container name | `init-chown-data`
|
||||||
|
`initChownData.image.repository` | init-chown-data container image repository | `busybox`
|
||||||
|
`initChownData.image.tag` | init-chown-data container image tag | `latest`
|
||||||
|
`initChownData.image.pullPolicy` | init-chown-data container image pull policy | `IfNotPresent`
|
||||||
|
`initChownData.resources` | init-chown-data pod resource requests & limits | `{}`
|
||||||
|
`kubeStateMetrics.enabled` | If true, create kube-state-metrics sub-chart, see the [kube-state-metrics chart for configuration options](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) | `true`
|
||||||
|
`nodeExporter.enabled` | If true, create node-exporter | `true`
|
||||||
|
`nodeExporter.name` | node-exporter container name | `node-exporter`
|
||||||
|
`nodeExporter.image.repository` | node-exporter container image repository| `prom/node-exporter`
|
||||||
|
`nodeExporter.image.tag` | node-exporter container image tag | `v0.18.1`
|
||||||
|
`nodeExporter.image.pullPolicy` | node-exporter container image pull policy | `IfNotPresent`
|
||||||
|
`nodeExporter.extraArgs` | Additional node-exporter container arguments | `{}`
|
||||||
|
`nodeExporter.extraHostPathMounts` | Additional node-exporter hostPath mounts | `[]`
|
||||||
|
`nodeExporter.extraConfigmapMounts` | Additional node-exporter configMap mounts | `[]`
|
||||||
|
`nodeExporter.hostNetwork` | If true, node-exporter pods share the host network namespace | `true`
|
||||||
|
`nodeExporter.hostPID` | If true, node-exporter pods share the host PID namespace | `true`
|
||||||
|
`nodeExporter.nodeSelector` | node labels for node-exporter pod assignment | `{}`
|
||||||
|
`nodeExporter.podAnnotations` | annotations to be added to node-exporter pods | `{}`
|
||||||
|
`nodeExporter.pod.labels` | labels to be added to node-exporter pods | `{}`
|
||||||
|
`nodeExporter.podDisruptionBudget.enabled` | If true, create a PodDisruptionBudget | `false`
|
||||||
|
`nodeExporter.podDisruptionBudget.maxUnavailable` | Maximum unavailable instances in PDB | `1`
|
||||||
|
`nodeExporter.podSecurityPolicy.annotations` | Specify pod annotations in the pod security policy | `{}` |
|
||||||
|
`nodeExporter.podSecurityPolicy.enabled` | Specify if a Pod Security Policy for node-exporter must be created | `false`
|
||||||
|
`nodeExporter.tolerations` | node taints to tolerate (requires Kubernetes >=1.6) | `[]`
|
||||||
|
`nodeExporter.priorityClassName` | node-exporter priorityClassName | `nil`
|
||||||
|
`nodeExporter.resources` | node-exporter resource requests and limits (YAML) | `{}`
|
||||||
|
`nodeExporter.securityContext` | securityContext for containers in pod | `{}`
|
||||||
|
`nodeExporter.service.annotations` | annotations for node-exporter service | `{prometheus.io/scrape: "true"}`
|
||||||
|
`nodeExporter.service.clusterIP` | internal node-exporter cluster service IP | `None`
|
||||||
|
`nodeExporter.service.externalIPs` | node-exporter service external IP addresses | `[]`
|
||||||
|
`nodeExporter.service.hostPort` | node-exporter service host port | `9100`
|
||||||
|
`nodeExporter.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""`
|
||||||
|
`nodeExporter.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]`
|
||||||
|
`nodeExporter.service.servicePort` | node-exporter service port | `9100`
|
||||||
|
`nodeExporter.service.type` | type of node-exporter service to create | `ClusterIP`
|
||||||
|
`podSecurityPolicy.enabled` | If true, create & use pod security policies resources | `false`
|
||||||
|
`pushgateway.enabled` | If true, create pushgateway | `true`
|
||||||
|
`pushgateway.name` | pushgateway container name | `pushgateway`
|
||||||
|
`pushgateway.image.repository` | pushgateway container image repository | `prom/pushgateway`
|
||||||
|
`pushgateway.image.tag` | pushgateway container image tag | `v1.0.1`
|
||||||
|
`pushgateway.image.pullPolicy` | pushgateway container image pull policy | `IfNotPresent`
|
||||||
|
`pushgateway.extraArgs` | Additional pushgateway container arguments | `{}`
|
||||||
|
`pushgateway.ingress.enabled` | If true, pushgateway Ingress will be created | `false`
|
||||||
|
`pushgateway.ingress.annotations` | pushgateway Ingress annotations | `{}`
|
||||||
|
`pushgateway.ingress.hosts` | pushgateway Ingress hostnames | `[]`
|
||||||
|
`pushgateway.ingress.extraPaths` | Ingress extra paths to prepend to every pushgateway host configuration. Useful when configuring [custom actions with AWS ALB Ingress Controller](https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/#actions) | `[]`
|
||||||
|
`pushgateway.ingress.tls` | pushgateway Ingress TLS configuration (YAML) | `[]`
|
||||||
|
`pushgateway.nodeSelector` | node labels for pushgateway pod assignment | `{}`
|
||||||
|
`pushgateway.podAnnotations` | annotations to be added to pushgateway pods | `{}`
|
||||||
|
`pushgateway.podSecurityPolicy.annotations` | Specify pod annotations in the pod security policy | `{}` |
|
||||||
|
`pushgateway.tolerations` | node taints to tolerate (requires Kubernetes >=1.6) | `[]`
|
||||||
|
`pushgateway.replicaCount` | desired number of pushgateway pods | `1`
|
||||||
|
`pushgateway.podDisruptionBudget.enabled` | If true, create a PodDisruptionBudget | `false`
|
||||||
|
`pushgateway.podDisruptionBudget.maxUnavailable` | Maximum unavailable instances in PDB | `1`
|
||||||
|
`pushgateway.schedulerName` | pushgateway alternate scheduler name | `nil`
|
||||||
|
`pushgateway.persistentVolume.enabled` | If true, Prometheus pushgateway will create a Persistent Volume Claim | `false`
|
||||||
|
`pushgateway.persistentVolume.accessModes` | Prometheus pushgateway data Persistent Volume access modes | `[ReadWriteOnce]`
|
||||||
|
`pushgateway.persistentVolume.annotations` | Prometheus pushgateway data Persistent Volume annotations | `{}`
|
||||||
|
`pushgateway.persistentVolume.existingClaim` | Prometheus pushgateway data Persistent Volume existing claim name | `""`
|
||||||
|
`pushgateway.persistentVolume.mountPath` | Prometheus pushgateway data Persistent Volume mount root path | `/data`
|
||||||
|
`pushgateway.persistentVolume.size` | Prometheus pushgateway data Persistent Volume size | `2Gi`
|
||||||
|
`pushgateway.persistentVolume.storageClass` | Prometheus pushgateway data Persistent Volume Storage Class | `unset`
|
||||||
|
`pushgateway.persistentVolume.volumeBindingMode` | Prometheus pushgateway data Persistent Volume Binding Mode | `unset`
|
||||||
|
`pushgateway.persistentVolume.subPath` | Subdirectory of Prometheus server data Persistent Volume to mount | `""`
|
||||||
|
`pushgateway.priorityClassName` | pushgateway priorityClassName | `nil`
|
||||||
|
`pushgateway.resources` | pushgateway pod resource requests & limits | `{}`
|
||||||
|
`pushgateway.service.annotations` | annotations for pushgateway service | `{}`
|
||||||
|
`pushgateway.service.clusterIP` | internal pushgateway cluster service IP | `""`
|
||||||
|
`pushgateway.service.externalIPs` | pushgateway service external IP addresses | `[]`
|
||||||
|
`pushgateway.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""`
|
||||||
|
`pushgateway.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]`
|
||||||
|
`pushgateway.service.servicePort` | pushgateway service port | `9091`
|
||||||
|
`pushgateway.service.type` | type of pushgateway service to create | `ClusterIP`
|
||||||
|
`pushgateway.strategy` | Deployment strategy | `{ "type": "RollingUpdate" }`
|
||||||
|
`rbac.create` | If true, create & use RBAC resources | `true`
|
||||||
|
`server.enabled` | If false, Prometheus server will not be created | `true`
|
||||||
|
`server.name` | Prometheus server container name | `server`
|
||||||
|
`server.image.repository` | Prometheus server container image repository | `prom/prometheus`
|
||||||
|
`server.image.tag` | Prometheus server container image tag | `v2.16.0`
|
||||||
|
`server.image.pullPolicy` | Prometheus server container image pull policy | `IfNotPresent`
|
||||||
|
`server.configPath` | Path to a prometheus server config file on the container FS | `/etc/config/prometheus.yml`
|
||||||
|
`server.global.scrape_interval` | How frequently to scrape targets by default | `1m`
|
||||||
|
`server.global.scrape_timeout` | How long until a scrape request times out | `10s`
|
||||||
|
`server.global.evaluation_interval` | How frequently to evaluate rules | `1m`
|
||||||
|
`server.remoteWrite` | The remote write feature of Prometheus allow transparently sending samples. | `{}`
|
||||||
|
`server.remoteRead` | The remote read feature of Prometheus allow transparently receiving samples. | `{}`
|
||||||
|
`server.extraArgs` | Additional Prometheus server container arguments | `{}`
|
||||||
|
`server.extraFlags` | Additional Prometheus server container flags | `["web.enable-lifecycle"]`
|
||||||
|
`server.extraInitContainers` | Init containers to launch alongside the server | `[]`
|
||||||
|
`server.prefixURL` | The prefix slug at which the server can be accessed | ``
|
||||||
|
`server.baseURL` | The external url at which the server can be accessed | ``
|
||||||
|
`server.env` | Prometheus server environment variables | `[]`
|
||||||
|
`server.extraHostPathMounts` | Additional Prometheus server hostPath mounts | `[]`
|
||||||
|
`server.extraConfigmapMounts` | Additional Prometheus server configMap mounts | `[]`
|
||||||
|
`server.extraSecretMounts` | Additional Prometheus server Secret mounts | `[]`
|
||||||
|
`server.extraVolumeMounts` | Additional Prometheus server Volume mounts | `[]`
|
||||||
|
`server.extraVolumes` | Additional Prometheus server Volumes | `[]`
|
||||||
|
`server.configMapOverrideName` | Prometheus server ConfigMap override where full-name is `{{.Release.Name}}-{{.Values.server.configMapOverrideName}}` and setting this value will prevent the default server ConfigMap from being generated | `""`
|
||||||
|
`server.ingress.enabled` | If true, Prometheus server Ingress will be created | `false`
|
||||||
|
`server.ingress.annotations` | Prometheus server Ingress annotations | `[]`
|
||||||
|
`server.ingress.extraLabels` | Prometheus server Ingress additional labels | `{}`
|
||||||
|
`server.ingress.hosts` | Prometheus server Ingress hostnames | `[]`
|
||||||
|
`server.ingress.extraPaths` | Ingress extra paths to prepend to every Prometheus server host configuration. Useful when configuring [custom actions with AWS ALB Ingress Controller](https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/#actions) | `[]`
|
||||||
|
`server.ingress.tls` | Prometheus server Ingress TLS configuration (YAML) | `[]`
|
||||||
|
`server.nodeSelector` | node labels for Prometheus server pod assignment | `{}`
|
||||||
|
`server.tolerations` | node taints to tolerate (requires Kubernetes >=1.6) | `[]`
|
||||||
|
`server.affinity` | pod affinity | `{}`
|
||||||
|
`server.podDisruptionBudget.enabled` | If true, create a PodDisruptionBudget | `false`
|
||||||
|
`server.podDisruptionBudget.maxUnavailable` | Maximum unavailable instances in PDB | `1`
|
||||||
|
`server.priorityClassName` | Prometheus server priorityClassName | `nil`
|
||||||
|
`server.schedulerName` | Prometheus server alternate scheduler name | `nil`
|
||||||
|
`server.persistentVolume.enabled` | If true, Prometheus server will create a Persistent Volume Claim | `true`
|
||||||
|
`server.persistentVolume.accessModes` | Prometheus server data Persistent Volume access modes | `[ReadWriteOnce]`
|
||||||
|
`server.persistentVolume.annotations` | Prometheus server data Persistent Volume annotations | `{}`
|
||||||
|
`server.persistentVolume.existingClaim` | Prometheus server data Persistent Volume existing claim name | `""`
|
||||||
|
`server.persistentVolume.mountPath` | Prometheus server data Persistent Volume mount root path | `/data`
|
||||||
|
`server.persistentVolume.size` | Prometheus server data Persistent Volume size | `8Gi`
|
||||||
|
`server.persistentVolume.storageClass` | Prometheus server data Persistent Volume Storage Class | `unset`
|
||||||
|
`server.persistentVolume.volumeBindingMode` | Prometheus server data Persistent Volume Binding Mode | `unset`
|
||||||
|
`server.persistentVolume.subPath` | Subdirectory of Prometheus server data Persistent Volume to mount | `""`
|
||||||
|
`server.emptyDir.sizeLimit` | emptyDir sizeLimit if a Persistent Volume is not used | `""`
|
||||||
|
`server.podAnnotations` | annotations to be added to Prometheus server pods | `{}`
|
||||||
|
`server.podLabels` | labels to be added to Prometheus server pods | `{}`
|
||||||
|
`server.alertmanagers` | Prometheus AlertManager configuration for the Prometheus server | `{}`
|
||||||
|
`server.deploymentAnnotations` | annotations to be added to Prometheus server deployment | `{}`
|
||||||
|
`server.podSecurityPolicy.annotations` | Specify pod annotations in the pod security policy | `{}` |
|
||||||
|
`server.replicaCount` | desired number of Prometheus server pods | `1`
|
||||||
|
`server.statefulSet.enabled` | If true, use a statefulset instead of a deployment for pod management | `false`
|
||||||
|
`server.statefulSet.annotations` | annotations to be added to Prometheus server stateful set | `{}`
|
||||||
|
`server.statefulSet.labels` | labels to be added to Prometheus server stateful set | `{}`
|
||||||
|
`server.statefulSet.podManagementPolicy` | podManagementPolicy of server pods | `OrderedReady`
|
||||||
|
`server.statefulSet.headless.annotations` | annotations for Prometheus server headless service | `{}`
|
||||||
|
`server.statefulSet.headless.labels` | labels for Prometheus server headless service | `{}`
|
||||||
|
`server.statefulSet.headless.servicePort` | Prometheus server headless service port | `80`
|
||||||
|
`server.resources` | Prometheus server resource requests and limits | `{}`
|
||||||
|
`server.verticalAutoscaler.enabled` | If true a VPA object will be created for the controller (either StatefulSet or Deployemnt, based on above configs) | `false`
|
||||||
|
`server.securityContext` | Custom [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) for server containers | `{}`
|
||||||
|
`server.service.annotations` | annotations for Prometheus server service | `{}`
|
||||||
|
`server.service.clusterIP` | internal Prometheus server cluster service IP | `""`
|
||||||
|
`server.service.externalIPs` | Prometheus server service external IP addresses | `[]`
|
||||||
|
`server.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""`
|
||||||
|
`server.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]`
|
||||||
|
`server.service.nodePort` | Port to be used as the service NodePort (ignored if `server.service.type` is not `NodePort`) | `0`
|
||||||
|
`server.service.servicePort` | Prometheus server service port | `80`
|
||||||
|
`server.service.sessionAffinity` | Session Affinity for server service, can be `None` or `ClientIP` | `None`
|
||||||
|
`server.service.type` | type of Prometheus server service to create | `ClusterIP`
|
||||||
|
`server.service.gRPC.enabled` | If true, open a second port on the service for gRPC | `false`
|
||||||
|
`server.service.gRPC.servicePort` | Prometheus service gRPC port, (ignored if `server.service.gRPC.enabled` is not `true`) | `10901`
|
||||||
|
`server.service.gRPC.nodePort` | Port to be used as gRPC nodePort in the prometheus service | `0`
|
||||||
|
`server.service.statefulsetReplica.enabled` | If true, send the traffic from the service to only one replica of the replicaset | `false`
|
||||||
|
`server.service.statefulsetReplica.replica` | Which replica to send the traffice to | `0`
|
||||||
|
`server.sidecarContainers` | array of snippets with your sidecar containers for prometheus server | `""`
|
||||||
|
`server.strategy` | Deployment strategy | `{ "type": "RollingUpdate" }`
|
||||||
|
`serviceAccounts.alertmanager.create` | If true, create the alertmanager service account | `true`
|
||||||
|
`serviceAccounts.alertmanager.name` | name of the alertmanager service account to use or create | `{{ prometheus.alertmanager.fullname }}`
|
||||||
|
`serviceAccounts.kubeStateMetrics.create` | If true, create the kubeStateMetrics service account | `true`
|
||||||
|
`serviceAccounts.kubeStateMetrics.name` | name of the kubeStateMetrics service account to use or create | `{{ prometheus.kubeStateMetrics.fullname }}`
|
||||||
|
`serviceAccounts.nodeExporter.create` | If true, create the nodeExporter service account | `true`
|
||||||
|
`serviceAccounts.nodeExporter.name` | name of the nodeExporter service account to use or create | `{{ prometheus.nodeExporter.fullname }}`
|
||||||
|
`serviceAccounts.pushgateway.create` | If true, create the pushgateway service account | `true`
|
||||||
|
`serviceAccounts.pushgateway.name` | name of the pushgateway service account to use or create | `{{ prometheus.pushgateway.fullname }}`
|
||||||
|
`serviceAccounts.server.create` | If true, create the server service account | `true`
|
||||||
|
`serviceAccounts.server.name` | name of the server service account to use or create | `{{ prometheus.server.fullname }}`
|
||||||
|
`server.terminationGracePeriodSeconds` | Prometheus server Pod termination grace period | `300`
|
||||||
|
`server.retention` | (optional) Prometheus data retention | `"15d"`
|
||||||
|
`serverFiles.alerts` | (Deprecated) Prometheus server alerts configuration | `{}`
|
||||||
|
`serverFiles.rules` | (Deprecated) Prometheus server rules configuration | `{}`
|
||||||
|
`serverFiles.alerting_rules.yml` | Prometheus server alerts configuration | `{}`
|
||||||
|
`serverFiles.recording_rules.yml` | Prometheus server rules configuration | `{}`
|
||||||
|
`serverFiles.prometheus.yml` | Prometheus server scrape configuration | example configuration
|
||||||
|
`extraScrapeConfigs` | Prometheus server additional scrape configuration | ""
|
||||||
|
`alertRelabelConfigs` | Prometheus server [alert relabeling configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#alert_relabel_configs) for H/A prometheus | ""
|
||||||
|
`networkPolicy.enabled` | Enable NetworkPolicy | `false` |
|
||||||
|
|
||||||
|
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install stable/prometheus --name my-release \
|
||||||
|
--set server.terminationGracePeriodSeconds=360
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install stable/prometheus --name my-release -f values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||||
|
|
||||||
|
Note that you have multiple yaml files. This is particularly useful when you have alerts belonging to multiple services in the cluster. For example,
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# values.yaml
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# service1-alert.yaml
|
||||||
|
serverFiles:
|
||||||
|
alerts:
|
||||||
|
service1:
|
||||||
|
- alert: anAlert
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# service2-alert.yaml
|
||||||
|
serverFiles:
|
||||||
|
alerts:
|
||||||
|
service2:
|
||||||
|
- alert: anAlert
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm install stable/prometheus --name my-release -f values.yaml -f service1-alert.yaml -f service2-alert.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### RBAC Configuration
|
||||||
|
Roles and RoleBindings resources will be created automatically for `server` and `kubeStateMetrics` services.
|
||||||
|
|
||||||
|
To manually setup RBAC you need to set the parameter `rbac.create=false` and specify the service account to be used for each service by setting the parameters: `serviceAccounts.{{ component }}.create` to `false` and `serviceAccounts.{{ component }}.name` to the name of a pre-existing service account.
|
||||||
|
|
||||||
|
> **Tip**: You can refer to the default `*-clusterrole.yaml` and `*-clusterrolebinding.yaml` files in [templates](templates/) to customize your own.
|
||||||
|
|
||||||
|
### ConfigMap Files
|
||||||
|
AlertManager is configured through [alertmanager.yml](https://prometheus.io/docs/alerting/configuration/). This file (and any others listed in `alertmanagerFiles`) will be mounted into the `alertmanager` pod.
|
||||||
|
|
||||||
|
Prometheus is configured through [prometheus.yml](https://prometheus.io/docs/operating/configuration/). This file (and any others listed in `serverFiles`) will be mounted into the `server` pod.
|
||||||
|
|
||||||
|
### Ingress TLS
|
||||||
|
If your cluster allows automatic creation/retrieval of TLS certificates (e.g. [kube-lego](https://github.com/jetstack/kube-lego)), please refer to the documentation for that mechanism.
|
||||||
|
|
||||||
|
To manually configure TLS, first create/retrieve a key & certificate pair for the address(es) you wish to protect. Then create a TLS secret in the namespace:
|
||||||
|
|
||||||
|
```console
|
||||||
|
kubectl create secret tls prometheus-server-tls --cert=path/to/tls.cert --key=path/to/tls.key
|
||||||
|
```
|
||||||
|
|
||||||
|
Include the secret's name, along with the desired hostnames, in the alertmanager/server Ingress TLS section of your custom `values.yaml` file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
server:
|
||||||
|
ingress:
|
||||||
|
## If true, Prometheus server Ingress will be created
|
||||||
|
##
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
## Prometheus server Ingress hostnames
|
||||||
|
## Must be provided if Ingress is enabled
|
||||||
|
##
|
||||||
|
hosts:
|
||||||
|
- prometheus.domain.com
|
||||||
|
|
||||||
|
## Prometheus server Ingress TLS configuration
|
||||||
|
## Secrets must be manually created in the namespace
|
||||||
|
##
|
||||||
|
tls:
|
||||||
|
- secretName: prometheus-server-tls
|
||||||
|
hosts:
|
||||||
|
- prometheus.domain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### NetworkPolicy
|
||||||
|
|
||||||
|
Enabling Network Policy for Prometheus will secure connections to Alert Manager
|
||||||
|
and Kube State Metrics by only accepting connections from Prometheus Server.
|
||||||
|
All inbound connections to Prometheus Server are still allowed.
|
||||||
|
|
||||||
|
To enable network policy for Prometheus, install a networking plugin that
|
||||||
|
implements the Kubernetes NetworkPolicy spec, and set `networkPolicy.enabled` to true.
|
||||||
|
|
||||||
|
If NetworkPolicy is enabled for Prometheus' scrape targets, you may also need
|
||||||
|
to manually create a networkpolicy which allows it.
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
|
@ -0,0 +1,20 @@
|
||||||
|
apiVersion: v1
|
||||||
|
appVersion: 1.9.5
|
||||||
|
description: Install kube-state-metrics to generate and expose cluster-level metrics
|
||||||
|
home: https://github.com/kubernetes/kube-state-metrics/
|
||||||
|
keywords:
|
||||||
|
- metric
|
||||||
|
- monitoring
|
||||||
|
- prometheus
|
||||||
|
- kubernetes
|
||||||
|
maintainers:
|
||||||
|
- email: jose@armesto.net
|
||||||
|
name: fiunchinho
|
||||||
|
- email: tariq.ibrahim@mulesoft.com
|
||||||
|
name: tariq1890
|
||||||
|
- email: manuel@rueg.eu
|
||||||
|
name: mrueg
|
||||||
|
name: kube-state-metrics
|
||||||
|
sources:
|
||||||
|
- https://github.com/kubernetes/kube-state-metrics/
|
||||||
|
version: 2.7.2
|
|
@ -0,0 +1,8 @@
|
||||||
|
approvers:
|
||||||
|
- fiunchinho
|
||||||
|
- tariq1890
|
||||||
|
- mrueg
|
||||||
|
reviewers:
|
||||||
|
- fiunchinho
|
||||||
|
- tariq1890
|
||||||
|
- mrueg
|
|
@ -0,0 +1,73 @@
|
||||||
|
# kube-state-metrics Helm Chart
|
||||||
|
|
||||||
|
* Installs the [kube-state-metrics agent](https://github.com/kubernetes/kube-state-metrics).
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
To install the chart with the release name `my-release`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ helm install stable/kube-state-metrics
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|:---------------------------------------------|:--------------------------------------------------------------------------------------|:-------------------------------------------|
|
||||||
|
| `image.repository` | The image repository to pull from | quay.io/coreos/kube-state-metrics |
|
||||||
|
| `image.tag` | The image tag to pull from | `v1.9.5` |
|
||||||
|
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||||
|
| `replicas` | Number of replicas | `1` |
|
||||||
|
| `autosharding.enabled` | Set to `true` to automatically shard data across `replicas` pods. EXPERIMENTAL | `false` |
|
||||||
|
| `service.port` | The port of the container | `8080` |
|
||||||
|
| `service.annotations` | Annotations to be added to the service | `{}` |
|
||||||
|
| `customLabels` | Custom labels to apply to service, deployment and pods | `{}` |
|
||||||
|
| `hostNetwork` | Whether or not to use the host network | `false` |
|
||||||
|
| `prometheusScrape` | Whether or not enable prom scrape | `true` |
|
||||||
|
| `rbac.create` | If true, create & use RBAC resources | `true` |
|
||||||
|
| `serviceAccount.create` | If true, create & use serviceAccount | `true` |
|
||||||
|
| `serviceAccount.name` | If not set & create is true, use template fullname | |
|
||||||
|
| `serviceAccount.imagePullSecrets` | Specify image pull secrets field | `[]` |
|
||||||
|
| `podSecurityPolicy.enabled` | If true, create & use PodSecurityPolicy resources | `false` |
|
||||||
|
| `podSecurityPolicy.annotations` | Specify pod annotations in the pod security policy | {} |
|
||||||
|
| `securityContext.enabled` | Enable security context | `true` |
|
||||||
|
| `securityContext.fsGroup` | Group ID for the container | `65534` |
|
||||||
|
| `securityContext.runAsUser` | User ID for the container | `65534` |
|
||||||
|
| `priorityClassName` | Name of Priority Class to assign pods | `nil` |
|
||||||
|
| `nodeSelector` | Node labels for pod assignment | {} |
|
||||||
|
| `affinity` | Affinity settings for pod assignment | {} |
|
||||||
|
| `tolerations` | Tolerations for pod assignment | [] |
|
||||||
|
| `podAnnotations` | Annotations to be added to the pod | {} |
|
||||||
|
| `resources` | kube-state-metrics resource requests and limits | {} |
|
||||||
|
| `collectors.certificatesigningrequests` | Enable the certificatesigningrequests collector. | `true` |
|
||||||
|
| `collectors.configmaps` | Enable the configmaps collector. | `true` |
|
||||||
|
| `collectors.cronjobs` | Enable the cronjobs collector. | `true` |
|
||||||
|
| `collectors.daemonsets` | Enable the daemonsets collector. | `true` |
|
||||||
|
| `collectors.deployments` | Enable the deployments collector. | `true` |
|
||||||
|
| `collectors.endpoints` | Enable the endpoints collector. | `true` |
|
||||||
|
| `collectors.horizontalpodautoscalers` | Enable the horizontalpodautoscalers collector. | `true` |
|
||||||
|
| `collectors.ingresses` | Enable the ingresses collector. | `true` |
|
||||||
|
| `collectors.jobs` | Enable the jobs collector. | `true` |
|
||||||
|
| `collectors.limitranges` | Enable the limitranges collector. | `true` |
|
||||||
|
| `collectors.mutatingwebhookconfigurations` | Enable the mutatingwebhookconfigurations collector. | `false` |
|
||||||
|
| `collectors.namespaces` | Enable the namespaces collector. | `true` |
|
||||||
|
| `collectors.nodes` | Enable the nodes collector. | `true` |
|
||||||
|
| `collectors.persistentvolumeclaims` | Enable the persistentvolumeclaims collector. | `true` |
|
||||||
|
| `collectors.persistentvolumes` | Enable the persistentvolumes collector. | `true` |
|
||||||
|
| `collectors.poddisruptionbudgets` | Enable the poddisruptionbudgets collector. | `true` |
|
||||||
|
| `collectors.pods` | Enable the pods collector. | `true` |
|
||||||
|
| `collectors.replicasets` | Enable the replicasets collector. | `true` |
|
||||||
|
| `collectors.replicationcontrollers` | Enable the replicationcontrollers collector. | `true` |
|
||||||
|
| `collectors.resourcequotas` | Enable the resourcequotas collector. | `true` |
|
||||||
|
| `collectors.secrets` | Enable the secrets collector. | `true` |
|
||||||
|
| `collectors.services` | Enable the services collector. | `true` |
|
||||||
|
| `collectors.statefulsets` | Enable the statefulsets collector. | `true` |
|
||||||
|
| `collectors.storageclasses` | Enable the storageclasses collector. | `true` |
|
||||||
|
| `collectors.validatingwebhookconfigurations` | Enable the validatingwebhookconfigurations collector. | `false` |
|
||||||
|
| `collectors.verticalpodautoscalers` | Enable the verticalpodautoscalers collector. | `false` |
|
||||||
|
| `collectors.volumeattachments` | Enable the volumeattachments collector. | `false` |
|
||||||
|
| `prometheus.monitor.enabled` | Set this to `true` to create ServiceMonitor for Prometheus operator | `false` |
|
||||||
|
| `prometheus.monitor.additionalLabels` | Additional labels that can be used so ServiceMonitor will be discovered by Prometheus | `{}` |
|
||||||
|
| `prometheus.monitor.namespace` | Namespace where servicemonitor resource should be created | `the same namespace as kube-state-metrics` |
|
||||||
|
| `prometheus.monitor.honorLabels` | Honor metric labels | `false` |
|
||||||
|
| `namespaceOverride` | Override the deployment namespace | `""` (`Release.Namespace`) |
|
|
@ -0,0 +1,10 @@
|
||||||
|
kube-state-metrics is a simple service that listens to the Kubernetes API server and generates metrics about the state of the objects.
|
||||||
|
The exposed metrics can be found here:
|
||||||
|
https://github.com/kubernetes/kube-state-metrics/blob/master/docs/README.md#exposed-metrics
|
||||||
|
|
||||||
|
The metrics are exported on the HTTP endpoint /metrics on the listening port.
|
||||||
|
In your case, {{ template "kube-state-metrics.fullname" . }}.{{ template "kube-state-metrics.namespace" . }}.svc.cluster.local:{{ .Values.service.port }}/metrics
|
||||||
|
|
||||||
|
They are served either as plaintext or protobuf depending on the Accept header.
|
||||||
|
They are designed to be consumed either by Prometheus itself or by a scraper that is compatible with scraping a Prometheus client endpoint.
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "kube-state-metrics.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "kube-state-metrics.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "kube-state-metrics.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
{{ default (include "kube-state-metrics.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Allow the release namespace to be overridden for multi-namespace deployments in combined charts
|
||||||
|
*/}}
|
||||||
|
{{- define "kube-state-metrics.namespace" -}}
|
||||||
|
{{- if .Values.namespaceOverride -}}
|
||||||
|
{{- .Values.namespaceOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- .Release.Namespace -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,182 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
rules:
|
||||||
|
{{ if .Values.collectors.certificatesigningrequests }}
|
||||||
|
- apiGroups: ["certificates.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- certificatesigningrequests
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.configmaps }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- configmaps
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.cronjobs }}
|
||||||
|
- apiGroups: ["batch"]
|
||||||
|
resources:
|
||||||
|
- cronjobs
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.daemonsets }}
|
||||||
|
- apiGroups: ["extensions", "apps"]
|
||||||
|
resources:
|
||||||
|
- daemonsets
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.deployments }}
|
||||||
|
- apiGroups: ["extensions", "apps"]
|
||||||
|
resources:
|
||||||
|
- deployments
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.endpoints }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- endpoints
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.horizontalpodautoscalers }}
|
||||||
|
- apiGroups: ["autoscaling"]
|
||||||
|
resources:
|
||||||
|
- horizontalpodautoscalers
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.ingresses }}
|
||||||
|
- apiGroups: ["extensions", "networking.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- ingresses
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.jobs }}
|
||||||
|
- apiGroups: ["batch"]
|
||||||
|
resources:
|
||||||
|
- jobs
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.limitranges }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- limitranges
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.mutatingwebhookconfigurations }}
|
||||||
|
- apiGroups: ["admissionregistration.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- mutatingwebhookconfigurations
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.namespaces }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.networkpolicies }}
|
||||||
|
- apiGroups: ["networking.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- networkpolicies
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.nodes }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- nodes
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.persistentvolumeclaims }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- persistentvolumeclaims
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.persistentvolumes }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- persistentvolumes
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.poddisruptionbudgets }}
|
||||||
|
- apiGroups: ["policy"]
|
||||||
|
resources:
|
||||||
|
- poddisruptionbudgets
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.pods }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- pods
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.replicasets }}
|
||||||
|
- apiGroups: ["extensions", "apps"]
|
||||||
|
resources:
|
||||||
|
- replicasets
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.replicationcontrollers }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- replicationcontrollers
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.resourcequotas }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- resourcequotas
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.secrets }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- secrets
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.services }}
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources:
|
||||||
|
- services
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.statefulsets }}
|
||||||
|
- apiGroups: ["apps"]
|
||||||
|
resources:
|
||||||
|
- statefulsets
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.storageclasses }}
|
||||||
|
- apiGroups: ["storage.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- storageclasses
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.validatingwebhookconfigurations }}
|
||||||
|
- apiGroups: ["admissionregistration.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- validatingwebhookconfigurations
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.volumeattachments }}
|
||||||
|
- apiGroups: ["storage.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- volumeattachments
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{ if .Values.collectors.verticalpodautoscalers }}
|
||||||
|
- apiGroups: ["autoscaling.k8s.io"]
|
||||||
|
resources:
|
||||||
|
- verticalpodautoscalers
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
{{ end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{{ if (.Values.enabled | default true) }}
|
||||||
|
{{- if .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,192 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
{{- if .Values.autosharding.enabled }}
|
||||||
|
kind: StatefulSet
|
||||||
|
{{- else }}
|
||||||
|
kind: Deployment
|
||||||
|
{{- end }}
|
||||||
|
metadata:
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||||
|
app.kubernetes.io/instance: "{{ .Release.Name }}"
|
||||||
|
app.kubernetes.io/managed-by: "{{ .Release.Service }}"
|
||||||
|
{{- if .Values.customLabels }}
|
||||||
|
{{ toYaml .Values.customLabels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
replicas: {{ .Values.replicas }}
|
||||||
|
{{- if .Values.autosharding.enabled }}
|
||||||
|
serviceName: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
volumeClaimTemplates: []
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
app.kubernetes.io/instance: "{{ .Release.Name }}"
|
||||||
|
{{- if .Values.customLabels }}
|
||||||
|
{{ toYaml .Values.customLabels | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
hostNetwork: {{ .Values.hostNetwork }}
|
||||||
|
serviceAccountName: {{ template "kube-state-metrics.serviceAccountName" . }}
|
||||||
|
{{- if .Values.securityContext.enabled }}
|
||||||
|
securityContext:
|
||||||
|
fsGroup: {{ .Values.securityContext.fsGroup }}
|
||||||
|
runAsUser: {{ .Values.securityContext.runAsUser }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.priorityClassName }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
{{- if .Values.autosharding.enabled }}
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
{{ if .Values.collectors.certificatesigningrequests }}
|
||||||
|
- --collectors=certificatesigningrequests
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.configmaps }}
|
||||||
|
- --collectors=configmaps
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.cronjobs }}
|
||||||
|
- --collectors=cronjobs
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.daemonsets }}
|
||||||
|
- --collectors=daemonsets
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.deployments }}
|
||||||
|
- --collectors=deployments
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.endpoints }}
|
||||||
|
- --collectors=endpoints
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.horizontalpodautoscalers }}
|
||||||
|
- --collectors=horizontalpodautoscalers
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.ingresses }}
|
||||||
|
- --collectors=ingresses
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.jobs }}
|
||||||
|
- --collectors=jobs
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.limitranges }}
|
||||||
|
- --collectors=limitranges
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.mutatingwebhookconfigurations }}
|
||||||
|
- --collectors=mutatingwebhookconfigurations
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.namespaces }}
|
||||||
|
- --collectors=namespaces
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.networkpolicies }}
|
||||||
|
- --collectors=networkpolicies
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.nodes }}
|
||||||
|
- --collectors=nodes
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.persistentvolumeclaims }}
|
||||||
|
- --collectors=persistentvolumeclaims
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.persistentvolumes }}
|
||||||
|
- --collectors=persistentvolumes
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.poddisruptionbudgets }}
|
||||||
|
- --collectors=poddisruptionbudgets
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.pods }}
|
||||||
|
- --collectors=pods
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.replicasets }}
|
||||||
|
- --collectors=replicasets
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.replicationcontrollers }}
|
||||||
|
- --collectors=replicationcontrollers
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.resourcequotas }}
|
||||||
|
- --collectors=resourcequotas
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.secrets }}
|
||||||
|
- --collectors=secrets
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.services }}
|
||||||
|
- --collectors=services
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.statefulsets }}
|
||||||
|
- --collectors=statefulsets
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.storageclasses }}
|
||||||
|
- --collectors=storageclasses
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.validatingwebhookconfigurations }}
|
||||||
|
- --collectors=validatingwebhookconfigurations
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.verticalpodautoscalers }}
|
||||||
|
- --collectors=verticalpodautoscalers
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.collectors.volumeattachments }}
|
||||||
|
- --collectors=volumeattachments
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.namespace }}
|
||||||
|
- --namespace={{ .Values.namespace }}
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Values.autosharding.enabled }}
|
||||||
|
- --pod=$(POD_NAME)
|
||||||
|
- --pod-namespace=$(POD_NAMESPACE)
|
||||||
|
{{ end }}
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /healthz
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
timeoutSeconds: 5
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
timeoutSeconds: 5
|
||||||
|
{{- if .Values.resources }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.resources | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,41 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Values.podSecurityPolicy.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.podSecurityPolicy.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
volumes:
|
||||||
|
- 'secret'
|
||||||
|
hostNetwork: false
|
||||||
|
hostIPC: false
|
||||||
|
hostPID: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'MustRunAsNonRoot'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
fsGroup:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if and .Values.podSecurityPolicy.enabled -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
name: psp-{{ template "kube-state-metrics.fullname" . }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['extensions']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{{ if (.Values.enabled | default true) }}
|
||||||
|
{{- if and .Values.podSecurityPolicy.enabled -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
name: psp-{{ template "kube-state-metrics.fullname" . }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: psp-{{ template "kube-state-metrics.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,38 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||||
|
app.kubernetes.io/instance: "{{ .Release.Name }}"
|
||||||
|
app.kubernetes.io/managed-by: "{{ .Release.Service }}"
|
||||||
|
{{- if .Values.customLabels }}
|
||||||
|
{{ toYaml .Values.customLabels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.prometheusScrape }}
|
||||||
|
prometheus.io/scrape: '{{ .Values.prometheusScrape }}'
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.service.annotations }}
|
||||||
|
{{- toYaml .Values.service.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
type: "{{ .Values.service.type }}"
|
||||||
|
ports:
|
||||||
|
- name: "http"
|
||||||
|
protocol: TCP
|
||||||
|
port: {{ .Values.service.port }}
|
||||||
|
{{- if .Values.service.nodePort }}
|
||||||
|
nodePort: {{ .Values.service.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
targetPort: 8080
|
||||||
|
{{- if .Values.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: "{{ .Values.service.loadBalancerIP }}"
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.serviceAccount.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,27 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if .Values.prometheus.monitor.enabled }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||||
|
app.kubernetes.io/instance: "{{ .Release.Name }}"
|
||||||
|
app.kubernetes.io/managed-by: "{{ .Release.Service }}"
|
||||||
|
{{- if .Values.prometheus.monitor.additionalLabels }}
|
||||||
|
{{ toYaml .Values.prometheus.monitor.additionalLabels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
endpoints:
|
||||||
|
- port: http
|
||||||
|
{{- if .Values.prometheus.monitor.honorLabels }}
|
||||||
|
honorLabels: true
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,29 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if and .Values.autosharding.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: stsdiscovery-{{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- pods
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- apiGroups:
|
||||||
|
- apps
|
||||||
|
resourceNames:
|
||||||
|
- kube-state-metrics
|
||||||
|
resources:
|
||||||
|
- statefulsets
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,22 @@
|
||||||
|
{{ if not .Values.disabled }}
|
||||||
|
{{- if and .Values.autosharding.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: stsdiscovery-{{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "kube-state-metrics.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: stsdiscovery-{{ template "kube-state-metrics.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "kube-state-metrics.fullname" . }}
|
||||||
|
namespace: {{ template "kube-state-metrics.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,126 @@
|
||||||
|
# Default values for kube-state-metrics.
|
||||||
|
prometheusScrape: true
|
||||||
|
image:
|
||||||
|
repository: quay.io/coreos/kube-state-metrics
|
||||||
|
tag: v1.9.8
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# If set to true, this will deploy kube-state-metrics as a StatefulSet and the data
|
||||||
|
# will be automatically sharded across <.Values.replicas> pods using the built-in
|
||||||
|
# autodiscovery feature: https://github.com/kubernetes/kube-state-metrics#automated-sharding
|
||||||
|
# This is an experimental feature and there are no stability guarantees.
|
||||||
|
autosharding:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
replicas: 1
|
||||||
|
|
||||||
|
service:
|
||||||
|
port: 8080
|
||||||
|
# Default to clusterIP for backward compatibility
|
||||||
|
type: ClusterIP
|
||||||
|
nodePort: 0
|
||||||
|
loadBalancerIP: ""
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
customLabels: {}
|
||||||
|
|
||||||
|
hostNetwork: false
|
||||||
|
|
||||||
|
rbac:
|
||||||
|
# If true, create & use RBAC resources
|
||||||
|
create: true
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
# Specifies whether a ServiceAccount should be created, require rbac true
|
||||||
|
create: true
|
||||||
|
# The name of the ServiceAccount to use.
|
||||||
|
# If not set and create is true, a name is generated using the fullname template
|
||||||
|
name:
|
||||||
|
# Reference to one or more secrets to be used when pulling images
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
prometheus:
|
||||||
|
monitor:
|
||||||
|
enabled: false
|
||||||
|
additionalLabels: {}
|
||||||
|
namespace: ""
|
||||||
|
honorLabels: false
|
||||||
|
|
||||||
|
## Specify if a Pod Security Policy for kube-state-metrics must be created
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
|
||||||
|
##
|
||||||
|
podSecurityPolicy:
|
||||||
|
enabled: false
|
||||||
|
annotations: {}
|
||||||
|
## Specify pod annotations
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#seccomp
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#sysctl
|
||||||
|
##
|
||||||
|
# seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
|
||||||
|
# seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
||||||
|
# apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
||||||
|
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
enabled: true
|
||||||
|
runAsUser: 65534
|
||||||
|
fsGroup: 65534
|
||||||
|
|
||||||
|
## Node labels for pod assignment
|
||||||
|
## Ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
## Affinity settings for pod assignment
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
## Tolerations for pod assignment
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
# Annotations to be added to the pod
|
||||||
|
podAnnotations: {}
|
||||||
|
|
||||||
|
## Assign a PriorityClassName to pods if set
|
||||||
|
# priorityClassName: ""
|
||||||
|
|
||||||
|
# Available collectors for kube-state-metrics. By default all available
|
||||||
|
# collectors are enabled.
|
||||||
|
collectors:
|
||||||
|
certificatesigningrequests: true
|
||||||
|
configmaps: true
|
||||||
|
cronjobs: true
|
||||||
|
daemonsets: true
|
||||||
|
deployments: true
|
||||||
|
endpoints: true
|
||||||
|
horizontalpodautoscalers: true
|
||||||
|
ingresses: true
|
||||||
|
jobs: true
|
||||||
|
limitranges: true
|
||||||
|
mutatingwebhookconfigurations: false
|
||||||
|
namespaces: true
|
||||||
|
networkpolicies: false
|
||||||
|
nodes: true
|
||||||
|
persistentvolumeclaims: true
|
||||||
|
persistentvolumes: true
|
||||||
|
poddisruptionbudgets: true
|
||||||
|
pods: true
|
||||||
|
replicasets: true
|
||||||
|
replicationcontrollers: true
|
||||||
|
resourcequotas: true
|
||||||
|
secrets: false
|
||||||
|
services: true
|
||||||
|
statefulsets: true
|
||||||
|
storageclasses: true
|
||||||
|
validatingwebhookconfigurations: false
|
||||||
|
verticalpodautoscalers: false
|
||||||
|
volumeattachments: false
|
||||||
|
|
||||||
|
# Namespace to be enabled for collecting resources. By default all namespaces are collected.
|
||||||
|
# namespace: ""
|
||||||
|
|
||||||
|
## Override the deployment namespace
|
||||||
|
##
|
||||||
|
namespaceOverride: ""
|
|
@ -0,0 +1,6 @@
|
||||||
|
dependencies:
|
||||||
|
- name: kube-state-metrics
|
||||||
|
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||||
|
version: 2.7.2
|
||||||
|
digest: sha256:695d0dbc2db8bccf5672145697546891da60ff12fbdb4f1bfc02459f4b755e4c
|
||||||
|
generated: 2020-03-18T18:57:59.00056179Z
|
|
@ -0,0 +1,7 @@
|
||||||
|
dependencies:
|
||||||
|
|
||||||
|
- name: kube-state-metrics
|
||||||
|
version: "2.7.*"
|
||||||
|
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||||
|
condition: kubeStateMetrics.enabled
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
The Prometheus server can be accessed via port {{ .Values.server.service.servicePort }} on the following DNS name from within your cluster:
|
||||||
|
{{ template "prometheus.server.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
|
||||||
|
|
||||||
|
{{ if .Values.server.ingress.enabled -}}
|
||||||
|
From outside the cluster, the server URL(s) are:
|
||||||
|
{{- range .Values.server.ingress.hosts }}
|
||||||
|
http://{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
Get the Prometheus server URL by running these commands in the same shell:
|
||||||
|
{{- if contains "NodePort" .Values.server.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "prometheus.server.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.server.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "prometheus.server.fullname" . }}'
|
||||||
|
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "prometheus.server.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
echo http://$SERVICE_IP:{{ .Values.server.service.servicePort }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.server.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "prometheus.name" . }},component={{ .Values.server.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 9090
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.server.persistentVolume.enabled }}
|
||||||
|
{{- else }}
|
||||||
|
#################################################################################
|
||||||
|
###### WARNING: Persistence is disabled!!! You will lose your data when #####
|
||||||
|
###### the Server pod is terminated. #####
|
||||||
|
#################################################################################
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{ if .Values.alertmanager.enabled }}
|
||||||
|
The Prometheus alertmanager can be accessed via port {{ .Values.alertmanager.service.servicePort }} on the following DNS name from within your cluster:
|
||||||
|
{{ template "prometheus.alertmanager.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
|
||||||
|
|
||||||
|
{{ if .Values.alertmanager.ingress.enabled -}}
|
||||||
|
From outside the cluster, the alertmanager URL(s) are:
|
||||||
|
{{- range .Values.alertmanager.ingress.hosts }}
|
||||||
|
http://{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
Get the Alertmanager URL by running these commands in the same shell:
|
||||||
|
{{- if contains "NodePort" .Values.alertmanager.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "prometheus.alertmanager.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.alertmanager.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "prometheus.alertmanager.fullname" . }}'
|
||||||
|
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "prometheus.alertmanager.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
echo http://$SERVICE_IP:{{ .Values.alertmanager.service.servicePort }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.alertmanager.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "prometheus.name" . }},component={{ .Values.alertmanager.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 9093
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.enabled }}
|
||||||
|
{{- else }}
|
||||||
|
#################################################################################
|
||||||
|
###### WARNING: Persistence is disabled!!! You will lose your data when #####
|
||||||
|
###### the AlertManager pod is terminated. #####
|
||||||
|
#################################################################################
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.nodeExporter.podSecurityPolicy.enabled }}
|
||||||
|
{{- else }}
|
||||||
|
#################################################################################
|
||||||
|
###### WARNING: Pod Security Policy has been moved to a global property. #####
|
||||||
|
###### use .Values.podSecurityPolicy.enabled with pod-based #####
|
||||||
|
###### annotations #####
|
||||||
|
###### (e.g. .Values.nodeExporter.podSecurityPolicy.annotations) #####
|
||||||
|
#################################################################################
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{ if .Values.pushgateway.enabled }}
|
||||||
|
The Prometheus PushGateway can be accessed via port {{ .Values.pushgateway.service.servicePort }} on the following DNS name from within your cluster:
|
||||||
|
{{ template "prometheus.pushgateway.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
|
||||||
|
|
||||||
|
{{ if .Values.pushgateway.ingress.enabled -}}
|
||||||
|
From outside the cluster, the pushgateway URL(s) are:
|
||||||
|
{{- range .Values.pushgateway.ingress.hosts }}
|
||||||
|
http://{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
Get the PushGateway URL by running these commands in the same shell:
|
||||||
|
{{- if contains "NodePort" .Values.pushgateway.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "prometheus.pushgateway.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.pushgateway.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "prometheus.pushgateway.fullname" . }}'
|
||||||
|
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "prometheus.pushgateway.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
echo http://$SERVICE_IP:{{ .Values.pushgateway.service.servicePort }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.pushgateway.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "prometheus.name" . }},component={{ .Values.pushgateway.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 9091
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
For more information on running Prometheus, visit:
|
||||||
|
https://prometheus.io/
|
|
@ -0,0 +1,276 @@
|
||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create unified labels for prometheus components
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.common.matchLabels" -}}
|
||||||
|
app: {{ template "prometheus.name" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.common.metaLabels" -}}
|
||||||
|
chart: {{ template "prometheus.chart" . }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.alertmanager.labels" -}}
|
||||||
|
{{ include "prometheus.alertmanager.matchLabels" . }}
|
||||||
|
{{ include "prometheus.common.metaLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.alertmanager.matchLabels" -}}
|
||||||
|
component: {{ .Values.alertmanager.name | quote }}
|
||||||
|
{{ include "prometheus.common.matchLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.kubeStateMetrics.labels" -}}
|
||||||
|
{{ include "prometheus.kubeStateMetrics.matchLabels" . }}
|
||||||
|
{{ include "prometheus.common.metaLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.kubeStateMetrics.matchLabels" -}}
|
||||||
|
component: {{ .Values.kubeStateMetrics.name | quote }}
|
||||||
|
{{ include "prometheus.common.matchLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.nodeExporter.labels" -}}
|
||||||
|
{{ include "prometheus.nodeExporter.matchLabels" . }}
|
||||||
|
{{ include "prometheus.common.metaLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.nodeExporter.matchLabels" -}}
|
||||||
|
component: {{ .Values.nodeExporter.name | quote }}
|
||||||
|
{{ include "prometheus.common.matchLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.pushgateway.labels" -}}
|
||||||
|
{{ include "prometheus.pushgateway.matchLabels" . }}
|
||||||
|
{{ include "prometheus.common.metaLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.pushgateway.matchLabels" -}}
|
||||||
|
component: {{ .Values.pushgateway.name | quote }}
|
||||||
|
{{ include "prometheus.common.matchLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.server.labels" -}}
|
||||||
|
{{ include "prometheus.server.matchLabels" . }}
|
||||||
|
{{ include "prometheus.common.metaLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "prometheus.server.matchLabels" -}}
|
||||||
|
component: {{ .Values.server.name | quote }}
|
||||||
|
{{ include "prometheus.common.matchLabels" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a fully qualified alertmanager name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- define "prometheus.alertmanager.fullname" -}}
|
||||||
|
{{- if .Values.alertmanager.fullnameOverride -}}
|
||||||
|
{{- .Values.alertmanager.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name .Values.alertmanager.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s-%s" .Release.Name $name .Values.alertmanager.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a fully qualified kube-state-metrics name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.kubeStateMetrics.fullname" -}}
|
||||||
|
{{- if .Values.kubeStateMetrics.fullnameOverride -}}
|
||||||
|
{{- .Values.kubeStateMetrics.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name .Values.kubeStateMetrics.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s-%s" .Release.Name $name .Values.kubeStateMetrics.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a fully qualified node-exporter name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.nodeExporter.fullname" -}}
|
||||||
|
{{- if .Values.nodeExporter.fullnameOverride -}}
|
||||||
|
{{- .Values.nodeExporter.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name .Values.nodeExporter.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s-%s" .Release.Name $name .Values.nodeExporter.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a fully qualified Prometheus server name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.server.fullname" -}}
|
||||||
|
{{- if .Values.server.fullnameOverride -}}
|
||||||
|
{{- .Values.server.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name .Values.server.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s-%s" .Release.Name $name .Values.server.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a fully qualified pushgateway name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.pushgateway.fullname" -}}
|
||||||
|
{{- if .Values.pushgateway.fullnameOverride -}}
|
||||||
|
{{- .Values.pushgateway.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name .Values.pushgateway.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s-%s" .Release.Name $name .Values.pushgateway.name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for deployment.
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.deployment.apiVersion" -}}
|
||||||
|
{{- if semverCompare "<1.9-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "extensions/v1beta1" -}}
|
||||||
|
{{- else if semverCompare "^1.9-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "apps/v1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for daemonset.
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.daemonset.apiVersion" -}}
|
||||||
|
{{- if semverCompare "<1.9-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "extensions/v1beta1" -}}
|
||||||
|
{{- else if semverCompare "^1.9-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "apps/v1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for networkpolicy.
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.networkPolicy.apiVersion" -}}
|
||||||
|
{{- if semverCompare ">=1.4-0, <1.7-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "extensions/v1beta1" -}}
|
||||||
|
{{- else if semverCompare "^1.7-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "networking.k8s.io/v1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{/*
|
||||||
|
Return the appropriate apiVersion for podsecuritypolicy.
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.podSecurityPolicy.apiVersion" -}}
|
||||||
|
{{- if semverCompare ">=1.3-0, <1.10-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "extensions/v1beta1" -}}
|
||||||
|
{{- else if semverCompare "^1.10-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
{{- print "policy/v1beta1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use for the alertmanager component
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.serviceAccountName.alertmanager" -}}
|
||||||
|
{{- if .Values.serviceAccounts.alertmanager.create -}}
|
||||||
|
{{ default (include "prometheus.alertmanager.fullname" .) .Values.serviceAccounts.alertmanager.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccounts.alertmanager.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use for the kubeStateMetrics component
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.serviceAccountName.kubeStateMetrics" -}}
|
||||||
|
{{- if .Values.serviceAccounts.kubeStateMetrics.create -}}
|
||||||
|
{{ default (include "prometheus.kubeStateMetrics.fullname" .) .Values.serviceAccounts.kubeStateMetrics.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccounts.kubeStateMetrics.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use for the nodeExporter component
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.serviceAccountName.nodeExporter" -}}
|
||||||
|
{{- if .Values.serviceAccounts.nodeExporter.create -}}
|
||||||
|
{{ default (include "prometheus.nodeExporter.fullname" .) .Values.serviceAccounts.nodeExporter.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccounts.nodeExporter.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use for the pushgateway component
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.serviceAccountName.pushgateway" -}}
|
||||||
|
{{- if .Values.serviceAccounts.pushgateway.create -}}
|
||||||
|
{{ default (include "prometheus.pushgateway.fullname" .) .Values.serviceAccounts.pushgateway.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccounts.pushgateway.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use for the server component
|
||||||
|
*/}}
|
||||||
|
{{- define "prometheus.serviceAccountName.server" -}}
|
||||||
|
{{- if .Values.serviceAccounts.server.create -}}
|
||||||
|
{{ default (include "prometheus.server.fullname" .) .Values.serviceAccounts.server.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccounts.server.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
rules:
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
resources:
|
||||||
|
- podsecuritypolicies
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
{{- else }}
|
||||||
|
[]
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,18 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "prometheus.serviceAccountName.alertmanager" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled (and (empty .Values.alertmanager.configMapOverrideName) (empty .Values.alertmanager.configFromSecret)) -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
data:
|
||||||
|
{{- $root := . -}}
|
||||||
|
{{- range $key, $value := .Values.alertmanagerFiles }}
|
||||||
|
{{- if $key | regexMatch ".*\\.ya?ml$" }}
|
||||||
|
{{ $key }}: |
|
||||||
|
{{ toYaml $value | default "{}" | indent 4 }}
|
||||||
|
{{- else }}
|
||||||
|
{{ $key }}: {{ toYaml $value | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,141 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled (not .Values.alertmanager.statefulSet.enabled) -}}
|
||||||
|
apiVersion: {{ template "prometheus.deployment.apiVersion" . }}
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.alertmanager.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.alertmanager.replicaCount }}
|
||||||
|
{{- if .Values.alertmanager.strategy }}
|
||||||
|
strategy:
|
||||||
|
{{ toYaml .Values.alertmanager.strategy | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.alertmanager.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 8 }}
|
||||||
|
{{- if .Values.alertmanager.podLabels}}
|
||||||
|
{{ toYaml .Values.alertmanager.podLabels | nindent 8 }}
|
||||||
|
{{- end}}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.alertmanager.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.alertmanager.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ template "prometheus.serviceAccountName.alertmanager" . }}
|
||||||
|
{{- if .Values.alertmanager.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.alertmanager.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}
|
||||||
|
image: "{{ .Values.alertmanager.image.repository }}:{{ .Values.alertmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.alertmanager.image.pullPolicy }}"
|
||||||
|
env:
|
||||||
|
{{- range $key, $value := .Values.alertmanager.extraEnv }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
- name: POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
apiVersion: v1
|
||||||
|
fieldPath: status.podIP
|
||||||
|
args:
|
||||||
|
- --config.file=/etc/config/{{ .Values.alertmanager.configFileName }}
|
||||||
|
- --storage.path={{ .Values.alertmanager.persistentVolume.mountPath }}
|
||||||
|
- --cluster.advertise-address=$(POD_IP):6783
|
||||||
|
{{- range $key, $value := .Values.alertmanager.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.baseURL }}
|
||||||
|
- --web.external-url={{ .Values.alertmanager.baseURL }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- containerPort: 9093
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.alertmanager.prefixURL }}/-/ready
|
||||||
|
port: 9093
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
timeoutSeconds: 30
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.alertmanager.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
- name: storage-volume
|
||||||
|
mountPath: "{{ .Values.alertmanager.persistentVolume.mountPath }}"
|
||||||
|
subPath: "{{ .Values.alertmanager.persistentVolume.subPath }}"
|
||||||
|
{{- range .Values.alertmanager.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.configmapReload.alertmanager.enabled }}
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}-{{ .Values.configmapReload.alertmanager.name }}
|
||||||
|
image: "{{ .Values.configmapReload.alertmanager.image.repository }}:{{ .Values.configmapReload.alertmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.configmapReload.alertmanager.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- --volume-dir=/etc/config
|
||||||
|
- --webhook-url=http://127.0.0.1:9093{{ .Values.alertmanager.prefixURL }}/-/reload
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.configmapReload.alertmanager.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
readOnly: true
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.alertmanager.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.alertmanager.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.alertmanager.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.alertmanager.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
{{- if empty .Values.alertmanager.configFromSecret }}
|
||||||
|
configMap:
|
||||||
|
name: {{ if .Values.alertmanager.configMapOverrideName }}{{ .Release.Name }}-{{ .Values.alertmanager.configMapOverrideName }}{{- else }}{{ template "prometheus.alertmanager.fullname" . }}{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ .Values.alertmanager.configFromSecret }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.alertmanager.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
- name: storage-volume
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ if .Values.alertmanager.persistentVolume.existingClaim }}{{ .Values.alertmanager.persistentVolume.existingClaim }}{{- else }}{{ template "prometheus.alertmanager.fullname" . }}{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,44 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.alertmanager.ingress.enabled -}}
|
||||||
|
{{- $releaseName := .Release.Name -}}
|
||||||
|
{{- $serviceName := include "prometheus.alertmanager.fullname" . }}
|
||||||
|
{{- $servicePort := .Values.alertmanager.service.servicePort -}}
|
||||||
|
{{- $extraPaths := .Values.alertmanager.ingress.extraPaths -}}
|
||||||
|
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{ else }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{ end -}}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.alertmanager.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.ingress.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
{{- range $key, $value := .Values.alertmanager.ingress.extraLabels }}
|
||||||
|
{{ $key }}: {{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
{{- range .Values.alertmanager.ingress.hosts }}
|
||||||
|
{{- $url := splitList "/" . }}
|
||||||
|
- host: {{ first $url }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{ if $extraPaths }}
|
||||||
|
{{ toYaml $extraPaths | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
- path: /{{ rest $url | join "/" }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: {{ $servicePort }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.alertmanager.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{ toYaml .Values.alertmanager.ingress.tls | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.networkPolicy.enabled -}}
|
||||||
|
apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }}
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.alertmanager.matchLabels" . | nindent 6 }}
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 12 }}
|
||||||
|
- ports:
|
||||||
|
- port: 9093
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.alertmanager.podDisruptionBudget.enabled }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
maxUnavailable: {{ .Values.alertmanager.podDisruptionBudget.maxUnavailable }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,50 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
apiVersion: {{ template "prometheus.podSecurityPolicy.apiVersion" . }}
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.alertmanager.podSecurityPolicy.annotations }}
|
||||||
|
{{ toYaml .Values.alertmanager.podSecurityPolicy.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- 'configMap'
|
||||||
|
- 'persistentVolumeClaim'
|
||||||
|
- 'emptyDir'
|
||||||
|
- 'secret'
|
||||||
|
allowedHostPaths:
|
||||||
|
- pathPrefix: /etc
|
||||||
|
readOnly: true
|
||||||
|
- pathPrefix: {{ .Values.alertmanager.persistentVolume.mountPath }}
|
||||||
|
hostNetwork: false
|
||||||
|
hostPID: false
|
||||||
|
hostIPC: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
fsGroup:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,34 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if not .Values.alertmanager.statefulSet.enabled -}}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.alertmanager.persistentVolume.enabled -}}
|
||||||
|
{{- if not .Values.alertmanager.persistentVolume.existingClaim -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.persistentVolume.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml .Values.alertmanager.persistentVolume.accessModes | indent 4 }}
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.alertmanager.persistentVolume.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.alertmanager.persistentVolume.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.volumeBindingMode }}
|
||||||
|
volumeBindingModeName: "{{ .Values.alertmanager.persistentVolume.volumeBindingMode }}"
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .Values.alertmanager.persistentVolume.size }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.alertmanager.statefulSet.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.alertmanager.statefulSet.headless.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.statefulSet.headless.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.alertmanager.statefulSet.headless.labels }}
|
||||||
|
{{ toYaml .Values.alertmanager.statefulSet.headless.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}-headless
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.alertmanager.statefulSet.headless.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9093
|
||||||
|
{{- if .Values.alertmanager.statefulSet.headless.enableMeshPeer }}
|
||||||
|
- name: meshpeer
|
||||||
|
port: 6783
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 6783
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "prometheus.alertmanager.matchLabels" . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,54 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.alertmanager.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.alertmanager.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.service.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.alertmanager.service.labels }}
|
||||||
|
{{ toYaml .Values.alertmanager.service.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.alertmanager.service.clusterIP }}
|
||||||
|
clusterIP: {{ .Values.alertmanager.service.clusterIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{ toYaml .Values.alertmanager.service.externalIPs | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ .Values.alertmanager.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- range $cidr := .Values.alertmanager.service.loadBalancerSourceRanges }}
|
||||||
|
- {{ $cidr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.alertmanager.service.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9093
|
||||||
|
{{- if .Values.alertmanager.service.nodePort }}
|
||||||
|
nodePort: {{ .Values.alertmanager.service.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.service.enableMeshPeer }}
|
||||||
|
- name: meshpeer
|
||||||
|
port: 6783
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 6783
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "prometheus.alertmanager.matchLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.alertmanager.service.sessionAffinity }}
|
||||||
|
sessionAffinity: {{ .Values.alertmanager.service.sessionAffinity }}
|
||||||
|
{{- end }}
|
||||||
|
type: "{{ .Values.alertmanager.service.type }}"
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.serviceAccounts.alertmanager.create -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.serviceAccountName.alertmanager" . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,154 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.alertmanager.enabled .Values.alertmanager.statefulSet.enabled -}}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.alertmanager.fullname" . }}
|
||||||
|
spec:
|
||||||
|
serviceName: {{ template "prometheus.alertmanager.fullname" . }}-headless
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.alertmanager.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.alertmanager.replicaCount }}
|
||||||
|
podManagementPolicy: {{ .Values.alertmanager.statefulSet.podManagementPolicy }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.alertmanager.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.alertmanager.labels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.alertmanager.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.alertmanager.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.alertmanager.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ template "prometheus.serviceAccountName.alertmanager" . }}
|
||||||
|
{{- if .Values.alertmanager.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.alertmanager.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}
|
||||||
|
image: "{{ .Values.alertmanager.image.repository }}:{{ .Values.alertmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.alertmanager.image.pullPolicy }}"
|
||||||
|
env:
|
||||||
|
{{- range $key, $value := .Values.alertmanager.extraEnv }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
- name: POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
apiVersion: v1
|
||||||
|
fieldPath: status.podIP
|
||||||
|
args:
|
||||||
|
- --config.file=/etc/config/alertmanager.yml
|
||||||
|
- --storage.path={{ .Values.alertmanager.persistentVolume.mountPath }}
|
||||||
|
- --cluster.advertise-address=$(POD_IP):6783
|
||||||
|
{{- if .Values.alertmanager.statefulSet.headless.enableMeshPeer }}
|
||||||
|
- --cluster.listen-address=0.0.0.0:6783
|
||||||
|
{{- range $n := until (.Values.alertmanager.replicaCount | int) }}
|
||||||
|
- --cluster.peer={{ template "prometheus.alertmanager.fullname" $ }}-{{ $n }}.{{ template "prometheus.alertmanager.fullname" $ }}-headless:6783
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := .Values.alertmanager.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.baseURL }}
|
||||||
|
- --web.external-url={{ .Values.alertmanager.baseURL }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- containerPort: 9093
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.alertmanager.prefixURL }}/#/status
|
||||||
|
port: 9093
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
timeoutSeconds: 30
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.alertmanager.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
- name: storage-volume
|
||||||
|
mountPath: "{{ .Values.alertmanager.persistentVolume.mountPath }}"
|
||||||
|
subPath: "{{ .Values.alertmanager.persistentVolume.subPath }}"
|
||||||
|
{{- range .Values.alertmanager.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.configmapReload.alertmanager.enabled }}
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}-{{ .Values.configmapReload.alertmanager.name }}
|
||||||
|
image: "{{ .Values.configmapReload.alertmanager.image.repository }}:{{ .Values.configmapReload.alertmanager.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.configmapReload.alertmanager.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- --volume-dir=/etc/config
|
||||||
|
- --webhook-url=http://localhost:9093{{ .Values.alertmanager.prefixURL }}/-/reload
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.configmapReload.alertmanager.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
readOnly: true
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.alertmanager.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.alertmanager.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.alertmanager.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: {{ if .Values.alertmanager.configMapOverrideName }}{{ .Release.Name }}-{{ .Values.alertmanager.configMapOverrideName }}{{- else }}{{ template "prometheus.alertmanager.fullname" . }}{{- end }}
|
||||||
|
{{- range .Values.alertmanager.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.enabled }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: storage-volume
|
||||||
|
{{- if .Values.alertmanager.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.alertmanager.persistentVolume.annotations | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml .Values.alertmanager.persistentVolume.accessModes | indent 10 }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .Values.alertmanager.persistentVolume.size }}"
|
||||||
|
{{- if .Values.server.persistentVolume.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.server.persistentVolume.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.alertmanager.persistentVolume.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
- name: storage-volume
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,125 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.nodeExporter.enabled -}}
|
||||||
|
apiVersion: {{ template "prometheus.daemonset.apiVersion" . }}
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.nodeExporter.deploymentAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.nodeExporter.deploymentAnnotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.nodeExporter.matchLabels" . | nindent 6 }}
|
||||||
|
{{- if .Values.nodeExporter.updateStrategy }}
|
||||||
|
updateStrategy:
|
||||||
|
{{ toYaml .Values.nodeExporter.updateStrategy | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.nodeExporter.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.nodeExporter.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 8 }}
|
||||||
|
{{- if .Values.nodeExporter.pod.labels }}
|
||||||
|
{{ toYaml .Values.nodeExporter.pod.labels | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: {{ template "prometheus.serviceAccountName.nodeExporter" . }}
|
||||||
|
{{- if .Values.nodeExporter.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.nodeExporter.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.nodeExporter.name }}
|
||||||
|
image: "{{ .Values.nodeExporter.image.repository }}:{{ .Values.nodeExporter.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.nodeExporter.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- --path.procfs=/host/proc
|
||||||
|
- --path.sysfs=/host/sys
|
||||||
|
{{- if .Values.nodeExporter.hostNetwork }}
|
||||||
|
- --web.listen-address=:{{ .Values.nodeExporter.service.hostPort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := .Values.nodeExporter.extraArgs }}
|
||||||
|
{{- if $value }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- else }}
|
||||||
|
- --{{ $key }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
{{- if .Values.nodeExporter.hostNetwork }}
|
||||||
|
containerPort: {{ .Values.nodeExporter.service.hostPort }}
|
||||||
|
{{- else }}
|
||||||
|
containerPort: 9100
|
||||||
|
{{- end }}
|
||||||
|
hostPort: {{ .Values.nodeExporter.service.hostPort }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.nodeExporter.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: proc
|
||||||
|
mountPath: /host/proc
|
||||||
|
readOnly: true
|
||||||
|
- name: sys
|
||||||
|
mountPath: /host/sys
|
||||||
|
readOnly: true
|
||||||
|
{{- range .Values.nodeExporter.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- if .mountPropagation }}
|
||||||
|
mountPropagation: {{ .mountPropagation }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.nodeExporter.extraConfigmapMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.hostNetwork }}
|
||||||
|
hostNetwork: true
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.hostPID }}
|
||||||
|
hostPID: true
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.nodeExporter.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.nodeExporter.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.nodeExporter.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: proc
|
||||||
|
hostPath:
|
||||||
|
path: /proc
|
||||||
|
- name: sys
|
||||||
|
hostPath:
|
||||||
|
path: /sys
|
||||||
|
{{- range .Values.nodeExporter.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
hostPath:
|
||||||
|
path: {{ .hostPath }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.nodeExporter.extraConfigmapMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,57 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.nodeExporter.enabled .Values.rbac.create }}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
apiVersion: {{ template "prometheus.podSecurityPolicy.apiVersion" . }}
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.nodeExporter.podSecurityPolicy.annotations }}
|
||||||
|
{{ toYaml .Values.nodeExporter.podSecurityPolicy.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- 'configMap'
|
||||||
|
- 'hostPath'
|
||||||
|
- 'secret'
|
||||||
|
allowedHostPaths:
|
||||||
|
- pathPrefix: /proc
|
||||||
|
readOnly: true
|
||||||
|
- pathPrefix: /sys
|
||||||
|
readOnly: true
|
||||||
|
{{- range .Values.nodeExporter.extraHostPathMounts }}
|
||||||
|
- pathPrefix: {{ .hostPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
hostNetwork: {{ .Values.nodeExporter.hostNetwork }}
|
||||||
|
hostPID: {{ .Values.nodeExporter.hostPID }}
|
||||||
|
hostIPC: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
fsGroup:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
hostPorts:
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.nodeExporter.enabled .Values.rbac.create }}
|
||||||
|
{{- if or (default .Values.nodeExporter.podSecurityPolicy.enabled false) (.Values.podSecurityPolicy.enabled) }}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 4 }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: ['extensions']
|
||||||
|
resources: ['podsecuritypolicies']
|
||||||
|
verbs: ['use']
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.nodeExporter.enabled .Values.rbac.create }}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 4 }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
kind: Role
|
||||||
|
name: {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "prometheus.serviceAccountName.nodeExporter" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,46 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.nodeExporter.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.nodeExporter.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.nodeExporter.service.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.nodeExporter.service.labels }}
|
||||||
|
{{ toYaml .Values.nodeExporter.service.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.nodeExporter.fullname" . }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.nodeExporter.service.clusterIP }}
|
||||||
|
clusterIP: {{ .Values.nodeExporter.service.clusterIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{ toYaml .Values.nodeExporter.service.externalIPs | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ .Values.nodeExporter.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.nodeExporter.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- range $cidr := .Values.nodeExporter.service.loadBalancerSourceRanges }}
|
||||||
|
- {{ $cidr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: {{ .Values.nodeExporter.service.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.nodeExporter.hostNetwork }}
|
||||||
|
targetPort: {{ .Values.nodeExporter.service.hostPort }}
|
||||||
|
{{- else }}
|
||||||
|
targetPort: 9100
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "prometheus.nodeExporter.matchLabels" . | nindent 4 }}
|
||||||
|
type: "{{ .Values.nodeExporter.service.type }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.nodeExporter.enabled .Values.serviceAccounts.nodeExporter.create -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.nodeExporter.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.serviceAccountName.nodeExporter" . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.pushgateway.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
rules:
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
resources:
|
||||||
|
- podsecuritypolicies
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
{{- else }}
|
||||||
|
[]
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,18 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.pushgateway.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "prometheus.serviceAccountName.pushgateway" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,99 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.pushgateway.enabled -}}
|
||||||
|
apiVersion: {{ template "prometheus.deployment.apiVersion" . }}
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
{{- if .Values.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.pushgateway.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.pushgateway.replicaCount }}
|
||||||
|
{{- if .Values.pushgateway.strategy }}
|
||||||
|
strategy:
|
||||||
|
{{ toYaml .Values.pushgateway.strategy | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.pushgateway.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.pushgateway.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: {{ template "prometheus.serviceAccountName.pushgateway" . }}
|
||||||
|
{{- if .Values.pushgateway.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.pushgateway.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.pushgateway.name }}
|
||||||
|
image: "{{ .Values.pushgateway.image.repository }}:{{ .Values.pushgateway.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.pushgateway.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
{{- range $key, $value := .Values.pushgateway.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- containerPort: 9091
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
{{- if (index .Values "pushgateway" "extraArgs" "web.route-prefix") }}
|
||||||
|
path: /{{ index .Values "pushgateway" "extraArgs" "web.route-prefix" }}/-/healthy
|
||||||
|
{{- else }}
|
||||||
|
path: /-/healthy
|
||||||
|
{{- end }}
|
||||||
|
port: 9091
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
timeoutSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
{{- if (index .Values "pushgateway" "extraArgs" "web.route-prefix") }}
|
||||||
|
path: /{{ index .Values "pushgateway" "extraArgs" "web.route-prefix" }}/-/ready
|
||||||
|
{{- else }}
|
||||||
|
path: /-/ready
|
||||||
|
{{- end }}
|
||||||
|
port: 9091
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
timeoutSeconds: 10
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.pushgateway.resources | indent 12 }}
|
||||||
|
{{- if .Values.pushgateway.persistentVolume.enabled }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: storage-volume
|
||||||
|
mountPath: "{{ .Values.pushgateway.persistentVolume.mountPath }}"
|
||||||
|
subPath: "{{ .Values.pushgateway.persistentVolume.subPath }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.pushgateway.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.pushgateway.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.pushgateway.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.pushgateway.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.persistentVolume.enabled }}
|
||||||
|
volumes:
|
||||||
|
- name: storage-volume
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ if .Values.pushgateway.persistentVolume.existingClaim }}{{ .Values.pushgateway.persistentVolume.existingClaim }}{{- else }}{{ template "prometheus.pushgateway.fullname" . }}{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,41 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.pushgateway.enabled .Values.pushgateway.ingress.enabled -}}
|
||||||
|
{{- $releaseName := .Release.Name -}}
|
||||||
|
{{- $serviceName := include "prometheus.pushgateway.fullname" . }}
|
||||||
|
{{- $servicePort := .Values.pushgateway.service.servicePort -}}
|
||||||
|
{{- $extraPaths := .Values.pushgateway.ingress.extraPaths -}}
|
||||||
|
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{ else }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{ end -}}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.pushgateway.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.pushgateway.ingress.annotations | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
{{- range .Values.pushgateway.ingress.hosts }}
|
||||||
|
{{- $url := splitList "/" . }}
|
||||||
|
- host: {{ first $url }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{ if $extraPaths }}
|
||||||
|
{{ toYaml $extraPaths | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
- path: /{{ rest $url | join "/" }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: {{ $servicePort }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.pushgateway.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{ toYaml .Values.pushgateway.ingress.tls | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.pushgateway.enabled .Values.networkPolicy.enabled -}}
|
||||||
|
apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }}
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.pushgateway.matchLabels" . | nindent 6 }}
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 12 }}
|
||||||
|
- ports:
|
||||||
|
- port: 9091
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.pushgateway.podDisruptionBudget.enabled }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
maxUnavailable: {{ .Values.pushgateway.podDisruptionBudget.maxUnavailable }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,46 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
apiVersion: {{ template "prometheus.podSecurityPolicy.apiVersion" . }}
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.pushgateway.podSecurityPolicy.annotations }}
|
||||||
|
{{ toYaml .Values.pushgateway.podSecurityPolicy.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- 'persistentVolumeClaim'
|
||||||
|
- 'secret'
|
||||||
|
allowedHostPaths:
|
||||||
|
- pathPrefix: {{ .Values.pushgateway.persistentVolume.mountPath }}
|
||||||
|
hostNetwork: false
|
||||||
|
hostPID: false
|
||||||
|
hostIPC: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
fsGroup:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,34 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.pushgateway.enabled -}}
|
||||||
|
{{- if .Values.pushgateway.persistentVolume.enabled -}}
|
||||||
|
{{- if not .Values.pushgateway.persistentVolume.existingClaim -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.pushgateway.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.pushgateway.persistentVolume.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml .Values.pushgateway.persistentVolume.accessModes | indent 4 }}
|
||||||
|
{{- if .Values.pushgateway.persistentVolume.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.pushgateway.persistentVolume.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.pushgateway.persistentVolume.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.persistentVolume.volumeBindingMode }}
|
||||||
|
volumeBindingModeName: "{{ .Values.pushgateway.persistentVolume.volumeBindingMode }}"
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .Values.pushgateway.persistentVolume.size }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,42 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.pushgateway.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.pushgateway.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.pushgateway.service.annotations | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.pushgateway.service.labels }}
|
||||||
|
{{ toYaml .Values.pushgateway.service.labels | indent 4}}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.pushgateway.fullname" . }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.pushgateway.service.clusterIP }}
|
||||||
|
clusterIP: {{ .Values.pushgateway.service.clusterIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{ toYaml .Values.pushgateway.service.externalIPs | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ .Values.pushgateway.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.pushgateway.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- range $cidr := .Values.pushgateway.service.loadBalancerSourceRanges }}
|
||||||
|
- {{ $cidr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.pushgateway.service.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9091
|
||||||
|
selector:
|
||||||
|
{{- include "prometheus.pushgateway.matchLabels" . | nindent 4 }}
|
||||||
|
type: "{{ .Values.pushgateway.service.type }}"
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.pushgateway.enabled .Values.serviceAccounts.pushgateway.create -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.pushgateway.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.serviceAccountName.pushgateway" . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,49 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.server.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
rules:
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
resources:
|
||||||
|
- podsecuritypolicies
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "prometheus.server.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- nodes
|
||||||
|
- nodes/proxy
|
||||||
|
- nodes/metrics
|
||||||
|
- services
|
||||||
|
- endpoints
|
||||||
|
- pods
|
||||||
|
- ingresses
|
||||||
|
- configmaps
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- "extensions"
|
||||||
|
resources:
|
||||||
|
- ingresses/status
|
||||||
|
- ingresses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
- nonResourceURLs:
|
||||||
|
- "/metrics"
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,18 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if and .Values.server.enabled .Values.rbac.create -}}
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ template "prometheus.serviceAccountName.server" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,83 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if (empty .Values.server.configMapOverrideName) -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
data:
|
||||||
|
{{- $root := . -}}
|
||||||
|
{{- range $key, $value := .Values.serverFiles }}
|
||||||
|
{{ $key }}: |
|
||||||
|
{{- if eq $key "prometheus.yml" }}
|
||||||
|
global:
|
||||||
|
{{ $root.Values.server.global | toYaml | trimSuffix "\n" | indent 6 }}
|
||||||
|
{{- if $root.Values.server.remoteWrite }}
|
||||||
|
remote_write:
|
||||||
|
{{ $root.Values.server.remoteWrite | toYaml | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $root.Values.server.remoteRead }}
|
||||||
|
remote_read:
|
||||||
|
{{ $root.Values.server.remoteRead | toYaml | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq $key "alerts" }}
|
||||||
|
{{- if and (not (empty $value)) (empty $value.groups) }}
|
||||||
|
groups:
|
||||||
|
{{- range $ruleKey, $ruleValue := $value }}
|
||||||
|
- name: {{ $ruleKey -}}.rules
|
||||||
|
rules:
|
||||||
|
{{ $ruleValue | toYaml | trimSuffix "\n" | indent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{ toYaml $value | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{ toYaml $value | default "{}" | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq $key "prometheus.yml" -}}
|
||||||
|
{{- if $root.Values.extraScrapeConfigs }}
|
||||||
|
{{ tpl $root.Values.extraScrapeConfigs $root | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if or ($root.Values.alertmanager.enabled) ($root.Values.server.alertmanagers) }}
|
||||||
|
alerting:
|
||||||
|
{{- if $root.Values.alertRelabelConfigs }}
|
||||||
|
{{ $root.Values.alertRelabelConfigs | toYaml | trimSuffix "\n" | indent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
alertmanagers:
|
||||||
|
{{- if $root.Values.server.alertmanagers }}
|
||||||
|
{{ toYaml $root.Values.server.alertmanagers | indent 8 }}
|
||||||
|
{{- else }}
|
||||||
|
- kubernetes_sd_configs:
|
||||||
|
- role: pod
|
||||||
|
tls_config:
|
||||||
|
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
|
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
{{- if $root.Values.alertmanager.prefixURL }}
|
||||||
|
path_prefix: {{ $root.Values.alertmanager.prefixURL }}
|
||||||
|
{{- end }}
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__meta_kubernetes_namespace]
|
||||||
|
regex: {{ $root.Release.Namespace }}
|
||||||
|
action: keep
|
||||||
|
- source_labels: [__meta_kubernetes_pod_label_app]
|
||||||
|
regex: {{ template "prometheus.name" $root }}
|
||||||
|
action: keep
|
||||||
|
- source_labels: [__meta_kubernetes_pod_label_component]
|
||||||
|
regex: alertmanager
|
||||||
|
action: keep
|
||||||
|
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_probe]
|
||||||
|
regex: {{ index $root.Values.alertmanager.podAnnotations "prometheus.io/probe" | default ".*" }}
|
||||||
|
action: keep
|
||||||
|
- source_labels: [__meta_kubernetes_pod_container_port_number]
|
||||||
|
regex:
|
||||||
|
action: drop
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,216 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if not .Values.server.statefulSet.enabled -}}
|
||||||
|
apiVersion: {{ template "prometheus.deployment.apiVersion" . }}
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.deploymentAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.deploymentAnnotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.server.replicaCount }}
|
||||||
|
{{- if .Values.server.strategy }}
|
||||||
|
strategy:
|
||||||
|
{{ toYaml .Values.server.strategy | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 8 }}
|
||||||
|
{{- if .Values.server.podLabels}}
|
||||||
|
{{ toYaml .Values.server.podLabels | nindent 8 }}
|
||||||
|
{{- end}}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.server.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.server.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.server.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ template "prometheus.serviceAccountName.server" . }}
|
||||||
|
{{- if .Values.server.extraInitContainers }}
|
||||||
|
initContainers:
|
||||||
|
{{ toYaml .Values.server.extraInitContainers | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
{{- if .Values.configmapReload.prometheus.enabled }}
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}-{{ .Values.configmapReload.prometheus.name }}
|
||||||
|
image: "{{ .Values.configmapReload.prometheus.image.repository }}:{{ .Values.configmapReload.prometheus.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.configmapReload.prometheus.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- --volume-dir=/etc/config
|
||||||
|
- --webhook-url=http://127.0.0.1:9090{{ .Values.server.prefixURL }}/-/reload
|
||||||
|
{{- range $key, $value := .Values.configmapReload.prometheus.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraVolumeDirs }}
|
||||||
|
- --volume-dir={{ . }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.configmapReload.prometheus.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
readOnly: true
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.configmapReload.prometheus.name }}-{{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}
|
||||||
|
image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
{{- if .Values.server.env }}
|
||||||
|
env:
|
||||||
|
{{ toYaml .Values.server.env | indent 12}}
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
{{- if .Values.server.retention }}
|
||||||
|
- --storage.tsdb.retention.time={{ .Values.server.retention }}
|
||||||
|
{{- end }}
|
||||||
|
- --config.file={{ .Values.server.configPath }}
|
||||||
|
- --storage.tsdb.path={{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
- --web.console.libraries=/etc/prometheus/console_libraries
|
||||||
|
- --web.console.templates=/etc/prometheus/consoles
|
||||||
|
{{- range .Values.server.extraFlags }}
|
||||||
|
- --{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.baseURL }}
|
||||||
|
- --web.external-url={{ .Values.server.baseURL }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- range $key, $value := .Values.server.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- containerPort: 9090
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.server.prefixURL }}/-/ready
|
||||||
|
port: 9090
|
||||||
|
initialDelaySeconds: {{ .Values.server.readinessProbeInitialDelay }}
|
||||||
|
timeoutSeconds: {{ .Values.server.readinessProbeTimeout }}
|
||||||
|
failureThreshold: {{ .Values.server.readinessProbeFailureThreshold }}
|
||||||
|
successThreshold: {{ .Values.server.readinessProbeSuccessThreshold }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.server.prefixURL }}/-/healthy
|
||||||
|
port: 9090
|
||||||
|
initialDelaySeconds: {{ .Values.server.livenessProbeInitialDelay }}
|
||||||
|
timeoutSeconds: {{ .Values.server.livenessProbeTimeout }}
|
||||||
|
failureThreshold: {{ .Values.server.livenessProbeFailureThreshold }}
|
||||||
|
successThreshold: {{ .Values.server.livenessProbeSuccessThreshold }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.server.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
- name: storage-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: "{{ .Values.server.persistentVolume.subPath }}"
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.server.name }}-{{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraVolumeMounts }}
|
||||||
|
{{ toYaml .Values.server.extraVolumeMounts | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.sidecarContainers }}
|
||||||
|
{{- toYaml .Values.server.sidecarContainers | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.server.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.server.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.server.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.server.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }}
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: {{ if .Values.server.configMapOverrideName }}{{ .Release.Name }}-{{ .Values.server.configMapOverrideName }}{{- else }}{{ template "prometheus.server.fullname" . }}{{- end }}
|
||||||
|
- name: storage-volume
|
||||||
|
{{- if .Values.server.persistentVolume.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ if .Values.server.persistentVolume.existingClaim }}{{ .Values.server.persistentVolume.existingClaim }}{{- else }}{{ template "prometheus.server.fullname" . }}{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir:
|
||||||
|
{{- if .Values.server.emptyDir.sizeLimit }}
|
||||||
|
sizeLimit: {{ .Values.server.emptyDir.sizeLimit }}
|
||||||
|
{{- else }}
|
||||||
|
{}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.server.extraVolumes }}
|
||||||
|
{{ toYaml .Values.server.extraVolumes | indent 8}}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
hostPath:
|
||||||
|
path: {{ .hostPath }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.configmapReload.prometheus.name }}-{{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.server.name }}-{{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraConfigmapMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,46 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if .Values.server.ingress.enabled -}}
|
||||||
|
{{- $releaseName := .Release.Name -}}
|
||||||
|
{{- $serviceName := include "prometheus.server.fullname" . }}
|
||||||
|
{{- $servicePort := .Values.server.service.servicePort -}}
|
||||||
|
{{- $extraPaths := .Values.server.ingress.extraPaths -}}
|
||||||
|
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{ else }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{ end -}}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.ingress.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
{{- range $key, $value := .Values.server.ingress.extraLabels }}
|
||||||
|
{{ $key }}: {{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
{{- range .Values.server.ingress.hosts }}
|
||||||
|
{{- $url := splitList "/" . }}
|
||||||
|
- host: {{ first $url }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{ if $extraPaths }}
|
||||||
|
{{ toYaml $extraPaths | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
- path: /{{ rest $url | join "/" }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: {{ $servicePort }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.server.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{ toYaml .Values.server.ingress.tls | indent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if .Values.networkPolicy.enabled }}
|
||||||
|
apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }}
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 6 }}
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- port: 9090
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.podDisruptionBudget.enabled }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
maxUnavailable: {{ .Values.server.podDisruptionBudget.maxUnavailable }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,55 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.rbac.create }}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
apiVersion: {{ template "prometheus.podSecurityPolicy.apiVersion" . }}
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.server.podSecurityPolicy.annotations }}
|
||||||
|
{{ toYaml .Values.server.podSecurityPolicy.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
allowedCapabilities:
|
||||||
|
- 'CHOWN'
|
||||||
|
volumes:
|
||||||
|
- 'configMap'
|
||||||
|
- 'persistentVolumeClaim'
|
||||||
|
- 'emptyDir'
|
||||||
|
- 'secret'
|
||||||
|
- 'hostPath'
|
||||||
|
allowedHostPaths:
|
||||||
|
- pathPrefix: /etc
|
||||||
|
readOnly: true
|
||||||
|
- pathPrefix: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- pathPrefix: {{ .hostPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
hostNetwork: false
|
||||||
|
hostPID: false
|
||||||
|
hostIPC: false
|
||||||
|
runAsUser:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
seLinux:
|
||||||
|
rule: 'RunAsAny'
|
||||||
|
supplementalGroups:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
fsGroup:
|
||||||
|
rule: 'MustRunAs'
|
||||||
|
ranges:
|
||||||
|
# Forbid adding the root group.
|
||||||
|
- min: 1
|
||||||
|
max: 65535
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,36 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if not .Values.server.statefulSet.enabled -}}
|
||||||
|
{{- if .Values.server.persistentVolume.enabled -}}
|
||||||
|
{{- if not .Values.server.persistentVolume.existingClaim -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.persistentVolume.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml .Values.server.persistentVolume.accessModes | indent 4 }}
|
||||||
|
{{- if .Values.server.persistentVolume.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.server.persistentVolume.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.server.persistentVolume.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.persistentVolume.volumeBindingMode }}
|
||||||
|
volumeBindingModeName: "{{ .Values.server.persistentVolume.volumeBindingMode }}"
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .Values.server.persistentVolume.size }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if .Values.server.statefulSet.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.statefulSet.headless.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.statefulSet.headless.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.statefulSet.headless.labels }}
|
||||||
|
{{ toYaml .Values.server.statefulSet.headless.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}-headless
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.server.statefulSet.headless.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9090
|
||||||
|
selector:
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,61 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.service.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.service.labels }}
|
||||||
|
{{ toYaml .Values.server.service.labels | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.server.service.clusterIP }}
|
||||||
|
clusterIP: {{ .Values.server.service.clusterIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{ toYaml .Values.server.service.externalIPs | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.loadBalancerIP }}
|
||||||
|
loadBalancerIP: {{ .Values.server.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- range $cidr := .Values.server.service.loadBalancerSourceRanges }}
|
||||||
|
- {{ $cidr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .Values.server.service.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9090
|
||||||
|
{{- if .Values.server.service.nodePort }}
|
||||||
|
nodePort: {{ .Values.server.service.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.service.gRPC.enabled }}
|
||||||
|
- name: grpc
|
||||||
|
port: {{ .Values.server.service.gRPC.servicePort }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 10901
|
||||||
|
{{- if .Values.server.service.gRPC.nodePort }}
|
||||||
|
nodePort: {{ .Values.server.service.gRPC.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- if and .Values.server.statefulSet.enabled .Values.server.service.statefulsetReplica.enabled }}
|
||||||
|
statefulset.kubernetes.io/pod-name: {{ .Release.Name }}-{{ .Values.server.name }}-{{ .Values.server.service.statefulsetReplica.replica }}
|
||||||
|
{{- else -}}
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.service.sessionAffinity }}
|
||||||
|
sessionAffinity: {{ .Values.server.service.sessionAffinity }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
type: "{{ .Values.server.service.type }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if .Values.serviceAccounts.server.create }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.serviceAccountName.server" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,224 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if .Values.server.statefulSet.enabled -}}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.statefulSet.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.statefulSet.annotations | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.server.statefulSet.labels}}
|
||||||
|
{{ toYaml .Values.server.statefulSet.labels | nindent 4 }}
|
||||||
|
{{- end}}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
spec:
|
||||||
|
serviceName: {{ template "prometheus.server.fullname" . }}-headless
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "prometheus.server.matchLabels" . | nindent 6 }}
|
||||||
|
replicas: {{ .Values.server.replicaCount }}
|
||||||
|
podManagementPolicy: {{ .Values.server.statefulSet.podManagementPolicy }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- if .Values.server.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.podAnnotations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 8 }}
|
||||||
|
{{- if .Values.server.statefulSet.labels}}
|
||||||
|
{{ toYaml .Values.server.statefulSet.labels | nindent 8 }}
|
||||||
|
{{- end}}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.server.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.server.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.priorityClassName }}
|
||||||
|
priorityClassName: "{{ .Values.server.priorityClassName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.schedulerName }}
|
||||||
|
schedulerName: "{{ .Values.server.schedulerName }}"
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ template "prometheus.serviceAccountName.server" . }}
|
||||||
|
containers:
|
||||||
|
{{- if .Values.configmapReload.prometheus.enabled }}
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}-{{ .Values.configmapReload.prometheus.name }}
|
||||||
|
image: "{{ .Values.configmapReload.prometheus.image.repository }}:{{ .Values.configmapReload.prometheus.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.configmapReload.prometheus.image.pullPolicy }}"
|
||||||
|
args:
|
||||||
|
- --volume-dir=/etc/config
|
||||||
|
- --webhook-url=http://127.0.0.1:9090{{ .Values.server.prefixURL }}/-/reload
|
||||||
|
{{- range $key, $value := .Values.configmapReload.prometheus.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraVolumeDirs }}
|
||||||
|
- --volume-dir={{ . }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.configmapReload.prometheus.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
readOnly: true
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.configmapReload.prometheus.name }}-{{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
- name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}
|
||||||
|
image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag }}"
|
||||||
|
imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
|
||||||
|
{{- if .Values.server.env }}
|
||||||
|
env:
|
||||||
|
{{ toYaml .Values.server.env | indent 12}}
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
{{- if .Values.server.retention }}
|
||||||
|
- --storage.tsdb.retention.time={{ .Values.server.retention }}
|
||||||
|
{{- end }}
|
||||||
|
- --config.file={{ .Values.server.configPath }}
|
||||||
|
- --storage.tsdb.path={{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
- --web.console.libraries=/etc/prometheus/console_libraries
|
||||||
|
- --web.console.templates=/etc/prometheus/consoles
|
||||||
|
{{- range .Values.server.extraFlags }}
|
||||||
|
- --{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $key, $value := .Values.server.extraArgs }}
|
||||||
|
- --{{ $key }}={{ $value }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.baseURL }}
|
||||||
|
- --web.external-url={{ .Values.server.baseURL }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- containerPort: 9090
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.server.prefixURL }}/-/ready
|
||||||
|
port: 9090
|
||||||
|
initialDelaySeconds: {{ .Values.server.readinessProbeInitialDelay }}
|
||||||
|
timeoutSeconds: {{ .Values.server.readinessProbeTimeout }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: {{ .Values.server.prefixURL }}/-/healthy
|
||||||
|
port: 9090
|
||||||
|
initialDelaySeconds: {{ .Values.server.livenessProbeInitialDelay }}
|
||||||
|
timeoutSeconds: {{ .Values.server.livenessProbeTimeout }}
|
||||||
|
resources:
|
||||||
|
{{ toYaml .Values.server.resources | indent 12 }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
- name: storage-volume
|
||||||
|
mountPath: {{ .Values.server.persistentVolume.mountPath }}
|
||||||
|
subPath: "{{ .Values.server.persistentVolume.subPath }}"
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.server.name }}-{{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
subPath: {{ .subPath }}
|
||||||
|
readOnly: {{ .readOnly }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraVolumeMounts }}
|
||||||
|
{{ toYaml .Values.server.extraVolumeMounts | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.sidecarContainers }}
|
||||||
|
{{- toYaml .Values.server.sidecarContainers | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ toYaml .Values.server.nodeSelector | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{ toYaml .Values.server.securityContext | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{ toYaml .Values.server.tolerations | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{ toYaml .Values.server.affinity | indent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }}
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: {{ if .Values.server.configMapOverrideName }}{{ .Release.Name }}-{{ .Values.server.configMapOverrideName }}{{- else }}{{ template "prometheus.server.fullname" . }}{{- end }}
|
||||||
|
{{- range .Values.server.extraHostPathMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
hostPath:
|
||||||
|
path: {{ .hostPath }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.configmapReload.prometheus.name }}-{{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraConfigmapMounts }}
|
||||||
|
- name: {{ $.Values.server.name }}-{{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.server.extraSecretMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.configmapReload.prometheus.extraConfigmapMounts }}
|
||||||
|
- name: {{ .name }}
|
||||||
|
configMap:
|
||||||
|
name: {{ .configMap }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.extraVolumes }}
|
||||||
|
{{ toYaml .Values.server.extraVolumes | indent 8}}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.server.persistentVolume.enabled }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: storage-volume
|
||||||
|
{{- if .Values.server.persistentVolume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml .Values.server.persistentVolume.annotations | indent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{ toYaml .Values.server.persistentVolume.accessModes | indent 10 }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .Values.server.persistentVolume.size }}"
|
||||||
|
{{- if .Values.server.persistentVolume.storageClass }}
|
||||||
|
{{- if (eq "-" .Values.server.persistentVolume.storageClass) }}
|
||||||
|
storageClassName: ""
|
||||||
|
{{- else }}
|
||||||
|
storageClassName: "{{ .Values.server.persistentVolume.storageClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
- name: storage-volume
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,26 @@
|
||||||
|
{{ if .Values.global.prometheus.enabled }}
|
||||||
|
{{- if .Values.server.enabled -}}
|
||||||
|
{{- if .Values.server.verticalAutoscaler.enabled -}}
|
||||||
|
apiVersion: autoscaling.k8s.io/v1beta2
|
||||||
|
kind: VerticalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "prometheus.server.labels" . | nindent 4 }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}-vpa
|
||||||
|
spec:
|
||||||
|
targetRef:
|
||||||
|
{{- if .Values.server.statefulSet.enabled }}
|
||||||
|
apiVersion: "apps/v1"
|
||||||
|
kind: StatefulSet
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: "extensions/v1beta1"
|
||||||
|
kind: Deployment
|
||||||
|
{{- end }}
|
||||||
|
name: {{ template "prometheus.server.fullname" . }}
|
||||||
|
updatePolicy:
|
||||||
|
updateMode: {{ .Values.server.verticalAutoscaler.updateMode | default "Off" | quote }}
|
||||||
|
resourcePolicy:
|
||||||
|
containerPolicies: {{ .Values.server.verticalAutoscaler.containerPolicies | default list | toYaml | trim | nindent 4 }}
|
||||||
|
{{- end -}} {{/* if .Values.server.verticalAutoscaler.enabled */}}
|
||||||
|
{{- end -}} {{/* .Values.server.enabled */}}
|
||||||
|
{{ end }}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,21 @@
|
||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
|
@ -0,0 +1,18 @@
|
||||||
|
apiVersion: v1
|
||||||
|
appVersion: 0.19.0
|
||||||
|
description: Thanos is a set of components that can be composed into a highly available
|
||||||
|
metric system with unlimited storage capacity, which can be added seamlessly on
|
||||||
|
top of existing Prometheus deployments.
|
||||||
|
icon: https://raw.githubusercontent.com/thanos-io/thanos/master/website/static/Thanos-logo_full.svg
|
||||||
|
keywords:
|
||||||
|
- thanos
|
||||||
|
- prometheus
|
||||||
|
- metrics
|
||||||
|
maintainers:
|
||||||
|
- email: info@banzaicloud.com
|
||||||
|
name: Banzai Cloud
|
||||||
|
name: thanos
|
||||||
|
sources:
|
||||||
|
- https://github.com/thanos-io/thanos
|
||||||
|
- https://github.com/banzaicloud/banzai-charts/tree/master/thanos
|
||||||
|
version: 0.19.0
|
|
@ -0,0 +1,51 @@
|
||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "thanos.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "thanos.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "thanos.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified component name from the full app name and a component name.
|
||||||
|
We truncate the full name at 63 - 1 (last dash) - len(component name) chars because some Kubernetes name fields are limited to this (by the DNS naming spec)
|
||||||
|
and we want to make sure that the component is included in the name.
|
||||||
|
*/}}
|
||||||
|
{{- define "thanos.componentname" -}}
|
||||||
|
{{- $global := index . 0 -}}
|
||||||
|
{{- $component := index . 1 | trimPrefix "-" -}}
|
||||||
|
{{- printf "%s-%s" (include "thanos.fullname" $global | trunc (sub 62 (len $component) | int) | trimSuffix "-" ) $component | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
|
||||||
|
*/}}
|
||||||
|
{{- define "thanos.secretname" }}
|
||||||
|
{{- default (include "thanos.name" .) .Values.storeSecretName }}
|
||||||
|
{{- end }}
|
|
@ -0,0 +1,91 @@
|
||||||
|
{{ if .Values.global.thanos.enabled }}
|
||||||
|
{{ if .Values.bucket.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "thanos.componentname" (list $ "bucket") }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "thanos.name" . }}
|
||||||
|
helm.sh/chart: {{ include "thanos.chart" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/component: bucket
|
||||||
|
{{ with .Values.bucket.deploymentLabels }}{{ toYaml . | indent 4 }}{{ end -}}
|
||||||
|
{{- with .Values.bucket.deploymentAnnotations }}
|
||||||
|
annotations: {{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.bucket.replicaCount | default 1 }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ include "thanos.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: bucket
|
||||||
|
{{ with .Values.bucket.deploymentMatchLabels }}{{ toYaml . | indent 6 }}{{ end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "thanos.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/component: bucket
|
||||||
|
{{ with .Values.bucket.labels }}{{ toYaml . | indent 8 }}{{ end }}
|
||||||
|
{{- with .Values.bucket.annotations }}
|
||||||
|
annotations: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{ toYaml .Values.imagePullSecrets | indent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: thanos-bucket
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
env: {{- with .Values.bucket.extraEnv }}{{ toYaml . | nindent 8 }}{{- end }}
|
||||||
|
args:
|
||||||
|
- "tools"
|
||||||
|
- "bucket"
|
||||||
|
- "web"
|
||||||
|
- "--log.level={{ .Values.bucket.logLevel }}"
|
||||||
|
- "--http-address=0.0.0.0:{{ .Values.bucket.http.port }}"
|
||||||
|
- "--objstore.config-file=/etc/config/object-store.yaml"
|
||||||
|
{{- if .Values.bucket.refresh }}
|
||||||
|
- "--refresh={{ .Values.bucket.refresh }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.bucket.timeout }}
|
||||||
|
- "--timeout={{ .Values.bucket.timeout }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.bucket.label }}
|
||||||
|
- "--label={{ .Values.bucket.label }}"
|
||||||
|
{{- end }}
|
||||||
|
{{ with .Values.bucket.extraArgs }}{{ toYaml . | nindent 8 }}{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.bucket.http.port }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/config
|
||||||
|
readOnly: true
|
||||||
|
resources: {{ toYaml .Values.bucket.resources | nindent 10 }}
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
secret:
|
||||||
|
secretName: {{ include "thanos.secretname" . }}
|
||||||
|
{{- with .Values.bucket.securityContext }}
|
||||||
|
securityContext: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.bucket.nodeSelector }}
|
||||||
|
nodeSelector: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.bucket.affinity }}
|
||||||
|
affinity: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.bucket.tolerations }}
|
||||||
|
tolerations: {{ toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.bucket.serviceAccount }}
|
||||||
|
serviceAccountName: "{{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end }}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue