Skip to content
This repository has been archived by the owner on Feb 22, 2022. It is now read-only.

Initial commit of Redash chart. #5071

Closed
wants to merge 17 commits into from
Closed
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions stable/redash/.helmignore
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions stable/redash/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: v1
name: redash
version: 0.1.0
grugnog marked this conversation as resolved.
Show resolved Hide resolved
appVersion: 4.0.1.b4038
grugnog marked this conversation as resolved.
Show resolved Hide resolved
description: Redash is an open source tool built for teams to query, visualize and collaborate.
keywords:
- redash
- analytics
- vizualisation
home: https://redash.io/
sources:
- https://github.com/getredash/redash
icon: https://redash.io/assets/images/elements/redash-logo.svg
maintainers:
- name: grugnog
email: owen.barton@civicactions.com
engine: gotpl
115 changes: 115 additions & 0 deletions stable/redash/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Redash

[Redash](http://redash.io/) is an open source tool built for teams to query, visualize and collaborate. Redash is quick to setup and works with any data source you might need so you can query from anywhere in no time.

## TL;DR

```bash
$ helm install stable/redash
```

## Introduction

This chart bootstraps a [Redash](https://github.com/getredash/redash) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.

## Prerequisites

- At least 3 GB of RAM available on your cluster
- Kubernetes 1.4+ with Beta APIs enabled
grugnog marked this conversation as resolved.
Show resolved Hide resolved
- PV provisioner support in the underlying infrastructure

## Installing the Chart

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

```bash
$ helm install --name my-release stable/redash
```

The command deploys Redash 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:

```bash
$ helm delete my-release
```

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

## Configuration

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

| Parameter | Description | Default |
|----------------------------------------|-------------------------------------------------------|--------------------|
| `image.registry` | Redash Image registry | `docker.io` |
grugnog marked this conversation as resolved.
Show resolved Hide resolved
| `image.repository` | Redash Image name | `redash/redash` |
| `image.tag` | Redash Image tag | `{VERSION}` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `image.pullSecrets` | Specify docker-ragistry secret names as an array | `nil` |
| `cookieSecret` | Secret used for cookie session management | Randomly generated |
| `env` | Environment variables from [Redash settings](https://redash.io/help-onpremise/setup/settings-environment-variables.html) and [example Docker Compose](https://github.com/getredash/redash/blob/master/docker-compose.production.yml). Variables applied to both server and worker containers. | `PYTHONUNBUFFERED: 0`<br>`REDASH_LOG_LEVEL: "INFO"` |
| `server.name` | Name used for Redash server deployment | `redash` |
| `server.httpPort` | Redash server container http port | `5000` |
| `server.env` | Environment variables from [Redash settings](https://redash.io/help-onpremise/setup/settings-environment-variables.html) and [example Docker Compose](https://github.com/getredash/redash/blob/master/docker-compose.production.yml). Variables applied to only server containers. | `REDASH_WEB_WORKERS: 4` |
| `server.replicaCount` | Number of Redash server replicas to start | `1` |
| `server.resources` | Server CPU/Memory resource requests/limits | Memory `2GB` |
| `server.nodeSelector` | Node labels for server pod assignment | `{}` |
| `server.tolerations` | List of node taints to tolerate for server pod | `[]` |
| `server.affinity` | Affinity settings for server pod assignment | `{}` |
| `service.type` | Kubernetes Service type | `ClusterIP` |
| `service.port` | Service external port | `80` |
| `ingress.enabled` | Enable ingress controller resource | `false` |
| `ingress.annotations` | Ingress annotations configuration | `nil` |
| `ingress.path` | Ingress resource path | `nil` |
| `ingress.hosts` | Ingress resource hostnames | `nil` |
| `ingress.tls` | Ingress TLS configuration | `nil` |
| `adhocWorker.name` | Name used for Redash ad-hoc worker deployment | `worker-adhoc` |
| `adhocWorker.env` | Environment variables from [Redash settings](https://redash.io/help-onpremise/setup/settings-environment-variables.html) and [example Docker Compose](https://github.com/getredash/redash/blob/master/docker-compose.production.yml). Variables applied to only ad-hoc worker containers. Default worker count will run 2 worker threads per-replica. | `QUEUES: "queries,celery"`<br>`WORKERS_COUNT: 2` |
| `adhocWorker.replicaCount` | Number of Redash adhoc worker replicas to start | `1` |
| `adhocWorker.resources` | Ad-hoc worker CPU/Memory resource requests/limits | `nil` |
| `adhocWorker.nodeSelector` | Node labels for adhocWorker pod assignment | `{}` |
| `adhocWorker.tolerations` | List of node taints to tolerate for adhocWorker pod | `[]` |
| `adhocWorker.affinity` | Affinity settings for adhocWorker pod assignment | `{}` |
| `scheduledWorker.name` | Name used for Redash scheduled worker deployment | `worker-scheduled` |
| `scheduledWorker.env` | Environment variables from [Redash settings](https://redash.io/help-onpremise/setup/settings-environment-variables.html) and [example Docker Compose](https://github.com/getredash/redash/blob/master/docker-compose.production.yml). Variables applied to only scheduled worker containers. Default worker count will run 2 worker threads per-replica. | `QUEUES: "scheduled_queries"`<br>`WORKERS_COUNT: 2` |
| `scheduledWorker.replicaCount` | Number of Redash scheduled worker replicas to start | `1` |
| `scheduledWorker.resources` | Scheduled worker CPU/Memory resource requests/limits | `nil` |
| `scheduledWorker.nodeSelector` | Node labels for scheduledWorker pod assignment | `{}` |
| `scheduledWorker.tolerations` | List of node taints to tolerate for scheduledWorker pod | `[]` |
| `scheduledWorker.affinity` | Affinity settings for scheduledWorker pod assignment | `{}` |
| `externalPostgreSQL` | Connection string for external PostgreSQL server, if disabling the PostgreSQL chart | `nil` |
| `postgresql.enabled` | Whether to use the PostgreSQL chart | `true` |
| `postgresql.name` | Name used for PostgreSQL deployment | `postgresql` |
| `postgresql.imageTag` | PostgreSQL image version | `9.5.6-alpine` |
| `postgresql.postgresqlUsername` | PostgreSQL User to create | `redash` |
| `postgresql.postgresqlPassword` | PostgreSQL Password for the new user | random 10 character long alphanumeric string |
| `postgresql.postgresqlDatabase` | PostgreSQL Database to create | `redash` |
| `postgresql.persistence.enabled` | Use a PVC to persist PostgreSQL data | `true` |
| `postgresql.persistence.size` | PVC Storage Request size for PostgreSQL volume | `10Gi` |
| `postgresql.persistence.accessMode` | Use PostgreSQL volume as ReadOnly or ReadWrite | `ReadWriteOnce` |
| `postgresql.persistence.storageClass` | Storage Class for PostgreSQL backing PVC | `nil`<br>(uses alpha storage class annotation) |
| `postgresql.persistence.existingClaim` | Provide an existing PostgreSQL PersistentVolumeClaim | `nil` |
| `redis.name` | Name used for Redis deployment | `redis` |
| `redis.redisPassword` | Redis Password to use | random 10 character long alphanumeric string |

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

```bash
$ helm install --name my-release \
--set cookieSecret=verysecret \
stable/redash
```

The above command sets the Redash cookie secret to `verysecret`.

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

```bash
$ helm install --name my-release -f values.yaml stable/redash
```
> **Tip**: You can use the default [values.yaml](values.yaml)
9 changes: 9 additions & 0 deletions stable/redash/requirements.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
dependencies:
- name: redis
repository: https://kubernetes-charts.storage.googleapis.com/
version: 5.3.0
- name: postgresql
repository: https://kubernetes-charts.storage.googleapis.com/
version: 3.9.3
digest: sha256:5e955a05a1eb5e3330f86b0a7bbe7b76c8b4eb829edbde39aad40f464363bbf6
generated: 2019-01-23T16:23:07.055667082-08:00
8 changes: 8 additions & 0 deletions stable/redash/requirements.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
dependencies:
- name: redis
version: "^5.0.0"
repository: "https://kubernetes-charts.storage.googleapis.com/"
- name: postgresql
version: "^3.0.0"
repository: "https://kubernetes-charts.storage.googleapis.com/"
condition: postgresql.enabled
19 changes: 19 additions & 0 deletions stable/redash/templates/NOTES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range .Values.ingress.hosts }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "redash.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 -w {{ template "redash.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "redash.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo 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 "redash.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:{{ .Values.server.httpPort }}
{{- end }}
61 changes: 61 additions & 0 deletions stable/redash/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "redash.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "redash.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified app name.
We truncate at 43 chars because some Kubernetes name fields are limited to 64 (by the DNS naming spec),
and we use this as a base for component names (which can add up to 20 chars).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "redash.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 43 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 43 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 43 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}

{{/*
Create a default fully qualified adhocWorker name.
*/}}
{{- define "redash.adhocWorker.fullname" -}}
{{- template "redash.fullname" . -}}-adhocworker
{{- end -}}

{{/*
Create a default fully qualified scheduledworker name.
*/}}
{{- define "redash.scheduledWorker.fullname" -}}
{{- template "redash.fullname" . -}}-scheduledworker
{{- end -}}

{{/*
Create a default fully qualified postgresql name.
*/}}
{{- define "redash.postgresql.fullname" -}}
{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified redis name.
*/}}
{{- define "redash.redis.fullname" -}}
{{- printf "%s-%s" .Release.Name "redis-master" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
94 changes: 94 additions & 0 deletions stable/redash/templates/adhocworker-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
apiVersion: apps/v1beta2
grugnog marked this conversation as resolved.
Show resolved Hide resolved
kind: Deployment
metadata:
name: {{ template "redash.adhocWorker.fullname" . }}
labels:
app: {{ template "redash.name" . }}
component: adhocworker
chart: {{ template "redash.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.adhocWorker.replicaCount }}
selector:
matchLabels:
app: {{ template "redash.name" . }}
component: adhocworker
release: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ template "redash.name" . }}
component: adhocworker
release: {{ .Release.Name }}
spec:
containers:
- name: {{ template "redash.name" . }}-adhocworker
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: ["/bin/sh"]
args: ["-c", ". /config/dynamicenv.sh && /app/bin/docker-entrypoint scheduler"]
volumeMounts:
- name: config
mountPath: /config
env:
- name: REDASH_DATABASE_URL
{{- if not .Values.postgresql.enabled }}
value: {{ default "" .Values.externalPostgreSQL | quote }}
{{- end }}
- name: REDASH_DATABASE_USER
value: "{{ .Values.postgresql.postgresqlUsername }}"
- name: REDASH_DATABASE_PASSWORD
{{- if .Values.postgresql.enabled }}
valueFrom:
secretKeyRef:
name: {{ .Release.Name }}-postgresql
key: postgresql-password
{{- end }}
- name: REDASH_DATABASE_HOSTNAME
value: {{ template "redash.postgresql.fullname" . }}
- name: REDASH_DATABASE_PORT
value: "{{ .Values.postgresql.service.port }}"
- name: REDASH_DATABASE_DB
value: "{{ .Values.postgresql.postgresqlDatabase }}"
- name: REDASH_REDIS_PASSWORD
valueFrom:
secretKeyRef:
{{- if .Values.redis.existingSecret }}
name: {{ .Values.redis.existingSecret }}
{{- else }}
name: {{ .Release.Name }}-redis
{{- end }}
key: redis-password
- name: REDASH_REDIS_HOSTNAME
value: {{ template "redash.redis.fullname" . }}
- name: REDASH_REDIS_PORT
value: "{{ .Values.redis.master.port }}"
- name: REDASH_REDIS_DB
value: "{{ .Values.redis.databaseNumber }}"
{{- range $key, $value := .Values.env }}
- name: "{{ $key }}"
value: "{{ $value }}"
{{- end }}
{{- range $key, $value := .Values.adhocWorker.env }}
- name: "{{ $key }}"
value: "{{ $value }}"
{{- end }}
resources:
{{ toYaml .Values.adhocWorker.resources | indent 12 }}
volumes:
- name: config
configMap:
name: {{ template "redash.fullname" . }}
{{- if .Values.adhocWorker.nodeSelector }}
nodeSelector:
{{ toYaml .Values.adhocWorker.nodeSelector | indent 8 }}
{{- end }}
{{- with .Values.adhocWorker.affinity }}
affinity:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.adhocWorker.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
Loading