diff --git a/CHANGELOG.md b/CHANGELOG.md index 5605d647..1e14f140 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,24 +5,25 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [v0.7.0] - 2025-04-30 -### Added +### Breaking Changes +- New unified ingress configuration requires migration from previous ingress setup [#219](https://github.com/developmentseed/eoapi-k8s/pull/219) +- Refactored PostgreSQL configuration with removal of deprecated database setup [#215](https://github.com/developmentseed/eoapi-k8s/pull/215) +- Major architectural changes with service-specific templates [#220](https://github.com/developmentseed/eoapi-k8s/pull/220) +### Added +- STAC Browser integration [#168](https://github.com/developmentseed/eoapi-k8s/pull/168) +- Azure secret vault integration for pg-stac secrets [#187](https://github.com/developmentseed/eoapi-k8s/pull/187) +- Support for both NGINX and Traefik ingress controllers [#219](https://github.com/developmentseed/eoapi-k8s/pull/219) +- ArtifactHub.io Integration [#216](https://github.com/developmentseed/eoapi-k8s/pull/216) ### Changed - -* Refactor pgstacbootstrap job and ConfigMaps to use Helm hooks for execution order [#207](https://github.com/developmentseed/eoapi-k8s/pull/207) -* Simplify PgSTAC Bootstrap Process [#208](https://github.com/developmentseed/eoapi-k8s/pull/208) -* Upgrade stac-fastapi-pgstac to v5.0.2 [#204](https://github.com/developmentseed/eoapi-k8s/pull/204) - -### Deprecated - -### Removed - +- Refactor pgstacbootstrap job and ConfigMaps to use Helm hooks for execution order [#207](https://github.com/developmentseed/eoapi-k8s/pull/207) +- Simplify PgSTAC Bootstrap Process [#208](https://github.com/developmentseed/eoapi-k8s/pull/208) +- Upgrade stac-fastapi-pgstac to v5.0.2 [#204](https://github.com/developmentseed/eoapi-k8s/pull/204) ### Fixed - -### Security +- Add ArtifactHub.io Integration (Issue #16) [#216](https://github.com/developmentseed/eoapi-k8s/pull/216) ## [v0.6.0] - 2025-04-03 diff --git a/README.md b/README.md index 2141520d..7e9edd9e 100644 --- a/README.md +++ b/README.md @@ -17,47 +17,98 @@ ## What is eoAPI? -[https://eoapi.dev/](https://eoapi.dev/) +[eoAPI](https://eoapi.dev/) is a collection of REST APIs for Earth Observation data access and analysis. This repository provides a production-ready Kubernetes deployment solution with flexible database options, unified ingress configuration, and built-in monitoring. -## Getting Started +## Quick Start -Make sure you have [helm](https://helm.sh/docs/intro/install/) installed on your machine. -Additionally, you will need a cluster to deploy the eoAPI helm chart. This can be on a cloud provider, like AWS, GCP, or any other that supports Kubernetes. You can also run a local cluster using minikube. +### Prerequisites -### Local +- [helm](https://helm.sh/docs/intro/install/) +- A Kubernetes cluster (local or cloud-based) +- `kubectl` configured for your cluster -For a local installation you can use a preinstalled [Minikube](https://minikube.sigs.k8s.io/), and simply execute the following command: +### Option 1: One-Command Installation +The fastest way to get started is using our Makefile commands: + +For local development with Minikube: ```bash -$ make minikube +make minikube ``` -Once the deployment is done, the url to access eoAPI will be printed to your terminal. +For cloud deployment: +```bash +make deploy +``` -### Cloud +This will automatically: +1. Install the PostgreSQL operator +2. Add the eoAPI helm repository +3. Install the eoAPI helm chart +4. Set up necessary namespaces and configurations -If you don't have a k8s cluster set up on AWS or GCP then follow an IaC guide below that is relevant to you +### Option 2: Step-by-Step Installation -> ⓘ The helm chart in this repo assumes your cluster has a few third-party add-ons and controllers installed. So -> it's in your best interest to read through the IaC guides to understand what those defaults are +If you prefer more control over the installation process: -* [AWS EKS Cluster Setup](./docs/aws-eks.md) -* [GCP GKE Cluster Setup](./docs/gcp-gke.md) +1. Install the PostgreSQL operator: +```bash +helm upgrade --install \ + --set disable_check_for_upgrades=true pgo \ + oci://registry.developers.crunchydata.com/crunchydata/pgo \ + --version 5.7.4 +``` + +2. Add the eoAPI helm repository: +```bash +helm repo add eoapi https://devseed.com/eoapi-k8s/ +``` + +3. Get your current git SHA: +```bash +export GITSHA=$(git rev-parse HEAD | cut -c1-10) +``` + +4. Install eoAPI: +```bash +helm upgrade --install \ + --namespace eoapi \ + --create-namespace \ + --set gitSha=$GITSHA \ + eoapi devseed/eoapi +``` + +### Post-Installation -Make sure you have your `kubectl` configured to point to the cluster you want to deploy eoAPI to. Then simply execute the following command: +1. Enable ingress (for Minikube): +```bash +minikube addons enable ingress +``` +2. Optional: Load sample data: ```bash -$ make deploy +make ingest ``` -### Manual step-by-step installation +## Cloud Provider Setup + +For cloud-based deployments, refer to our detailed setup guides: +* [AWS EKS Cluster Setup](./docs/aws-eks.md) +* [GCP GKE Cluster Setup](./docs/gcp-gke.md) +* [Azure Setup](./docs/azure.md) + +## Documentation + +* [Configuration Guide](./docs/configuration.md) +* [Data Management](./docs/manage-data.md) +* [Autoscaling and Monitoring](./docs/autoscaling.md) +* [Health Checks](./docs/health.md) +* [Unified Ingress Configuration](./docs/unified-ingress.md) -Instead of using the `make` commands above you can also [manually `helm install` eoAPI](./docs/helm-install.md). +## Contributing +We welcome contributions! See our [contributing guide](./CONTRIBUTING.md) for details. -## More information +## License -* Read about [Default Configuration](./docs/configuration.md#default-configuration) and -other [Configuration Options](./docs/configuration.md#additional-options) -* [Manage your data](./docs/manage-data.md) in eoAPI -* Learn about [Autoscaling / Monitoring / Observability](./docs/autoscaling.md) +This project is licensed under the [MIT License](./LICENSE). diff --git a/helm-chart/eoapi/Chart.yaml b/helm-chart/eoapi/Chart.yaml index bf544c42..59870b78 100644 --- a/helm-chart/eoapi/Chart.yaml +++ b/helm-chart/eoapi/Chart.yaml @@ -13,6 +13,7 @@ type: application kubeVersion: ">=1.23.0-0" # Artifacthub metadata +icon: logo.png annotations: artifacthub.io/changes: | - Adds integration with Artifacthub.io @@ -35,13 +36,14 @@ annotations: # 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.6.0" +version: "0.7.0" # 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.6.0" +# We use the stac-fastapi-pgstac version as the app version +appVersion: "5.0.2" dependencies: - name: postgrescluster diff --git a/helm-chart/eoapi/README.md b/helm-chart/eoapi/README.md index f24990e7..8fb8a92c 100644 --- a/helm-chart/eoapi/README.md +++ b/helm-chart/eoapi/README.md @@ -1,141 +1,121 @@ -# EOAPI Helm Chart +# eoAPI Helm Chart -This Helm chart deploys the EOAPI (Earth Observation API) stack, which includes STAC API, raster tile services, vector tile services, and a multidimensional data service. +![Version: 0.7.0](https://img.shields.io/badge/Version-0.7.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.0.2](https://img.shields.io/badge/AppVersion-5.0.2-informational?style=flat-square) -## Overview +A Helm chart for deploying Earth Observation APIs with integrated STAC, raster, vector, and multidimensional services. -The chart sets up: +## Features -- A PostgreSQL database with PostGIS and PgSTAC extensions -- STAC API service for metadata discovery and search -- Titiler for raster tile services -- TIPG for vector tile services -- Optional multidimensional data service +- STAC API for metadata discovery and search +- Raster tile services (TiTiler) +- Vector tile services (TIPG) +- Multidimensional data support +- Built-in STAC Browser interface +- Flexible database configuration +- Unified ingress system -## Prerequisites - -- Kubernetes 1.16+ -- Helm 3.0+ -- PV provisioner support in the underlying infrastructure -- CrunchyData Postgres Operator (for the PostgreSQL database) - -## Installation +## TL;DR ```bash -# Install Postgres Operator first -helm install --set disable_check_for_upgrades=true pgo oci://registry.developers.crunchydata.com/crunchydata/pgo +# Add the eoAPI repository +helm repo add eoapi https://devseed.com/eoapi-k8s/ + +# Install the PostgreSQL operator (required) +helm install --set disable_check_for_upgrades=true pgo \ + oci://registry.developers.crunchydata.com/crunchydata/pgo \ + --version 5.7.4 -# Then install eoapi -helm install eoapi ./eoapi +# Install eoAPI +helm install eoapi eoapi/eoapi ``` -## Configuration +## Prerequisites -The chart can be configured via `values.yaml`. See the chart's `values.yaml` file for all available options and detailed descriptions. +- Kubernetes 1.23+ +- Helm 3.0+ +- PV provisioner support +- PostgreSQL operator -Key configuration sections: +## Quick Start Configuration ```yaml -# Services to enable +# Enable desired services apiServices: - raster - stac - vector - # - multidim (disabled by default) + - stac-browser + # - multidim # Optional -# Ingress configuration +# Configure ingress ingress: enabled: true - className: "nginx" - # ... - -# Database configuration -postgrescluster: - enabled: true - # ... -``` - -## PgSTAC Bootstrap Process - -The chart includes a streamlined process for initializing and setting up the PgSTAC database. - -### PgSTAC Bootstrap Overview - -The setup process consists of two main jobs: - -1. **pgstac-migrate job**: Runs the pypgstac migrate command to initialize the database schema, applies settings, and sets necessary permissions. -2. **pgstac-load-samples job**: (Optional) Loads sample STAC data only when sample loading is enabled. - -### Improvements in PgSTAC Bootstrap - -- Replaced custom Python script with pypgstac migrate command -- Moved SQL settings to a dedicated SQL file for better maintainability -- Separated sample data loading into an optional job -- Uses standard PostgreSQL environment variables -- Ensures the process remains idempotent for safe re-runs + className: "nginx" # or "traefik" + host: "your-domain.com" # Optional -### PgSTAC Directory Structure +# Database options +postgresql: + type: "postgrescluster" # or "external-plaintext" or "external-secret" -The codebase has been reorganized to separate different types of files: - -- `initdb-data/settings/`: Contains configuration settings like the PgSTAC settings SQL file -- `initdb-data/samples/`: Contains sample data files that are loaded only when sample loading is enabled - -### PgSTAC Configuration - -- Enable/disable the setup process through `pgstacBootstrap.enabled` -- Control sample data loading: - - New approach: `pgstacBootstrap.settings.loadSamples` (recommended) - - Legacy approach: `pgstacBootstrap.settings.envVars.LOAD_FIXTURES` (deprecated) - -Example configuration: - -```yaml +# Load sample data pgstacBootstrap: enabled: true settings: - # General configuration options - loadSamples: true # Set to false to disable sample data loading - - resources: - requests: - cpu: "512m" - memory: "1024Mi" - limits: - cpu: "512m" - memory: "1024Mi" + loadSamples: true ``` -## Services - -### STAC API - -The STAC API service provides a standardized way to search and discover geospatial data. - -### Raster Services (Titiler) +## Configuration Options -Provides dynamic tiling for raster data through the TiTiler implementation. +### Key Parameters -### Vector Services (TIPG) +| Parameter | Description | Default | +|-----------|-------------|---------| +| `postgresql.type` | Database deployment type | `postgrescluster` | +| `ingress.enabled` | Enable ingress | `true` | +| `ingress.className` | Ingress controller class | `nginx` | +| `browser.enabled` | Enable STAC Browser interface | `true` | +| `pgstacBootstrap.enabled` | Enable database initialization | `true` | -Provides vector tile services for PostGIS data through the TIPG implementation. +Refer to the [values.schema.json](./values.schema.json) for the complete list of configurable parameters. -### Multidimensional Services (Optional) +### Database Options -Provides services for multidimensional data (time series, etc.). +1. Integrated PostgreSQL Operator: +```yaml +postgresql: + type: "postgrescluster" +``` -## Persistence +2. External Database: +```yaml +postgresql: + type: "external-plaintext" + external: + host: "your-db-host" + port: "5432" + database: "eoapi" + credentials: + username: "your-user" + password: "your-password" +``` -The chart uses PostgreSQL for data persistence. Make sure to configure appropriate storage for production use. +3. External Database with Secrets: +```yaml +postgresql: + type: "external-secret" + external: + existingSecret: + name: "your-secret" +``` -## Upgrading +## Documentation -When upgrading the chart, consider any changes to values.yaml and migrations that might need to be applied. +For detailed configuration and usage: -## Uninstallation +- [Configuration Guide](https://github.com/developmentseed/eoapi-k8s/blob/main/docs/configuration.md) +- [Data Management](https://github.com/developmentseed/eoapi-k8s/blob/main/docs/manage-data.md) +- [Autoscaling Guide](https://github.com/developmentseed/eoapi-k8s/blob/main/docs/autoscaling.md) -```bash -helm delete eoapi -``` +## License -Note that PVs may need to be manually deleted if you want to remove all data. +[MIT License](https://github.com/developmentseed/eoapi-k8s/blob/main/LICENSE) diff --git a/helm-chart/eoapi/logo.png b/helm-chart/eoapi/logo.png new file mode 100644 index 00000000..d65eb5a4 Binary files /dev/null and b/helm-chart/eoapi/logo.png differ diff --git a/helm-chart/eoapi/templates/NOTES.txt b/helm-chart/eoapi/templates/NOTES.txt new file mode 100644 index 00000000..403f4fe1 --- /dev/null +++ b/helm-chart/eoapi/templates/NOTES.txt @@ -0,0 +1,58 @@ +Thank you for installing {{ .Chart.Name }} {{ .Chart.Version }} + +Your eoAPI deployment is now being set up. This may take a few minutes. + +{{- if .Values.ingress.enabled }} + +You can access the services at: +{{- if .Values.ingress.host }} + Host: {{ .Values.ingress.host }} +{{- else }} + Get the host using: + $ kubectl get ingress -n {{ .Release.Namespace }} +{{- end }} + +Available endpoints: +{{- if has "stac" .Values.apiServices }} +- STAC API: {{ if .Values.ingress.host }}https://{{ .Values.ingress.host }}{{ end }}/stac +{{- end }} +{{- if has "raster" .Values.apiServices }} +- Raster API: {{ if .Values.ingress.host }}https://{{ .Values.ingress.host }}{{ end }}/raster +{{- end }} +{{- if has "vector" .Values.apiServices }} +- Vector API: {{ if .Values.ingress.host }}https://{{ .Values.ingress.host }}{{ end }}/vector +{{- end }} +{{- if has "multidim" .Values.apiServices }} +- MultiDim API: {{ if .Values.ingress.host }}https://{{ .Values.ingress.host }}{{ end }}/multidim +{{- end }} +{{- if .Values.browser.enabled }} +- STAC Browser: {{ if .Values.ingress.host }}https://{{ .Values.ingress.host }}{{ end }}/browser +{{- end }} + +{{- else }} +You have disabled the ingress. To access the services, you need to: +1. Set up your own ingress controller, or +2. Use port forwarding: + +{{- if has "stac" .Values.apiServices }} + $ kubectl port-forward -n {{ .Release.Namespace }} svc/stac 8080:{{ .Values.service.port }} +{{- end }} +{{- if has "raster" .Values.apiServices }} + $ kubectl port-forward -n {{ .Release.Namespace }} svc/raster 8081:{{ .Values.service.port }} +{{- end }} +{{- if has "vector" .Values.apiServices }} + $ kubectl port-forward -n {{ .Release.Namespace }} svc/vector 8082:{{ .Values.service.port }} +{{- end }} +{{- if has "multidim" .Values.apiServices }} + $ kubectl port-forward -n {{ .Release.Namespace }} svc/multidim 8083:{{ .Values.service.port }} +{{- end }} +{{- end }} + +To verify the deployment status: + $ kubectl get pods -n {{ .Release.Namespace }} + +For troubleshooting: + $ kubectl describe pods -n {{ .Release.Namespace }} + $ kubectl logs -n {{ .Release.Namespace }} -l app.kubernetes.io/name={{ .Chart.Name }} + +Visit https://github.com/developmentseed/eoapi-k8s for more information. diff --git a/helm-chart/eoapi/values.schema.json b/helm-chart/eoapi/values.schema.json index dafc6c46..7d7f7a71 100644 --- a/helm-chart/eoapi/values.schema.json +++ b/helm-chart/eoapi/values.schema.json @@ -6,33 +6,447 @@ "gitSha" ], "properties": { + "gitSha": { + "type": "string", + "description": "Git SHA of the deployment" + }, + "testing": { + "type": "boolean", + "description": "Only used in CI for running parallel helm installs", + "default": false + }, + "serviceAccount": { + "type": "object", + "properties": { + "create": { + "type": "boolean", + "default": true, + "description": "Whether to create a service account" + }, + "name": { + "type": "string", + "description": "Service account name. If not set and create is true, a name is generated" + }, + "automount": { + "type": "boolean", + "default": true, + "description": "Automatically mount service account token" + }, + "annotations": { + "type": "object", + "description": "Annotations to add to the service account" + }, + "labels": { + "type": "object", + "description": "Labels to add to the service account" + } + } + }, "service": { "type": "object", - "required": [ - "port" - ], + "required": ["port"], "properties": { "port": { "type": "integer", - "pattern": "^[0-9]{4}$" + "description": "Service port number" } } }, "ingress": { "type": "object", - "required": [ - "className" - ], "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable ingress" + }, "className": { "type": "string", - "pattern": "^(nginx|traefik|testing123)$" + "enum": ["nginx", "traefik"], + "description": "Ingress controller class name" + }, + "pathType": { + "type": "string", + "enum": ["Prefix", "ImplementationSpecific"], + "description": "Ingress path type" + }, + "pathSuffix": { + "type": "string", + "description": "Suffix to add to service paths" + }, + "rootPath": { + "type": "string", + "description": "Root path for doc server" + }, + "host": { + "type": "string", + "description": "Ingress host" + }, + "annotations": { + "type": "object", + "description": "Additional annotations for ingress" + }, + "tls": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable TLS" + }, + "secretName": { + "type": "string", + "description": "TLS secret name" + }, + "certManager": { + "type": "boolean", + "description": "Use cert-manager for TLS" + }, + "certManagerIssuer": { + "type": "string", + "description": "cert-manager issuer to use" + }, + "certManagerEmail": { + "type": "string", + "description": "Email address for cert-manager" + } + } } } }, - "gitSha": { - "type": "string", - "pattern": "^.+$" + "postgresql": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["postgrescluster", "external-plaintext", "external-secret"], + "description": "PostgreSQL deployment type", + "default": "postgrescluster" + }, + "external": { + "type": "object", + "properties": { + "host": { + "type": "string", + "description": "External PostgreSQL host" + }, + "port": { + "type": "string", + "description": "External PostgreSQL port" + }, + "database": { + "type": "string", + "description": "External PostgreSQL database name" + }, + "credentials": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "External PostgreSQL username" + }, + "password": { + "type": "string", + "description": "External PostgreSQL password" + } + } + }, + "existingSecret": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of existing secret" + }, + "keys": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Username key in secret" + }, + "password": { + "type": "string", + "description": "Password key in secret" + }, + "host": { + "type": "string", + "description": "Host key in secret" + }, + "port": { + "type": "string", + "description": "Port key in secret" + }, + "database": { + "type": "string", + "description": "Database key in secret" + } + } + } + } + } + } + } + } + }, + "postgrescluster": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable PostgreSQL cluster" + }, + "postgresVersion": { + "type": "integer", + "description": "PostgreSQL version" + }, + "postGISVersion": { + "type": "string", + "description": "PostGIS version" + }, + "pgBouncerReplicas": { + "type": "integer", + "description": "Number of PgBouncer replicas" + }, + "monitoring": { + "type": "boolean", + "description": "Enable monitoring" + }, + "patroni": { + "type": "object", + "description": "Patroni configuration" + }, + "databaseInitSQL": { + "type": "object", + "description": "Database initialization SQL" + }, + "instances": { + "type": "array", + "description": "PostgreSQL instances configuration" + }, + "users": { + "type": "array", + "description": "PostgreSQL users configuration" + } + } + }, + "pgstacBootstrap": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable PgSTAC bootstrap" + }, + "image": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "PgSTAC bootstrap image name" + }, + "tag": { + "type": "string", + "description": "PgSTAC bootstrap image tag" + } + } + }, + "settings": { + "type": "object", + "properties": { + "loadSamples": { + "type": "boolean", + "description": "Load sample data" + }, + "user": { + "type": "string", + "description": "Database user" + }, + "database": { + "type": "string", + "description": "Database name" + }, + "resources": { + "type": "object", + "description": "Resource requirements" + } + } + } + } + }, + "apiServices": { + "type": "array", + "items": { + "type": "string", + "enum": ["raster", "multidim", "stac", "vector"] + }, + "description": "List of API services to enable" + }, + "raster": { + "$ref": "#/definitions/apiService" + }, + "multidim": { + "$ref": "#/definitions/apiService" + }, + "stac": { + "$ref": "#/definitions/apiService" + }, + "vector": { + "$ref": "#/definitions/apiService" + }, + "browser": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable STAC browser" + }, + "replicaCount": { + "type": "integer", + "description": "Number of replicas" + }, + "image": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Image name" + }, + "tag": { + "type": "string", + "description": "Image tag" + } + } + }, + "ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable ingress for browser" + } + } + } + } + }, + "docServer": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable documentation server" + } + } + } + }, + "definitions": { + "apiService": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable the service" + }, + "ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable ingress for this service" + } + } + }, + "autoscaling": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable autoscaling" + }, + "minReplicas": { + "type": "integer", + "description": "Minimum number of replicas" + }, + "maxReplicas": { + "type": "integer", + "description": "Maximum number of replicas" + }, + "type": { + "type": "string", + "enum": ["cpu", "requestRate", "both"], + "description": "Autoscaling metric type" + }, + "behaviour": { + "type": "object", + "description": "Autoscaling behavior configuration" + }, + "targets": { + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "description": "CPU utilization target" + }, + "requestRate": { + "type": "string", + "description": "Request rate target" + } + } + } + } + }, + "image": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Image name" + }, + "tag": { + "type": "string", + "description": "Image tag" + } + } + }, + "command": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Container command" + }, + "settings": { + "type": "object", + "properties": { + "labels": { + "type": "object", + "description": "Additional pod labels" + }, + "resources": { + "type": "object", + "description": "Resource requirements" + }, + "extraEnvFrom": { + "type": "array", + "description": "Additional environment variables from references" + }, + "extraVolumeMounts": { + "type": "array", + "description": "Additional volume mounts" + }, + "extraVolumes": { + "type": "array", + "description": "Additional volumes" + }, + "envVars": { + "type": "object", + "description": "Environment variables" + } + } + } + } } } } diff --git a/helm-chart/eoapi/values.yaml b/helm-chart/eoapi/values.yaml index fdc3cee5..9e0514d7 100644 --- a/helm-chart/eoapi/values.yaml +++ b/helm-chart/eoapi/values.yaml @@ -107,7 +107,7 @@ postgresql: postgrescluster: enabled: true postgresVersion: 16 - postGISVersion: 3.4 + postGISVersion: "3.4" pgBouncerReplicas: 1 monitoring: false # Configure Patroni to set proper schema permissions