From 4b1939a8e1352774a1575a2ae433002819512f4a Mon Sep 17 00:00:00 2001 From: Min RK <benjaminrk@gmail.com> Date: Mon, 30 Apr 2018 14:42:34 +0200 Subject: [PATCH] update prometheus, grafana charts latest grafana chart has easier management of configuration via yaml rather than requiring all grafana.ini in a single scalar field --- config/prod.yaml | 53 ++++++++++++++++++------------ config/staging.yaml | 36 +++++++++++++-------- mybinder/requirements.yaml | 5 ++- mybinder/values.yaml | 62 ++++++++++-------------------------- secrets/config/prod.yaml | Bin 2911 -> 2949 bytes secrets/config/staging.yaml | Bin 2920 -> 2958 bytes 6 files changed, 73 insertions(+), 83 deletions(-) diff --git a/config/prod.yaml b/config/prod.yaml index 82741b1e5..966a98958 100644 --- a/config/prod.yaml +++ b/config/prod.yaml @@ -64,21 +64,32 @@ binderhub: googleAnalyticsDomain: "mybinder.org" grafana: - server: - resources: - requests: - cpu: "0.2" - memory: 512Mi - limits: - cpu: "0.2" - memory: 512Mi - ingress: - hosts: - - grafana.mybinder.org - tls: - - hosts: - - grafana.mybinder.org - secretName: kubelego-tls-grafana + resources: + requests: + cpu: "0.2" + memory: 512Mi + limits: + cpu: "0.2" + memory: 512Mi + ingress: + hosts: + - grafana.mybinder.org + tls: + - hosts: + - grafana.mybinder.org + secretName: kubelego-tls-grafana + datasources: + datasources.yaml: + apiVersion: 1 + datasources: + - name: prometheus + orgId: 1 + type: prometheus + url: https://prometheus.staging.mybinder.org + access: direct + isDefault: true + editable: false + prometheus: server: @@ -95,12 +106,12 @@ prometheus: storageClass: ssd retention: 60d ingress: - hosts: - - prometheus.mybinder.org - tls: - - hosts: - - prometheus.mybinder.org - secretName: kubelego-tls-prometheus + hosts: + - prometheus.mybinder.org + tls: + - hosts: + - prometheus.mybinder.org + secretName: kubelego-tls-prometheus nginx-ingress: controller: diff --git a/config/staging.yaml b/config/staging.yaml index 8acbb41c5..f3f2f2c84 100644 --- a/config/staging.yaml +++ b/config/staging.yaml @@ -26,24 +26,34 @@ binderhub: - hub.staging.mybinder.org grafana: + ingress: + hosts: + - grafana.staging.mybinder.org + tls: + - hosts: + - grafana.staging.mybinder.org + secretName: kubelego-tls-grafana + datasources: + datasources.yaml: + apiVersion: 1 + datasources: + - name: prometheus + orgId: 1 + type: prometheus + url: https://prometheus.staging.mybinder.org + access: direct + isDefault: true + editable: false + +prometheus: server: ingress: hosts: - - grafana.staging.mybinder.org + - prometheus.staging.mybinder.org tls: - hosts: - - grafana.staging.mybinder.org - secretName: kubelego-tls-grafana - -prometheus: - server: - ingress: - hosts: - - prometheus.staging.mybinder.org - tls: - - hosts: - - prometheus.staging.mybinder.org - secretName: kubelego-tls-prometheus + - prometheus.staging.mybinder.org + secretName: kubelego-tls-prometheus nginx-ingress: controller: diff --git a/mybinder/requirements.yaml b/mybinder/requirements.yaml index 049ea92b8..96166888f 100644 --- a/mybinder/requirements.yaml +++ b/mybinder/requirements.yaml @@ -3,11 +3,10 @@ dependencies: version: 0.8.13 repository: https://kubernetes-charts.storage.googleapis.com - name: prometheus - # Pin to 5.2.x until https://github.com/kubernetes/charts/pull/3546#issuecomment-367542705 is sorted - version: 5.2.1 + version: 6.2.1 repository: https://kubernetes-charts.storage.googleapis.com - name: grafana - version: 0.6.1 + version: 1.2.0 repository: https://kubernetes-charts.storage.googleapis.com - name: kube-lego version: 0.1.12 diff --git a/mybinder/values.yaml b/mybinder/values.yaml index 3a8b50a15..168d03863 100644 --- a/mybinder/values.yaml +++ b/mybinder/values.yaml @@ -162,53 +162,23 @@ kube-lego: create: true grafana: - server: - image: "minrk/grafana:4.6.3-pr142" - ingress: - enabled: true - annotations: - kubernetes.io/ingress.class: nginx - kubernetes.io/tls-acme: "true" - serverConfigFile: - grafana.ini: | - ; instance_name = ${HOSTNAME} - [paths] - data = /var/lib/grafana/data - logs = /var/log/grafana - plugins = /var/lib/grafana/plugins - - [snapshots] - external_enabled = true - external_snapshot_url = https://snapshots-origin.raintank.io - external_snapshot_name = Publish to snapshot.raintank.io - - [users] - ;allow_sign_up = true - ;allow_org_create = true - ;auto_assign_org = true - ;auto_assign_org_role = Viewer - ;login_hint = email or username - ;default_theme = dark - - [auth.anonymous] - enabled = true - org_name = Main Org. - org_role = Viewer - - [log] - mode = console - level = info - - [dashboards.json] - enabled = true - path = /var/lib/grafana/dashboards - - [grafana_net] - url = https://grafana.net - - [smtp] - enabled = true + ingress: + enabled: true + annotations: + kubernetes.io/ingress.class: nginx + kubernetes.io/tls-acme: "true" + persistence: + enabled: true + accessModes: + - ReadWriteOnce + grafana.ini: + auth.anonymous: + enabled: true + org_name: Main Org. + org_role: Viewer + smtp: + enabled: true prometheus: nodeExporter: diff --git a/secrets/config/prod.yaml b/secrets/config/prod.yaml index 949939630ec769dad4797e7f33c3bbec929296b4..ac8dc5ee3e427f7216c5da269864408f73cbdf1c 100644 GIT binary patch literal 2949 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 literal 2911 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 Jx@5M%QsVtpu$}+_ diff --git a/secrets/config/staging.yaml b/secrets/config/staging.yaml index f1403b1996bf7b4bc770bd255ab973cd44bd708b..4305674cf64e1b3f3cc8a9dd7966d7f34576721c 100644 GIT binary patch literal 2958 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 EwFGp|-v9sr literal 2920 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 SJZ%CkmK{$G2=4#;k%o%7iKHd~