Skip to content

Commit

Permalink
ParadeDB Enterprise (#58)
Browse files Browse the repository at this point in the history
Co-authored-by: Philippe Noël <[email protected]>
  • Loading branch information
itay-grudev and philippemnoel committed Nov 18, 2024
1 parent bf80138 commit 770759d
Show file tree
Hide file tree
Showing 13 changed files with 178 additions and 7 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/tests-cluster-chainsaw.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,9 @@ jobs:
--values ./.github/minio.yaml \
tenant minio-operator/tenant
# The Docker Hub tokens are required for the ParadeDB Enterprise tests
- name: Run Kyverno/Chainsaw
run: chainsaw test
env:
PARADEDB_ENTERPRISE_DOCKER_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
PARADEDB_ENTERPRISE_DOCKER_PAT: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
21 changes: 19 additions & 2 deletions charts/paradedb/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,23 @@ helm upgrade --atomic --install paradedb --namespace paradedb --create-namespace

### Database Types

To use the ParadeDB Helm Chart, specify `paradedb` via the `type` parameter.
To create a ParadeDB cluster, you must specify either `paradedb` or `paradedb-enterprise` via the `type` parameter.

> [!IMPORTANT]
> When using `paradedb-enterprise` you must also specify the `cluster.imagePullSecrets` containing the Docker registry credentials. You can create one with:
>
> ```bash
> kubectl -n NAMESPACE create secret docker-registry paradedb-enterprise-registry-cred --docker-server="https://index.docker.io/v1/" --docker-username="USERNAME" --docker-password="ACCESS_TOKEN"
> ```
>
> You then need to set the name of the secret in the `values.yaml` file with:
>
> ```yaml
> type: paradedb-enterprise
> cluster:
> imagePullSecrets:
> - name: paradedb-enterprise-registry-cred
> ```
### Modes of Operation
Expand Down Expand Up @@ -210,6 +226,7 @@ refer to the [CloudNativePG Documentation](https://cloudnative-pg.io/documentat
| cluster.priorityClassName | string | `""` | |
| cluster.resources | object | `{}` | Resources requirements of every generated Pod. Please refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ for more information. We strongly advise you use the same setting for limits and requests so that your cluster pods are given a Guaranteed QoS. See: https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/ |
| cluster.roles | list | `[]` | This feature enables declarative management of existing roles, as well as the creation of new roles if they are not already present in the database. See: https://cloudnative-pg.io/documentation/current/declarative_role_management/ |
| cluster.serviceAccountTemplate | object | `{}` | Configure the generation of the service account |
| cluster.storage.size | string | `"8Gi"` | |
| cluster.storage.storageClass | string | `""` | |
| cluster.superuserSecret | string | `""` | |
Expand Down Expand Up @@ -288,7 +305,7 @@ refer to the [CloudNativePG Documentation](https://cloudnative-pg.io/documentat
| recovery.s3.secretKey | string | `""` | |
| recovery.secret.create | bool | `true` | Whether to create a secret for the backup credentials |
| recovery.secret.name | string | `""` | Name of the backup credentials secret |
| type | string | `"paradedb"` | Type of the CNPG database. Available types: * `paradedb` |
| type | string | `"paradedb"` | Type of the CNPG database. Available types: * `paradedb` * `paradedb-enterprise` |
| version.paradedb | string | `"0.12.0"` | We default to v0.12.0 for testing and local development |
| version.postgresql | string | `"16"` | PostgreSQL major version to use |
| poolers[].name | string | `` | Name of the pooler resource |
Expand Down
18 changes: 17 additions & 1 deletion charts/paradedb/README.md.gotmpl
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,23 @@ helm upgrade --atomic --install paradedb --namespace paradedb --create-namespace

### Database Types

To use the ParadeDB Helm Chart, specify `paradedb` via the `type` parameter.
To create a ParadeDB cluster, you must specify either `paradedb` or `paradedb-enterprise` via the `type` parameter.

> [!IMPORTANT]
> When using `paradedb-enterprise` you must also specify the `cluster.imagePullSecrets` containing the Docker registry credentials. You can create one with:
>
> ```bash
> kubectl -n NAMESPACE create secret docker-registry paradedb-enterprise-registry-cred --docker-server="https://index.docker.io/v1/" --docker-username="USERNAME" --docker-password="ACCESS_TOKEN"
> ```
>
> You then need to set the name of the secret in the `values.yaml` file with:
>
> ```yaml
> type: paradedb-enterprise
> cluster:
> imagePullSecrets:
> - name: paradedb-enterprise-registry-cred
> ```

### Modes of Operation

Expand Down
6 changes: 3 additions & 3 deletions charts/paradedb/templates/_bootstrap.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ bootstrap:
owner: {{ tpl .Values.cluster.initdb.owner . }}
{{- end }}
postInitSQL:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- CREATE EXTENSION IF NOT EXISTS pg_cron;
{{- end }}
{{- with .Values.cluster.initdb }}
Expand All @@ -20,7 +20,7 @@ bootstrap:
{{- end -}}
{{- end }}
postInitApplicationSQL:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- CREATE EXTENSION IF NOT EXISTS pg_search;
- CREATE EXTENSION IF NOT EXISTS pg_analytics;
- CREATE EXTENSION IF NOT EXISTS pg_ivm;
Expand All @@ -37,7 +37,7 @@ bootstrap:
{{- end -}}
{{- end }}
postInitTemplateSQL:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- CREATE EXTENSION IF NOT EXISTS pg_search;
- CREATE EXTENSION IF NOT EXISTS pg_analytics;
- CREATE EXTENSION IF NOT EXISTS pg_ivm;
Expand Down
6 changes: 6 additions & 0 deletions charts/paradedb/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ If a custom imageName is available, use it, otherwise use the defaults based on
{{- printf "ghcr.io/cloudnative-pg/postgresql:%s" .Values.version.postgresql -}}
{{- else if eq .Values.type "paradedb" -}}
{{- printf "paradedb/paradedb:%s-v%s" .Values.version.postgresql .Values.version.paradedb -}}
{{- else if eq .Values.type "paradedb-enterprise" -}}
{{- printf "paradedb/paradedb-enterprise:%s-v%s" .Values.version.postgresql .Values.version.paradedb -}}
{{- else -}}
{{ fail "Invalid cluster type!" }}
{{- end }}
Expand Down Expand Up @@ -103,6 +105,8 @@ Postgres UID
{{- .Values.cluster.postgresUID }}
{{- else if eq .Values.type "paradedb" -}}
{{- 999 -}}
{{- else if eq .Values.type "paradedb-enterprise" -}}
{{- 999 -}}
{{- else -}}
{{- 26 -}}
{{- end -}}
Expand All @@ -116,6 +120,8 @@ Postgres GID
{{- .Values.cluster.postgresGID }}
{{- else if eq .Values.type "paradedb" -}}
{{- 999 -}}
{{- else if eq .Values.type "paradedb-enterprise" -}}
{{- 999 -}}
{{- else -}}
{{- 26 -}}
{{- end -}}
Expand Down
2 changes: 1 addition & 1 deletion charts/paradedb/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ spec:
{{ end }}
postgresql:
shared_preload_libraries:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- pg_search
- pg_analytics
- pg_cron
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: paradedb-ncc-1701-d
status:
readyInstances: 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
type: paradedb-enterprise
mode: standalone

cluster:
instances: 1
storage:
size: 256Mi
imagePullSecrets:
- name: paradedb-enterprise-registry-cred

backups:
enabled: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: batch/v1
kind: Job
metadata:
name: paradedb-enterprise-test
status:
succeeded: 1
46 changes: 46 additions & 0 deletions charts/paradedb/test/paradedb-enterprise/02-paradedb_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
apiVersion: batch/v1
kind: Job
metadata:
name: paradedb-enterprise-test
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: data-test
env:
- name: DB_URI
valueFrom:
secretKeyRef:
name: paradedb-ncc-1701-d-app
key: uri
image: alpine:3.19
command: ['sh', '-c']
args:
- |
apk --no-cache add postgresql-client
psql "$DB_URI" <<-EOSQL
CALL paradedb.create_bm25_test_table(
schema_name => 'public',
table_name => 'mock_items'
);
CALL paradedb.create_bm25(
index_name => 'search_idx',
table_name => 'mock_items',
key_field => 'id',
text_fields => paradedb.field('description') || paradedb.field('category'),
numeric_fields => paradedb.field('rating'),
boolean_fields => paradedb.field('in_stock'),
datetime_fields => paradedb.field('created_at'),
json_fields => paradedb.field('metadata'),
range_fields => paradedb.field('weight_range')
);
EOSQL
RESULT=$(psql "$DB_URI" -t) <<-EOSQL
SELECT description
FROM mock_items
WHERE description @@@ '"bluetooth speaker"~1'
LIMIT 1;
EOSQL
echo -$RESULT-
test "$RESULT" = " Bluetooth-enabled speaker"
54 changes: 54 additions & 0 deletions charts/paradedb/test/paradedb-enterprise/chainsaw-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
##
# This test sets up a ParadeDB Enterprise Cluster and ensures that ParadeDB extensions are available.
apiVersion: chainsaw.kyverno.io/v1alpha1
kind: Test
metadata:
name: paradedb-enterprise
spec:
timeouts:
apply: 1s
assert: 2m
cleanup: 1m
steps:
- name: Install a standalone ParadeDB Enterprise CNPG Cluster
try:
- script:
content: |
kubectl -n $NAMESPACE create secret docker-registry paradedb-enterprise-registry-cred --docker-server="https://index.docker.io/v1/" --docker-username="$PARADEDB_ENTERPRISE_DOCKER_USERNAME" --docker-password="$PARADEDB_ENTERPRISE_DOCKER_PAT"
helm upgrade \
--install \
--namespace $NAMESPACE \
--values ./01-paradedb-NCC-1701-D_cluster.yaml \
--wait \
paradedb-ncc-1701-d ../../
- assert:
file: ./01-paradedb-NCC-1701-D_cluster-assert.yaml
catch:
- describe:
apiVersion: v1
kind: Pod
- describe:
apiVersion: batch/v1
kind: Job
- podLogs:
selector: cnpg.io/cluster=paradedb-ncc-1701-d
- name: Verify ParadeDB Enterprise extensions are installed
timeouts:
apply: 1s
assert: 30s
try:
- apply:
file: 02-paradedb_test.yaml
- assert:
file: 02-paradedb_test-assert.yaml
catch:
- describe:
apiVersion: batch/v1
kind: Job
- podLogs:
selector: batch.kubernetes.io/job-name=data-test
- name: Cleanup
try:
- script:
content: |
helm uninstall --namespace $NAMESPACE paradedb-ncc-1701-d
3 changes: 3 additions & 0 deletions charts/paradedb/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,9 @@
"roles": {
"type": "array"
},
"serviceAccountTemplate": {
"type": "object"
},
"storage": {
"type": "object",
"properties": {
Expand Down
1 change: 1 addition & 0 deletions charts/paradedb/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ fullnameOverride: ""
###
# -- Type of the CNPG database. Available types:
# * `paradedb`
# * `paradedb-enterprise`
type: paradedb

version:
Expand Down

0 comments on commit 770759d

Please sign in to comment.