diff --git a/docs/budibase-0.2.3.tgz b/docs/budibase-0.2.3.tgz new file mode 100644 index 0000000000..23fbe03712 Binary files /dev/null and b/docs/budibase-0.2.3.tgz differ diff --git a/hosting/kubernetes/budibase/Chart.yaml b/hosting/kubernetes/budibase/Chart.yaml index c5233842ad..a8db638a7e 100644 --- a/hosting/kubernetes/budibase/Chart.yaml +++ b/hosting/kubernetes/budibase/Chart.yaml @@ -22,13 +22,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.2 +version: 0.2.3 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.9.169" +appVersion: "0.1.6" dependencies: - name: couchdb diff --git a/hosting/kubernetes/budibase/charts/couchdb-3.3.4.tgz b/hosting/kubernetes/budibase/charts/couchdb-3.3.4.tgz new file mode 100644 index 0000000000..f7ebfd3e96 Binary files /dev/null and b/hosting/kubernetes/budibase/charts/couchdb-3.3.4.tgz differ diff --git a/hosting/kubernetes/budibase/charts/couchdb/Chart.yaml b/hosting/kubernetes/budibase/charts/couchdb/Chart.yaml deleted file mode 100755 index 74ae734a17..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/Chart.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -appVersion: 3.1.0 -description: A database featuring seamless multi-master sync, that scales from big - data to mobile, with an intuitive HTTP/JSON API and designed for reliability. -home: https://couchdb.apache.org/ -icon: http://couchdb.apache.org/CouchDB-visual-identity/logo/CouchDB-couch-symbol.svg -keywords: -- couchdb -- database -- nosql -maintainers: -- email: kocolosk@apache.org - name: kocolosk -- email: willholley@apache.org - name: willholley -name: couchdb -sources: -- https://github.com/apache/couchdb-docker -version: 3.3.4 diff --git a/hosting/kubernetes/budibase/charts/couchdb/README.md b/hosting/kubernetes/budibase/charts/couchdb/README.md deleted file mode 100755 index 3227123d06..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/README.md +++ /dev/null @@ -1,244 +0,0 @@ -# CouchDB - -Apache CouchDB is a database featuring seamless multi-master sync, that scales -from big data to mobile, with an intuitive HTTP/JSON API and designed for -reliability. - -This chart deploys a CouchDB cluster as a StatefulSet. It creates a ClusterIP -Service in front of the Deployment for load balancing by default, but can also -be configured to deploy other Service types or an Ingress Controller. The -default persistence mechanism is simply the ephemeral local filesystem, but -production deployments should set `persistentVolume.enabled` to `true` to attach -storage volumes to each Pod in the Deployment. - -## TL;DR - -```bash -$ helm repo add couchdb https://apache.github.io/couchdb-helm -$ helm install couchdb/couchdb \ - --set allowAdminParty=true \ - --set couchdbConfig.couchdb.uuid=$(curl https://www.uuidgenerator.net/api/version4 2>/dev/null | tr -d -) -``` - -## Prerequisites - -- Kubernetes 1.9+ with Beta APIs enabled -- Ingress requires Kubernetes 1.14+ - -## Installing the Chart - -To install the chart with the release name `my-release`: - -Add the CouchDB Helm repository: - -```bash -$ helm repo add couchdb https://apache.github.io/couchdb-helm -``` - -Afterwards install the chart replacing the UUID -`decafbaddecafbaddecafbaddecafbad` with a custom one: - -```bash -$ helm install \ - --name my-release \ - --set couchdbConfig.couchdb.uuid=decafbaddecafbaddecafbaddecafbad \ - couchdb/couchdb -``` - -This will create a Secret containing the admin credentials for the cluster. -Those credentials can be retrieved as follows: - -```bash -$ kubectl get secret my-release-couchdb -o go-template='{{ .data.adminPassword }}' | base64 --decode -``` - -If you prefer to configure the admin credentials directly you can create a -Secret containing `adminUsername`, `adminPassword` and `cookieAuthSecret` keys: - -```bash -$ kubectl create secret generic my-release-couchdb --from-literal=adminUsername=foo --from-literal=adminPassword=bar --from-literal=cookieAuthSecret=baz -``` - -If you want to set the `adminHash` directly to achieve consistent salts between -different nodes you need to addionally add the key `password.ini` to the secret: - -```bash -$ kubectl create secret generic my-release-couchdb \ - --from-literal=adminUsername=foo \ - --from-literal=cookieAuthSecret=baz \ - --from-file=./my-password.ini -``` - -With the following contents in `my-password.ini`: - -``` -[admins] -foo = -``` - -and then install the chart while overriding the `createAdminSecret` setting: - -```bash -$ helm install \ - --name my-release \ - --set createAdminSecret=false \ - --set couchdbConfig.couchdb.uuid=decafbaddecafbaddecafbaddecafbad \ - couchdb/couchdb -``` - -This Helm chart deploys CouchDB on the Kubernetes cluster in a 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. - -## Upgrading an existing Release to a new major version - -A major chart version change (like v0.2.3 -> v1.0.0) indicates that there is an -incompatible breaking change needing manual actions. - -### Upgrade to 3.0.0 - -Since version 3.0.0 setting the CouchDB server instance UUID is mandatory. -Therefore you need to generate a UUID and supply it as a value during the -upgrade as follows: - -```bash -$ helm upgrade \ - --reuse-values \ - --set couchdbConfig.couchdb.uuid= \ - couchdb/couchdb -``` - -## Migrating from stable/couchdb - -This chart replaces the `stable/couchdb` chart previously hosted by Helm and continues the -version semantics. You can upgrade directly from `stable/couchdb` to this chart using: - -```bash -$ helm repo add couchdb https://apache.github.io/couchdb-helm -$ helm upgrade my-release couchdb/couchdb -``` - -## Configuration - -The following table lists the most commonly configured parameters of the -CouchDB chart and their default values: - -| Parameter | Description | Default | -|---------------------------------|-------------------------------------------------------|----------------------------------------| -| `clusterSize` | The initial number of nodes in the CouchDB cluster | 3 | -| `couchdbConfig` | Map allowing override elements of server .ini config | *See below* | -| `allowAdminParty` | If enabled, start cluster without admin account | false (requires creating a Secret) | -| `createAdminSecret` | If enabled, create an admin account and cookie secret | true | -| `schedulerName` | Name of the k8s scheduler (other than default) | `nil` | -| `erlangFlags` | Map of flags supplied to the underlying Erlang VM | name: couchdb, setcookie: monster -| `persistentVolume.enabled` | Boolean determining whether to attach a PV to each node | false -| `persistentVolume.size` | If enabled, the size of the persistent volume to attach | 10Gi -| `enableSearch` | Adds a sidecar for Lucene-powered text search | false | - -You can set the values of the `couchdbConfig` map according to the -[official configuration][4]. The following shows the map's default values and -required options to set: - -| Parameter | Description | Default | -|---------------------------------|--------------------------------------------------------------------|----------------------------------------| -| `couchdb.uuid` | UUID for this CouchDB server instance ([Required in a cluster][5]) | | -| `chttpd.bind_address` | listens on all interfaces when set to any | any | -| `chttpd.require_valid_user` | disables all the anonymous requests to the port 5984 when true | false | - -A variety of other parameters are also configurable. See the comments in the -`values.yaml` file for further details: - -| Parameter | Default | -|--------------------------------------|----------------------------------------| -| `adminUsername` | admin | -| `adminPassword` | auto-generated | -| `adminHash` | | -| `cookieAuthSecret` | auto-generated | -| `image.repository` | couchdb | -| `image.tag` | 3.1.0 | -| `image.pullPolicy` | IfNotPresent | -| `searchImage.repository` | kocolosk/couchdb-search | -| `searchImage.tag` | 0.1.0 | -| `searchImage.pullPolicy` | IfNotPresent | -| `initImage.repository` | busybox | -| `initImage.tag` | latest | -| `initImage.pullPolicy` | Always | -| `ingress.enabled` | false | -| `ingress.hosts` | chart-example.local | -| `ingress.annotations` | | -| `ingress.path` | / | -| `ingress.tls` | | -| `persistentVolume.accessModes` | ReadWriteOnce | -| `persistentVolume.storageClass` | Default for the Kube cluster | -| `podManagementPolicy` | Parallel | -| `affinity` | | -| `annotations` | | -| `tolerations` | | -| `resources` | | -| `service.annotations` | | -| `service.enabled` | true | -| `service.type` | ClusterIP | -| `service.externalPort` | 5984 | -| `dns.clusterDomainSuffix` | cluster.local | -| `networkPolicy.enabled` | true | -| `serviceAccount.enabled` | true | -| `serviceAccount.create` | true | -| `serviceAccount.imagePullSecrets` | | -| `sidecars` | {} | -| `livenessProbe.enabled` | true | -| `livenessProbe.failureThreshold` | 3 | -| `livenessProbe.initialDelaySeconds` | 0 | -| `livenessProbe.periodSeconds` | 10 | -| `livenessProbe.successThreshold` | 1 | -| `livenessProbe.timeoutSeconds` | 1 | -| `readinessProbe.enabled` | true | -| `readinessProbe.failureThreshold` | 3 | -| `readinessProbe.initialDelaySeconds` | 0 | -| `readinessProbe.periodSeconds` | 10 | -| `readinessProbe.successThreshold` | 1 | -| `readinessProbe.timeoutSeconds` | 1 | - -## Feedback, Issues, Contributing - -General feedback is welcome at our [user][1] or [developer][2] mailing lists. - -Apache CouchDB has a [CONTRIBUTING][3] file with details on how to get started -with issue reporting or contributing to the upkeep of this project. In short, -use GitHub Issues, do not report anything on Docker's website. - -## Non-Apache CouchDB Development Team Contributors - -- [@natarajaya](https://github.com/natarajaya) -- [@satchpx](https://github.com/satchpx) -- [@spanato](https://github.com/spanato) -- [@jpds](https://github.com/jpds) -- [@sebastien-prudhomme](https://github.com/sebastien-prudhomme) -- [@stepanstipl](https://github.com/sebastien-stepanstipl) -- [@amatas](https://github.com/amatas) -- [@Chimney42](https://github.com/Chimney42) -- [@mattjmcnaughton](https://github.com/mattjmcnaughton) -- [@mainephd](https://github.com/mainephd) -- [@AdamDang](https://github.com/AdamDang) -- [@mrtyler](https://github.com/mrtyler) -- [@kevinwlau](https://github.com/kevinwlau) -- [@jeyenzo](https://github.com/jeyenzo) -- [@Pinpin31.](https://github.com/Pinpin31) - -[1]: http://mail-archives.apache.org/mod_mbox/couchdb-user/ -[2]: http://mail-archives.apache.org/mod_mbox/couchdb-dev/ -[3]: https://github.com/apache/couchdb/blob/master/CONTRIBUTING.md -[4]: https://docs.couchdb.org/en/stable/config/index.html -[5]: https://docs.couchdb.org/en/latest/setup/cluster.html#preparing-couchdb-nodes-to-be-joined-into-a-cluster diff --git a/hosting/kubernetes/budibase/charts/couchdb/ci/required-values.yaml b/hosting/kubernetes/budibase/charts/couchdb/ci/required-values.yaml deleted file mode 100755 index 79589d2e04..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/ci/required-values.yaml +++ /dev/null @@ -1,3 +0,0 @@ -couchdbConfig: - couchdb: - uuid: "decafbaddecafbaddecafbaddecafbad" diff --git a/hosting/kubernetes/budibase/charts/couchdb/ci/sidecar.yaml b/hosting/kubernetes/budibase/charts/couchdb/ci/sidecar.yaml deleted file mode 100755 index aa570bdf74..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/ci/sidecar.yaml +++ /dev/null @@ -1,9 +0,0 @@ -sidecars: - - name: foo - image: "busybox" - imagePullPolicy: IfNotPresent - resources: - requests: - cpu: "0.1" - memory: 10Mi - command: ['while true; do echo "foo"; sleep 5; done;'] diff --git a/hosting/kubernetes/budibase/charts/couchdb/password.ini b/hosting/kubernetes/budibase/charts/couchdb/password.ini deleted file mode 100755 index 4ce8445aae..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/password.ini +++ /dev/null @@ -1,2 +0,0 @@ -[admins] -{{ .Values.adminUsername }} = {{ .Values.adminHash }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/NOTES.txt b/hosting/kubernetes/budibase/charts/couchdb/templates/NOTES.txt deleted file mode 100755 index a3658bd37f..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/NOTES.txt +++ /dev/null @@ -1,20 +0,0 @@ -Apache CouchDB is starting. Check the status of the Pods using: - - kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "couchdb.name" . }},release={{ .Release.Name }}" - -Once all of the Pods are fully Ready, execute the following command to create -some required system databases: - - kubectl exec --namespace {{ .Release.Namespace }} {{ if not .Values.allowAdminParty }}-it {{ end }}{{ template "couchdb.fullname" . }}-0 -c couchdb -- \ - curl -s \ - http://127.0.0.1:5984/_cluster_setup \ - -X POST \ - -H "Content-Type: application/json" \ -{{- if .Values.allowAdminParty }} - -d '{"action": "finish_cluster"}' -{{- else }} - -d '{"action": "finish_cluster"}' \ - -u -{{- end }} - -Then it's time to relax. diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/_helpers.tpl b/hosting/kubernetes/budibase/charts/couchdb/templates/_helpers.tpl deleted file mode 100755 index f9d013e487..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/_helpers.tpl +++ /dev/null @@ -1,81 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "couchdb.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). -*/}} -{{- define "couchdb.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- printf "%s-%s" .Values.fullnameOverride .Chart.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} - -{{/* -In the event that we create both a headless service and a traditional one, -ensure that the latter gets a unique name. -*/}} -{{- define "couchdb.svcname" -}} -{{- if .Values.fullnameOverride -}} -{{- printf "%s-svc-%s" .Values.fullnameOverride .Chart.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- printf "%s-svc-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} - -{{/* -Create a random string if the supplied key does not exist -*/}} -{{- define "couchdb.defaultsecret" -}} -{{- if . -}} -{{- . | b64enc | quote -}} -{{- else -}} -{{- randAlphaNum 20 | b64enc | quote -}} -{{- end -}} -{{- end -}} - -{{/* -Labels used to define Pods in the CouchDB statefulset -*/}} -{{- define "couchdb.ss.selector" -}} -app: {{ template "couchdb.name" . }} -release: {{ .Release.Name }} -{{- end -}} - -{{/* -Generates a comma delimited list of nodes in the cluster -*/}} -{{- define "couchdb.seedlist" -}} -{{- $nodeCount := min 5 .Values.clusterSize | int }} - {{- range $index0 := until $nodeCount -}} - {{- $index1 := $index0 | add1 -}} - {{ $.Values.erlangFlags.name }}@{{ template "couchdb.fullname" $ }}-{{ $index0 }}.{{ template "couchdb.fullname" $ }}.{{ $.Release.Namespace }}.svc.{{ $.Values.dns.clusterDomainSuffix }}{{ if ne $index1 $nodeCount }},{{ end }} - {{- end -}} -{{- end -}} - -{{/* -If serviceAccount.name is specified, use that, else use the couchdb instance name -*/}} -{{- define "couchdb.serviceAccount" -}} -{{- if .Values.serviceAccount.name -}} -{{- .Values.serviceAccount.name }} -{{- else -}} -{{- template "couchdb.fullname" . -}} -{{- end -}} -{{- end -}} - -{{/* -Fail if couchdbConfig.couchdb.uuid is undefined -*/}} -{{- define "couchdb.uuid" -}} -{{- required "A value for couchdbConfig.couchdb.uuid must be set" (.Values.couchdbConfig.couchdb | default dict).uuid -}} -{{- end -}} \ No newline at end of file diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/configmap.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/configmap.yaml deleted file mode 100755 index a6a20e0574..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/configmap.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" - heritage: {{ .Release.Service | quote }} - release: {{ .Release.Name | quote }} -data: - inifile: | - {{ $couchdbConfig := dict "couchdb" (dict "uuid" (include "couchdb.uuid" .)) -}} - {{- $couchdbConfig := merge $couchdbConfig .Values.couchdbConfig -}} - {{- range $section, $settings := $couchdbConfig -}} - {{ printf "[%s]" $section }} - {{ range $key, $value := $settings -}} - {{ printf "%s = %s" $key ($value | toString) }} - {{ end }} - {{ end }} - - seedlistinifile: | - [cluster] - seedlist = {{ template "couchdb.seedlist" . }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/headless.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/headless.yaml deleted file mode 100755 index 0ce3ef0f35..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/headless.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - clusterIP: None - publishNotReadyAddresses: true - ports: - - name: couchdb - port: 5984 - selector: -{{ include "couchdb.ss.selector" . | indent 4 }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/ingress.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/ingress.yaml deleted file mode 100755 index c547847ce5..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/ingress.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $serviceName := include "couchdb.fullname" . -}} -{{- $servicePort := .Values.service.externalPort -}} -{{- $path := .Values.ingress.path | quote -}} -apiVersion: networking.k8s.io/v1beta1 -kind: Ingress -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} - annotations: - {{- range $key, $value := .Values.ingress.annotations }} - {{ $key }}: {{ $value | quote }} - {{- end }} -spec: - rules: - {{- range $host := .Values.ingress.hosts }} - - host: {{ $host }} - http: - paths: - - path: {{ $path }} - backend: - serviceName: {{ $serviceName }} - servicePort: {{ $servicePort }} - {{- end -}} - {{- if .Values.ingress.tls }} - tls: -{{ toYaml .Values.ingress.tls | indent 4 }} - {{- end -}} -{{- end -}} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/networkpolicy.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/networkpolicy.yaml deleted file mode 100755 index 2830708bef..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/networkpolicy.yaml +++ /dev/null @@ -1,31 +0,0 @@ - -{{- if .Values.networkPolicy.enabled }} -kind: NetworkPolicy -apiVersion: networking.k8s.io/v1 -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - podSelector: - matchLabels: -{{ include "couchdb.ss.selector" . | indent 6 }} - ingress: - - ports: - - protocol: TCP - port: 5984 - - ports: - - protocol: TCP - port: 9100 - - protocol: TCP - port: 4369 - from: - - podSelector: - matchLabels: -{{ include "couchdb.ss.selector" . | indent 14 }} - policyTypes: - - Ingress -{{- end }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/secrets.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/secrets.yaml deleted file mode 100755 index 92f55c6d6b..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/secrets.yaml +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .Values.createAdminSecret -}} -apiVersion: v1 -kind: Secret -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.fullname" . }} - chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" - release: "{{ .Release.Name }}" - heritage: "{{ .Release.Service }}" -type: Opaque -data: - adminUsername: {{ template "couchdb.defaultsecret" .Values.adminUsername }} - adminPassword: {{ template "couchdb.defaultsecret" .Values.adminPassword }} - cookieAuthSecret: {{ template "couchdb.defaultsecret" .Values.cookieAuthSecret }} -{{- if .Values.adminHash }} - password.ini: {{ tpl (.Files.Get "password.ini") . | b64enc }} -{{- end -}} -{{- end -}} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/service.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/service.yaml deleted file mode 100755 index 6d0382477d..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/service.yaml +++ /dev/null @@ -1,23 +0,0 @@ -{{- if .Values.service.enabled -}} -apiVersion: v1 -kind: Service -metadata: - name: {{ template "couchdb.svcname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -{{- if .Values.service.annotations }} - annotations: -{{ toYaml .Values.service.annotations | indent 4 }} -{{- end }} -spec: - ports: - - port: {{ .Values.service.externalPort }} - protocol: TCP - targetPort: 5984 - type: {{ .Values.service.type }} - selector: -{{ include "couchdb.ss.selector" . | indent 4 }} -{{- end -}} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/serviceaccount.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/serviceaccount.yaml deleted file mode 100755 index bb82799a49..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/serviceaccount.yaml +++ /dev/null @@ -1,15 +0,0 @@ -{{- if .Values.serviceAccount.create }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ template "couchdb.serviceAccount" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -{{- if .Values.serviceAccount.imagePullSecrets }} -imagePullSecrets: -{{ toYaml .Values.serviceAccount.imagePullSecrets }} -{{- end }} -{{- end }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/statefulset.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/statefulset.yaml deleted file mode 100755 index 6225fbe98c..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/statefulset.yaml +++ /dev/null @@ -1,202 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - replicas: {{ .Values.clusterSize }} - serviceName: {{ template "couchdb.fullname" . }} - podManagementPolicy: {{ .Values.podManagementPolicy }} - selector: - matchLabels: -{{ include "couchdb.ss.selector" . | indent 6 }} - template: - metadata: - labels: -{{ include "couchdb.ss.selector" . | indent 8 }} -{{- with .Values.annotations }} - annotations: - checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} -{{ toYaml . | indent 8 }} -{{- end }} - spec: - {{- if .Values.schedulerName }} - schedulerName: "{{ .Values.schedulerName }}" - {{- end }} - {{- if .Values.serviceAccount.enabled }} - serviceAccountName: {{ template "couchdb.serviceAccount" . }} - {{- end }} - initContainers: - - name: init-copy - image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" - imagePullPolicy: {{ .Values.initImage.pullPolicy }} - command: ['sh','-c','cp /tmp/chart.ini /default.d; cp /tmp/seedlist.ini /default.d; ls -lrt /default.d;'] - volumeMounts: - - name: config - mountPath: /tmp/ - - name: config-storage - mountPath: /default.d -{{- if .Values.adminHash }} - - name: admin-hash-copy - image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" - imagePullPolicy: {{ .Values.initImage.pullPolicy }} - command: ['sh','-c','cp /tmp/password.ini /local.d/ ;'] - volumeMounts: - - name: admin-password - mountPath: /tmp/password.ini - subPath: "password.ini" - - name: local-config-storage - mountPath: /local.d -{{- end }} - containers: - - name: couchdb - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: couchdb - containerPort: 5984 - - name: epmd - containerPort: 4369 - - containerPort: 9100 - env: -{{- if not .Values.allowAdminParty }} - - name: COUCHDB_USER - valueFrom: - secretKeyRef: - name: {{ template "couchdb.fullname" . }} - key: adminUsername - - name: COUCHDB_PASSWORD - valueFrom: - secretKeyRef: - name: {{ template "couchdb.fullname" . }} - key: adminPassword - - name: COUCHDB_SECRET - valueFrom: - secretKeyRef: - name: {{ template "couchdb.fullname" . }} - key: cookieAuthSecret -{{- end }} - - name: ERL_FLAGS - value: "{{ range $k, $v := .Values.erlangFlags }} -{{ $k }} {{ $v }} {{ end }}" -{{- if .Values.livenessProbe.enabled }} - livenessProbe: -{{- if .Values.couchdbConfig.chttpd.require_valid_user }} - exec: - command: - - sh - - -c - - curl -G --silent --fail -u ${COUCHDB_USER}:${COUCHDB_PASSWORD} http://localhost:5984/_up -{{- else }} - httpGet: - path: /_up - port: 5984 -{{- end }} - failureThreshold: {{ .Values.livenessProbe.failureThreshold }} - initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} - periodSeconds: {{ .Values.livenessProbe.periodSeconds }} - successThreshold: {{ .Values.livenessProbe.successThreshold }} - timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} -{{- end }} -{{- if .Values.readinessProbe.enabled }} - readinessProbe: -{{- if .Values.couchdbConfig.chttpd.require_valid_user }} - exec: - command: - - sh - - -c - - curl -G --silent --fail -u ${COUCHDB_USER}:${COUCHDB_PASSWORD} http://localhost:5984/_up -{{- else }} - httpGet: - path: /_up - port: 5984 -{{- end }} - failureThreshold: {{ .Values.readinessProbe.failureThreshold }} - initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} - periodSeconds: {{ .Values.readinessProbe.periodSeconds }} - successThreshold: {{ .Values.readinessProbe.successThreshold }} - timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} -{{- end }} - resources: -{{ toYaml .Values.resources | indent 12 }} - volumeMounts: - - name: config-storage - mountPath: /opt/couchdb/etc/default.d -{{- if .Values.adminHash }} - - name: local-config-storage - mountPath: /opt/couchdb/etc/local.d -{{- end }} - - name: database-storage - mountPath: /opt/couchdb/data -{{- if .Values.enableSearch }} - - name: clouseau - image: "{{ .Values.searchImage.repository }}:{{ .Values.searchImage.tag }}" - imagePullPolicy: {{ .Values.searchImage.pullPolicy }} - volumeMounts: - - name: database-storage - mountPath: /opt/couchdb-search/data -{{- end }} -{{- if .Values.sidecars }} -{{ toYaml .Values.sidecars | indent 8}} -{{- end }} -{{- if .Values.nodeSelector }} - nodeSelector: -{{ toYaml .Values.nodeSelector | indent 8 }} -{{- end }} -{{- with .Values.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} -{{- end }} -{{- with .Values.affinity }} - affinity: -{{ toYaml . | indent 8 }} -{{- end }} - volumes: - - name: config-storage - emptyDir: {} - - name: config - configMap: - name: {{ template "couchdb.fullname" . }} - items: - - key: inifile - path: chart.ini - - key: seedlistinifile - path: seedlist.ini - -{{- if .Values.adminHash }} - - name: local-config-storage - emptyDir: {} - - name: admin-password - secret: - secretName: {{ template "couchdb.fullname" . }} -{{- end -}} - -{{- if not .Values.persistentVolume.enabled }} - - name: database-storage - emptyDir: {} -{{- else }} - volumeClaimTemplates: - - metadata: - name: database-storage - labels: - app: {{ template "couchdb.name" . }} - release: {{ .Release.Name }} - spec: - accessModes: - {{- range .Values.persistentVolume.accessModes }} - - {{ . | quote }} - {{- end }} - resources: - requests: - storage: {{ .Values.persistentVolume.size | quote }} - {{- if .Values.persistentVolume.storageClass }} - {{- if (eq "-" .Values.persistentVolume.storageClass) }} - storageClassName: "" - {{- else }} - storageClassName: "{{ .Values.persistentVolume.storageClass }}" - {{- end }} - {{- end }} -{{- end }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/values.yaml b/hosting/kubernetes/budibase/charts/couchdb/values.yaml deleted file mode 100755 index 5a5025f816..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/values.yaml +++ /dev/null @@ -1,201 +0,0 @@ -## clusterSize is the initial size of the CouchDB cluster. -clusterSize: 3 - -## If allowAdminParty is enabled the cluster will start up without any database -## administrator account; i.e., all users will be granted administrative -## access. Otherwise, the system will look for a Secret called -## -couchdb containing `adminUsername`, `adminPassword` and -## `cookieAuthSecret` keys. See the `createAdminSecret` flag. -## ref: https://kubernetes.io/docs/concepts/configuration/secret/ -allowAdminParty: false - -## If createAdminSecret is enabled a Secret called -couchdb will -## be created containing auto-generated credentials. Users who prefer to set -## these values themselves have a couple of options: -## -## 1) The `adminUsername`, `adminPassword`, `adminHash`, and `cookieAuthSecret` -## can be defined directly in the chart's values. Note that all of a chart's -## values are currently stored in plaintext in a ConfigMap in the tiller -## namespace. -## -## 2) This flag can be disabled and a Secret with the required keys can be -## created ahead of time. -createAdminSecret: true - -# adminUsername: budibase -# adminPassword: budibase -# adminHash: -pbkdf2-this_is_not_necessarily_secure_either -# cookieAuthSecret: admin - -## When enabled, will deploy a networkpolicy that allows CouchDB pods to -## communicate with each other for clustering and ingress on port 5984 -networkPolicy: - enabled: true - -## Use an alternate scheduler, e.g. "stork". -## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ -## -# schedulerName: - -# Use a service account -serviceAccount: - enabled: true - create: true -# name: -# imagePullSecrets: -# - name: myimagepullsecret - -## The storage volume used by each Pod in the StatefulSet. If a -## persistentVolume is not enabled, the Pods will use `emptyDir` ephemeral -## local storage. Setting the storageClass attribute to "-" disables dynamic -## provisioning of Persistent Volumes; leaving it unset will invoke the default -## provisioner. -persistentVolume: - enabled: false - accessModes: - - ReadWriteOnce - size: 10Gi - storageClass: "" - -## The CouchDB image -image: - repository: couchdb - tag: 3.1.0 - pullPolicy: IfNotPresent - -## Experimental integration with Lucene-powered fulltext search -searchImage: - repository: kocolosk/couchdb-search - tag: 0.2.0 - pullPolicy: IfNotPresent - -## Flip this to flag to include the Search container in each Pod -enableSearch: true - -initImage: - repository: busybox - tag: latest - pullPolicy: Always - -## CouchDB is happy to spin up cluster nodes in parallel, but if you encounter -## problems you can try setting podManagementPolicy to the StatefulSet default -## `OrderedReady` -podManagementPolicy: Parallel - -## To better tolerate Node failures, we can prevent Kubernetes scheduler from -## assigning more than one Pod of CouchDB StatefulSet per Node using podAntiAffinity. -affinity: {} - # podAntiAffinity: - # requiredDuringSchedulingIgnoredDuringExecution: - # - labelSelector: - # matchExpressions: - # - key: "app" - # operator: In - # values: - # - couchdb - # topologyKey: "kubernetes.io/hostname" - -## Optional pod annotations -annotations: {} - -## Optional tolerations -tolerations: [] - -## A StatefulSet requires a headless Service to establish the stable network -## identities of the Pods, and that Service is created automatically by this -## chart without any additional configuration. The Service block below refers -## to a second Service that governs how clients connect to the CouchDB cluster. -service: - # annotations: - enabled: true - type: ClusterIP - externalPort: 5984 - -## An Ingress resource can provide name-based virtual hosting and TLS -## termination among other things for CouchDB deployments which are accessed -## from outside the Kubernetes cluster. -## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/ -ingress: - enabled: false - hosts: - - chart-example.local - path: / - annotations: [] - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - tls: - # Secrets must be manually created in the namespace. - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -## Optional resource requests and limits for the CouchDB container -## ref: http://kubernetes.io/docs/user-guide/compute-resources/ -resources: - {} - # requests: - # cpu: 100m - # memory: 128Mi - # limits: - # cpu: 56 - # memory: 256Gi - -## erlangFlags is a map that is passed to the Erlang VM as flags using the -## ERL_FLAGS env. `name` and `setcookie` flags are minimally required to -## establish connectivity between cluster nodes. -## ref: http://erlang.org/doc/man/erl.html#init_flags -erlangFlags: - name: couchdb - setcookie: monster - -## couchdbConfig will override default CouchDB configuration settings. -## The contents of this map are reformatted into a .ini file laid down -## by a ConfigMap object. -## ref: http://docs.couchdb.org/en/latest/config/index.html -couchdbConfig: - couchdb: - uuid: budibase-couchdb # REQUIRED: Unique identifier for this CouchDB server instance - # cluster: - # q: 8 # Create 8 shards for each database - chttpd: - bind_address: any - # chttpd.require_valid_user disables all the anonymous requests to the port - # 5984 when is set to true. - require_valid_user: false - -# Kubernetes local cluster domain. -# This is used to generate FQDNs for peers when joining the CouchDB cluster. -dns: - clusterDomainSuffix: cluster.local - -## Configure liveness and readiness probe values -## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes -livenessProbe: - enabled: true - failureThreshold: 3 - initialDelaySeconds: 0 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 -readinessProbe: - enabled: true - failureThreshold: 3 - initialDelaySeconds: 0 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - -# Configure arbitrary sidecar containers for CouchDB pods created by the -# StatefulSet -sidecars: {} - # - name: foo - # image: "busybox" - # imagePullPolicy: IfNotPresent - # resources: - # requests: - # cpu: "0.1" - # memory: 10Mi - # command: ['echo "foo";'] - # volumeMounts: - # - name: database-storage - # mountPath: /opt/couchdb/data/ diff --git a/hosting/kubernetes/budibase/values.yaml b/hosting/kubernetes/budibase/values.yaml index bd9f6543b3..ec3629e094 100644 --- a/hosting/kubernetes/budibase/values.yaml +++ b/hosting/kubernetes/budibase/values.yaml @@ -126,12 +126,10 @@ services: couchdb: enabled: true - replicaCount: 3 # url: "" # only change if pointing to existing couch server # user: "" # only change if pointing to existing couch server # password: "" # only change if pointing to existing couch server port: 5984 - storage: 100Mi redis: enabled: true # disable if using external redis @@ -151,3 +149,151 @@ services: region: "" # AWS_REGION if using S3 or existing minio secret url: "" # only change if pointing to existing minio cluster and minio: false storage: 100Mi + +# Override values in couchDB subchart +couchdb: + ## clusterSize is the initial size of the CouchDB cluster. + clusterSize: 3 + allowAdminParty: false + + # Secret Management + createAdminSecret: true + + # adminUsername: budibase + # adminPassword: budibase + # adminHash: -pbkdf2-this_is_not_necessarily_secure_either + # cookieAuthSecret: admin + + ## When enabled, will deploy a networkpolicy that allows CouchDB pods to + ## communicate with each other for clustering and ingress on port 5984 + networkPolicy: + enabled: true + + # Use a service account + serviceAccount: + enabled: true + create: true + # name: + # imagePullSecrets: + # - name: myimagepullsecret + + ## The storage volume used by each Pod in the StatefulSet. If a + ## persistentVolume is not enabled, the Pods will use `emptyDir` ephemeral + ## local storage. Setting the storageClass attribute to "-" disables dynamic + ## provisioning of Persistent Volumes; leaving it unset will invoke the default + ## provisioner. + persistentVolume: + enabled: false + accessModes: + - ReadWriteOnce + size: 10Gi + storageClass: "" + + ## The CouchDB image + image: + repository: couchdb + tag: 3.1.0 + pullPolicy: IfNotPresent + + ## Experimental integration with Lucene-powered fulltext search + enableSearch: true + searchImage: + repository: kocolosk/couchdb-search + tag: 0.2.0 + pullPolicy: IfNotPresent + + initImage: + repository: busybox + tag: latest + pullPolicy: Always + + ## CouchDB is happy to spin up cluster nodes in parallel, but if you encounter + ## problems you can try setting podManagementPolicy to the StatefulSet default + ## `OrderedReady` + podManagementPolicy: Parallel + + ## Optional pod annotations + annotations: {} + + ## Optional tolerations + tolerations: [] + + service: + # annotations: + enabled: true + type: ClusterIP + externalPort: 5984 + + ## An Ingress resource can provide name-based virtual hosting and TLS + ## termination among other things for CouchDB deployments which are accessed + ## from outside the Kubernetes cluster. + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/ + ingress: + enabled: false + hosts: + - chart-example.local + path: / + annotations: [] + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + tls: + # Secrets must be manually created in the namespace. + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + + ## Optional resource requests and limits for the CouchDB container + ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ + resources: + {} + # requests: + # cpu: 100m + # memory: 128Mi + # limits: + # cpu: 56 + # memory: 256Gi + + ## erlangFlags is a map that is passed to the Erlang VM as flags using the + ## ERL_FLAGS env. `name` and `setcookie` flags are minimally required to + ## establish connectivity between cluster nodes. + ## ref: http://erlang.org/doc/man/erl.html#init_flags + erlangFlags: + name: couchdb + setcookie: monster + + ## couchdbConfig will override default CouchDB configuration settings. + ## The contents of this map are reformatted into a .ini file laid down + ## by a ConfigMap object. + ## ref: http://docs.couchdb.org/en/latest/config/index.html + couchdbConfig: + couchdb: + uuid: budibase-couchdb # REQUIRED: Unique identifier for this CouchDB server instance + # cluster: + # q: 8 # Create 8 shards for each database + chttpd: + bind_address: any + # chttpd.require_valid_user disables all the anonymous requests to the port + # 5984 when is set to true. + require_valid_user: false + + # Kubernetes local cluster domain. + # This is used to generate FQDNs for peers when joining the CouchDB cluster. + dns: + clusterDomainSuffix: cluster.local + + ## Configure liveness and readiness probe values + ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + livenessProbe: + enabled: true + failureThreshold: 3 + initialDelaySeconds: 0 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + enabled: true + failureThreshold: 3 + initialDelaySeconds: 0 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 \ No newline at end of file diff --git a/scripts/index.yaml b/scripts/index.yaml new file mode 100644 index 0000000000..2990f842ce --- /dev/null +++ b/scripts/index.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +entries: + budibase: + - apiVersion: v2 + appVersion: 0.1.6 + created: "2021-12-06T17:18:57.819135+01:00" + dependencies: + - condition: services.couchdb.enabled + name: couchdb + repository: https://apache.github.io/couchdb-helm + version: 3.3.4 + - condition: ingress.nginx + name: ingress-nginx + repository: https://github.com/kubernetes/ingress-nginx + version: 3.35.0 + description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. + digest: 5bd6418e9a78bf4d8df6de077d4392a647ea30324e33cae38da480e162af3c22 + keywords: + - low-code + - database + - cluster + name: budibase + sources: + - https://github.com/Budibase/budibase + - https://budibase.com + type: application + urls: + - https://budibase.github.io/budibase/budibase-0.2.3.tgz + version: 0.2.3 +generated: "2021-12-06T17:18:57.814315+01:00"