From dc9b7402d1ea788f806e42b7fc7e5c025e003e2a Mon Sep 17 00:00:00 2001 From: wkbrd <30599409+wkbrd@users.noreply.github.com> Date: Tue, 10 Sep 2024 07:17:39 -0400 Subject: [PATCH] bitnami/seaweedfs external postgres database support (#29216) --- bitnami/seaweedfs/CHANGELOG.md | 8 +++-- bitnami/seaweedfs/Chart.yaml | 2 +- bitnami/seaweedfs/README.md | 33 ++++++++++++++++++- bitnami/seaweedfs/templates/_helpers.tpl | 15 ++++++++- .../templates/externaldb-secrets.yaml | 2 +- .../templates/filer/statefulset.yaml | 25 ++++++++++++-- bitnami/seaweedfs/values.yaml | 9 +++-- 7 files changed, 82 insertions(+), 12 deletions(-) diff --git a/bitnami/seaweedfs/CHANGELOG.md b/bitnami/seaweedfs/CHANGELOG.md index 2b4f3d990f..763b2692ff 100644 --- a/bitnami/seaweedfs/CHANGELOG.md +++ b/bitnami/seaweedfs/CHANGELOG.md @@ -1,8 +1,12 @@ # Changelog -## 1.0.9 (2024-08-19) +## 1.1.0 (2024-09-09) -* [bitnami/seaweedfs] Release 1.0.9 ([#28920](https://github.com/bitnami/charts/pull/28920)) +* bitnami/seaweedfs external postgres database support ([#29216](https://github.com/bitnami/charts/pull/29216)) + +## 1.0.9 (2024-08-19) + +* [bitnami/seaweedfs] Release 1.0.9 (#28920) ([28916ca](https://github.com/bitnami/charts/commit/28916ca487e16f1626580f21c2ae8acb443a2e39)), closes [#28920](https://github.com/bitnami/charts/issues/28920) ## 1.0.8 (2024-08-07) diff --git a/bitnami/seaweedfs/Chart.yaml b/bitnami/seaweedfs/Chart.yaml index c84304dd2b..ba9f975cac 100644 --- a/bitnami/seaweedfs/Chart.yaml +++ b/bitnami/seaweedfs/Chart.yaml @@ -40,4 +40,4 @@ name: seaweedfs sources: - https://github.com/bitnami/charts/tree/main/bitnami/seawwedfs - https://github.com/bitnami/containers/tree/main/bitnami/seaweedfs -version: 1.0.9 +version: 1.1.0 diff --git a/bitnami/seaweedfs/README.md b/bitnami/seaweedfs/README.md index 54f07c7a59..5f130e40e0 100644 --- a/bitnami/seaweedfs/README.md +++ b/bitnami/seaweedfs/README.md @@ -65,6 +65,8 @@ You may want to have SeaweedFS Filer Server connect to an external database rath ```console mariadb.enabled=false +externalDatabase.enabled=true +externalDatabase.store=mariadb externalDatabase.host=myexternalhost externalDatabase.user=myuser externalDatabase.password=mypassword @@ -72,6 +74,34 @@ externalDatabase.database=mydatabase externalDatabase.port=3306 ``` +In addition, the tables must be created in the external database before starting seaweedfs. + +For mariadb, the following should be performed (substituting mydatabase as necessary): + +```console +USE mydatabase; +CREATE TABLE IF NOT EXISTS `filemeta` ( + `dirhash` BIGINT NOT NULL COMMENT 'first 64 bits of MD5 hash value of directory field', + `name` VARCHAR(766) NOT NULL COMMENT 'directory or file name', + `directory` TEXT NOT NULL COMMENT 'full path to parent directory', + `meta` LONGBLOB, + PRIMARY KEY (`dirhash`, `name`) +) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; +``` + +For postgresql, the following should be performed (substituting mydatabase as necessary): + +```console +\c mydatabase; +CREATE TABLE IF NOT EXISTS filemeta ( + dirhash BIGINT, + name VARCHAR(65535), + directory VARCHAR(65535), + meta bytea, + PRIMARY KEY (dirhash, name) +); +``` + ### Ingress This chart provides support for Ingress resources. If you have an ingress controller installed on your cluster, such as [nginx-ingress-controller](https://github.com/bitnami/charts/tree/main/bitnami/nginx-ingress-controller) or [contour](https://github.com/bitnami/charts/tree/main/bitnami/contour) you can utilize the ingress controller to serve your application. @@ -1043,7 +1073,8 @@ enabled = false | `mariadb.primary.persistence.size` | Persistent Volume size | `8Gi` | | `mariadb.primary.resourcesPreset` | Set container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if primary.resources is set (primary.resources is recommended for production). | `micro` | | `mariadb.primary.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | -| `externalDatabase.enabled` | Enable secret with external mariadb database credentials | `false` | +| `externalDatabase.enabled` | Enable external database support | `false` | +| `externalDatabase.store` | Database store (mariadb, postgresql) | `mariadb` | | `externalDatabase.host` | External Database server host | `localhost` | | `externalDatabase.port` | External Database server port | `3306` | | `externalDatabase.user` | External Database username | `bn_seaweedfs` | diff --git a/bitnami/seaweedfs/templates/_helpers.tpl b/bitnami/seaweedfs/templates/_helpers.tpl index 6f70ecb6cc..17c9861b77 100644 --- a/bitnami/seaweedfs/templates/_helpers.tpl +++ b/bitnami/seaweedfs/templates/_helpers.tpl @@ -283,6 +283,19 @@ Return the database secret name {{- end -}} {{- end -}} +{{/* +Return the database secret key name +*/}} +{{- define "seaweedfs.database.keyName" -}} +{{- if .Values.mariadb.enabled }} + {{- print "mariadb-password" -}} +{{- else if .Values.externalDatabase.existingSecret -}} + {{- printf "%s-password" .Values.externalDatabase.store -}} +{{- else -}} + {{- print "password" -}} +{{- end -}} +{{- end -}} + {{/* Returns an init-container that waits for the database to be ready */}} @@ -336,7 +349,7 @@ Returns an init-container that waits for the database to be ready valueFrom: secretKeyRef: name: {{ include "seaweedfs.database.secretName" . }} - key: mariadb-password + key: {{ include "seaweedfs.database.keyName" . }} volumeMounts: - name: empty-dir mountPath: /tmp diff --git a/bitnami/seaweedfs/templates/externaldb-secrets.yaml b/bitnami/seaweedfs/templates/externaldb-secrets.yaml index 9c8c53bc2c..e319218e0a 100644 --- a/bitnami/seaweedfs/templates/externaldb-secrets.yaml +++ b/bitnami/seaweedfs/templates/externaldb-secrets.yaml @@ -15,5 +15,5 @@ metadata: {{- end }} type: Opaque data: - mariadb-password: {{ .Values.externalDatabase.password | b64enc | quote }} + password: {{ .Values.externalDatabase.password | b64enc | quote }} {{- end }} diff --git a/bitnami/seaweedfs/templates/filer/statefulset.yaml b/bitnami/seaweedfs/templates/filer/statefulset.yaml index d1ddf3809a..e70faf00b3 100644 --- a/bitnami/seaweedfs/templates/filer/statefulset.yaml +++ b/bitnami/seaweedfs/templates/filer/statefulset.yaml @@ -85,7 +85,7 @@ spec: terminationGracePeriodSeconds: {{ .Values.filer.terminationGracePeriodSeconds }} {{- end }} initContainers: - {{- if .Values.mariadb.enabled }} + {{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }} {{- include "seaweedfs.filer.waitForDBInitContainer" . | nindent 8 }} {{- end }} {{- if .Values.filer.initContainers }} @@ -137,7 +137,7 @@ spec: fieldPath: metadata.namespace - name: WEED_CLUSTER_DEFAULT value: {{ .Values.clusterDefault | quote }} - {{- if .Values.mariadb.enabled }} + {{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }} - name: WEED_MYSQL_ENABLED value: "true" - name: WEED_MYSQL_HOSTNAME @@ -152,7 +152,7 @@ spec: valueFrom: secretKeyRef: name: {{ include "seaweedfs.database.secretName" . }} - key: mariadb-password + key: {{ include "seaweedfs.database.keyName" . }} - name: WEED_MYSQL_CONNECTION_MAX_IDLE value: "5" - name: WEED_MYSQL_CONNECTION_MAX_OPEN @@ -162,6 +162,25 @@ spec: - name: WEED_MYSQL_INTERPOLATEPARAMS value: "true" {{- end }} + {{- if and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "postgres") }} + - name: WEED_POSTGRES_ENABLED + value: "true" + - name: WEED_POSTGRES_HOSTNAME + value: {{ include "seaweedfs.database.host" . | quote }} + - name: WEED_POSTGRES_PORT + value: {{ include "seaweedfs.database.port" . | quote }} + - name: WEED_POSTGRES_DATABASE + value: {{ include "seaweedfs.database.name" . | quote }} + - name: WEED_POSTGRES_USERNAME + value: {{ include "seaweedfs.database.user" . | quote }} + - name: WEED_POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: {{ include "seaweedfs.database.secretName" . }} + key: {{ include "seaweedfs.database.keyName" . }} + - name: WEED_POSTGRES_SSLMODE + value: "disable" + {{- end }} {{- if .Values.filer.extraEnvVars }} {{- include "common.tplvalues.render" (dict "value" .Values.filer.extraEnvVars "context" $) | nindent 12 }} {{- end }} diff --git a/bitnami/seaweedfs/values.yaml b/bitnami/seaweedfs/values.yaml index c99234a366..6997e34188 100644 --- a/bitnami/seaweedfs/values.yaml +++ b/bitnami/seaweedfs/values.yaml @@ -3356,12 +3356,15 @@ mariadb: ## resources: {} ## External Database Configuration -## All of these values are only used if `mariadb.enabled=false` +## All of these values are only used if `mariadb.enabled=false` and `externalDatabase.enabled=true`. ## externalDatabase: - ## @param externalDatabase.enabled Enable secret with external mariadb database credentials + ## @param externalDatabase.enabled Enable external database support ## enabled: false + ## @param externalDatabase.store Database store (mariadb, postgresql) + ## + store: mariadb ## @param externalDatabase.host External Database server host ## host: localhost @@ -3378,7 +3381,7 @@ externalDatabase: ## database: bitnami_seaweedfs ## @param externalDatabase.existingSecret The name of an existing secret with database credentials. Evaluated as a template - ## NOTE: Must contain key `mariadb-password` + ## NOTE: Must contain key `mariadb-password` for mariadb or 'postgres-password' for postgres ## NOTE: When it's set, the `externalDatabase.password` parameter is ignored ## existingSecret: ""