You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by li...@apache.org on 2023/03/20 05:16:50 UTC

[incubator-devlake-helm-chart] branch main updated: feat: optional grafana install (#94)

This is an automated email from the ASF dual-hosted git repository.

likyh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake-helm-chart.git


The following commit(s) were added to refs/heads/main by this push:
     new 50a83e2  feat: optional grafana install (#94)
50a83e2 is described below

commit 50a83e21f0c14d7172fea2555ffdc12211ea9570
Author: Ji Bin <ma...@live.com>
AuthorDate: Mon Mar 20 13:16:44 2023 +0800

    feat: optional grafana install (#94)
---
 HelmSetup.md                              |  4 ++-
 charts/devlake/Chart.yaml                 |  4 +--
 charts/devlake/templates/configmaps.yaml  | 47 ++++++++++++++++++++++++++
 charts/devlake/templates/deployments.yaml | 14 +++++++-
 charts/devlake/templates/ingresses.yaml   | 55 ++++++++++++++++++++++++++++++-
 charts/devlake/templates/services.yaml    |  2 ++
 charts/devlake/values.yaml                |  6 +++-
 7 files changed, 126 insertions(+), 6 deletions(-)

diff --git a/HelmSetup.md b/HelmSetup.md
index 72ec85b..03db399 100644
--- a/HelmSetup.md
+++ b/HelmSetup.md
@@ -130,6 +130,8 @@ Some useful parameters for the chart, you could also check them in values.yaml
 | mysql.image.pullPolicy        | pullPolicy for mysql's image                             | IfNotPresent               |
 | grafana.image.repository      | repository for grafana's image                           | apache/devlake-dashboard   |
 | grafana.image.pullPolicy      | pullPolicy for grafana's image                           | Always                     |
+| grafana.useExternal           | If use external grafana server                           | false                      |
+| grafana.externalUrl           | external grafana server if use external                  | ""                         |
 | lake.storage.class            | storage class for lake's volume                          | ""                         |
 | lake.storage.size             | volume size for lake's data                              | 100Mi                      |
 | lake.image.repository         | repository for lake's image                              | apache/devlake             |
@@ -146,7 +148,7 @@ Some useful parameters for the chart, you could also check them in values.yaml
 | service.uiPort                | Node port for config ui                                  | 32001                      |
 | service.ingress.enabled       | If enable ingress                                        | false                      |
 | service.ingress.enableHttps   | If enable https                                          | false                      |
-| service.ingress.className     | Class name for ingressClass. leave empty for using default | ""                         |
+| service.ingress.className     | Name for ingressClass. leave empty for using default     | ""                         |
 | service.ingress.hostname      | The hostname/domainname for ingress                      | localhost                  |
 | service.ingress.prefix        | The prefix for endpoints, currently not used             | /                          |
 | service.ingress.tlsSecretName | The secret name for tls's certificate for https          | ""                         |
diff --git a/charts/devlake/Chart.yaml b/charts/devlake/Chart.yaml
index 76ec6cc..59aa0cd 100644
--- a/charts/devlake/Chart.yaml
+++ b/charts/devlake/Chart.yaml
@@ -29,7 +29,7 @@ type: application
 
 
 # Chart version
-version: 0.16.0-beta8
+version: 0.16.0-beta9
 
 # devlake version
-appVersion: v0.16.0-beta8
+appVersion: v0.16.0-beta9
diff --git a/charts/devlake/templates/configmaps.yaml b/charts/devlake/templates/configmaps.yaml
index 3d73180..1138835 100644
--- a/charts/devlake/templates/configmaps.yaml
+++ b/charts/devlake/templates/configmaps.yaml
@@ -40,6 +40,52 @@ data:
 ---
 apiVersion: v1
 kind: ConfigMap
+metadata:
+  name: {{ include "devlake.fullname" . }}-nginx-conf
+data:
+  default.conf.tpl: |
+    server {
+      listen 4000;
+      server_name localhost;
+    ${SERVER_CONF}
+
+      location / {
+        root /usr/share/nginx/html;
+        index index.html;
+        try_files $uri /index.html;
+      }
+
+      location /api/ {
+        resolver ${DNS} valid=${DNS_VALID};
+        resolver_timeout 3s;
+        set $target "${DEVLAKE_ENDPOINT}";
+        rewrite /api/(.*) /$1  break;
+        proxy_send_timeout 10s;
+        proxy_read_timeout 10s;
+        proxy_pass http://$target;
+      }
+{{- if .Values.grafana.useExternal }}
+      location /grafana/ {
+        return 302 ${GRAFANA_ENDPOINT};
+      }
+{{- else }}
+      location /grafana/ {
+        resolver ${DNS} valid=${DNS_VALID};
+        resolver_timeout 3s;
+        set $target "${GRAFANA_ENDPOINT}";
+        rewrite /grafana/(.*) /$1  break;
+        proxy_set_header Authorization "";
+        proxy_send_timeout 10s;
+        proxy_read_timeout 10s;
+        proxy_pass http://$target;
+      }
+{{- end }}
+    }
+
+---
+{{- if not .Values.grafana.useExternal }}
+apiVersion: v1
+kind: ConfigMap
 metadata:
   name: {{ include "devlake.fullname" . }}-grafana-datasource
 data:
@@ -71,3 +117,4 @@ data:
 #          postgresVersion: 1000 # support pgsql 10.0 and above
 #          timescaledb: false
 {{- end }}
+{{- end }}
diff --git a/charts/devlake/templates/deployments.yaml b/charts/devlake/templates/deployments.yaml
index e64a226..e1b3616 100644
--- a/charts/devlake/templates/deployments.yaml
+++ b/charts/devlake/templates/deployments.yaml
@@ -16,6 +16,7 @@
 #
 
 ---
+{{- if not .Values.grafana.useExternal }}
 # grafana
 apiVersion: apps/v1
 kind: Deployment
@@ -91,7 +92,7 @@ spec:
         - name: {{ include "devlake.fullname" . }}-grafana-datasource-config
           configMap:
             name: {{ include "devlake.fullname" . }}-grafana-datasource
-
+{{ end }}
 ---
 # devlake-ui
 apiVersion: apps/v1
@@ -124,14 +125,22 @@ spec:
             - name: DEVLAKE_ENDPOINT
               # TODO: remove hardcoded `cluster.local`
               value: {{ include "devlake.fullname" . }}-lake.{{ .Release.Namespace }}.svc.cluster.local:8080
+{{- if .Values.grafana.useExternal }}
+            - name: GRAFANA_ENDPOINT
+              value: {{ .Values.grafana.externalUrl }}
+{{- else }}
             - name: GRAFANA_ENDPOINT
               value: {{ include "devlake.fullname" . }}-grafana.{{ .Release.Namespace }}.svc.cluster.local:3000
+{{- end }}
           volumeMounts:
             {{- if ne .Values.option.localtime "" }}
             - name: {{ include "devlake.fullname" . }}-ui-localtime
               mountPath: /etc/localtime
               readOnly: true
             {{- end }}
+            - name: {{ include "devlake.fullname" . }}-nginx-conf-config
+              mountPath: /etc/nginx/conf.d/default.conf.tpl
+              subPath: default.conf.tpl
           {{- with .Values.ui.resources }}
           resources:
             {{- toYaml . | nindent 12 }}
@@ -155,3 +164,6 @@ spec:
             path: {{ .Values.option.localtime }}
             type: File
         {{- end }}
+        - name: {{ include "devlake.fullname" . }}-nginx-conf-config
+          configMap:
+            name: {{ include "devlake.fullname" . }}-nginx-conf
diff --git a/charts/devlake/templates/ingresses.yaml b/charts/devlake/templates/ingresses.yaml
index eb79ed7..8406ab4 100644
--- a/charts/devlake/templates/ingresses.yaml
+++ b/charts/devlake/templates/ingresses.yaml
@@ -14,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
----
 {{- if .Values.ingress.enabled -}}
 {{- $fullName := include "devlake.fullname" . -}}
 {{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
@@ -22,6 +21,8 @@
   {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
   {{- end }}
 {{- end }}
+
+---
 {{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
 apiVersion: networking.k8s.io/v1
 {{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
@@ -53,6 +54,7 @@ spec:
     - host: {{ .Values.ingress.hostname | quote }}
       http:
         paths:
+          {{- if not .Values.grafana.useExternal }}
           - path: /{{ include "devlake.grafanaEndpointPrefix" . }}(/|$)(.*)
             {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }}
             pathType: Prefix
@@ -67,6 +69,7 @@ spec:
               serviceName: {{ include "devlake.fullname" . }}-grafana
               servicePort: 3000
               {{- end }}
+            {{- end }}
           - path: /{{ include "devlake.uiEndpointPrefix" . }}(/?|$)(.*)
             {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }}
             pathType: Prefix
@@ -81,4 +84,54 @@ spec:
               serviceName: {{ include "devlake.fullname" . }}-ui
               servicePort: 4000
               {{- end }}
+
+{{- if .Values.grafana.useExternal }}
+---
+{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1
+{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1beta1
+{{- else -}}
+apiVersion: extensions/v1beta1
+{{- end }}
+kind: Ingress
+metadata:
+  name: {{ $fullName }}-ext-grafana
+  labels:
+    {{- include "devlake.labels" . | nindent 4 }}
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+    nginx.ingress.kubernetes.io/permanent-redirect: {{ .Values.grafana.externalUrl }}
+  {{- with .Values.ingress.annotations }}
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- end }}
+  {{- if .Values.ingress.enableHttps }}
+  tls:
+    - hosts:
+        - {{ .Values.ingress.hostname }}
+      secretName: {{ .Values.ingress.tlsSecretName }}
+  {{- end }}
+  rules:
+    - host: {{ .Values.ingress.hostname | quote }}
+      http:
+        paths:
+          - path: /{{ include "devlake.grafanaEndpointPrefix" . }}(/|$)(.*)
+            {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }}
+            pathType: Prefix
+            {{- end }}
+            backend: # dummy to config-ui, actual 302 forearding for external grafana
+              {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
+              service:
+                name: {{ include "devlake.fullname" . }}-ui
+                port:
+                  number: 4000
+              {{- else }}
+              serviceName: {{ include "devlake.fullname" . }}-ui
+              servicePort: 4000
+              {{- end }}
+{{- end }}
 {{- end }}
diff --git a/charts/devlake/templates/services.yaml b/charts/devlake/templates/services.yaml
index 9784360..586e84e 100644
--- a/charts/devlake/templates/services.yaml
+++ b/charts/devlake/templates/services.yaml
@@ -55,6 +55,7 @@ spec:
 #{{- end }}
 {{- end }}
 
+{{- if not .Values.grafana.useExternal }}
 # grafana services
 ---
 apiVersion: v1
@@ -76,6 +77,7 @@ spec:
       {{- if eq .Values.service.type "NodePort" }}
       nodePort: {{ .Values.service.grafanaPort }}
       {{- end }}
+{{ end }}
 
 # devlake services
 ---
diff --git a/charts/devlake/values.yaml b/charts/devlake/values.yaml
index 71bc60f..e9f47a7 100644
--- a/charts/devlake/values.yaml
+++ b/charts/devlake/values.yaml
@@ -17,7 +17,7 @@
 
 # replica count for dev
 replicaCount: 1
-imageTag: v0.16.0-beta8
+imageTag: v0.16.0-beta9
 
 mysql:
   # if use external mysql server, please set true
@@ -116,6 +116,10 @@ grafana:
     repository: apache/devlake-dashboard
     pullPolicy: Always
 
+  useExternal: false
+
+  externalUrl: ''
+
   resources: {}
 
   nodeSelector: {}