All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
This changeset introduces the ability to control the generated Kubernetes Services for the primary and replicas. It is now possible to declare the exact type of Service being generated, with support for NodePort services.
- The new
service.primary
&service.replica
config keys are used to configure all aspects of the generated Kubernetes clusters, offering more flexibility than in previous versions.
- The
loadBalancer
&replicaLoadBalancer
config parameters have been deprecated. Their defaults have been preserved for this release, soloadBalancer.enabled
still defaults totrue
. It is now recommended thatloadBalancer.enabled
&replicaLoadBalancer.enabled
be set to false, and instead the newservice.primary
&service.replica
config values should be used.
The reason for the bump in minor version is that the default PostgreSQL version is changed from 12 to 13, which is an incompatible change for older deployments.
- Use the PostgreSQL 13 Docker Image by default
- Allow
podManagementPolicy
to be specified in thevalues.yaml
- Port name for postgres-exporter fits the k8s constraints
- Validate
values
schema - Ability to run custom
post_init
scripts - GitHub actions linting the Helm Charts as well as shellcheck the shell scripts
- Prevent full WAL disks (experimental, disabled by default)
- Allow pgBouncer customization (pg_hba, user list)
- Update multinode Chart to work with TimescaleDB 2.0.0
- Use Parallel podManagementPolicy for faster scale-up/down.
- Explicitly set (Pod)securityContext
- Add name to all the used ports
The reason for the bump in minor version is that the default PostgreSQL version is changed from 11 to 12, which is an incompatible change for older deployments.
- The possibility to run a
pgBouncer
container in every Pod. - Allow clusters to be initialized from a backup
- Use the PostgreSQL 12 Docker Image by default
- Use
lz4
compression method by default for pgBackRest
- Use PG12 2.0.0-beta5 Docker Image for multinode
- initdb calls in the multinode chart
- Allow the full Service Spec for the primary and replica Service to be customized in
values.yaml
timescaledb-tune
is now enabled by default- Default autovacuum parameters are changed to better support many chunks
- Default the pull policy for the Docker Images to
Always
. This is mainly useful during development
- Prevent noise in the diagnostic logs about missing files and very short vacuum runs
- Name for PostgreSQL container port, allows for easier
kubectl port-forward
- Backup parameter examples around encryption
- Include kustomize/example directory in the Helm artifacts. This includes new tarballs for recent releases.
- Allow
generate_kustomization.sh
to run on MacOS
- Ability to randomly create credentials, called
unsafe
- Upgrade guide to aid in migrating Secrets from a 0.5 or 0.4 deployment to a 0.6 deployment
- Remove Helm annotations from the Backup Job/Pods
- Recovery configuration options for pgBackRest
- Failing to update Patroni no longer cascades to failing the Helm
- Support for PostgreSQL 12
- Default to PostgreSQL 11, TimescaleDB 1.7
- Sequence of events to trigger the first backup/stanza-create
- Do not cascade failure of patching Patroni to the Helm upgrade
- Move app/chart/release labels under label key in networkpolicy template
- Issue CHECKPOINTs when terminating a Pod to improve time to recover
- Add possibility to specify LoadBalancer port
- Allow mounting
/dev/shm
from Memory, allows bigger Parallel Query workloads - Ability to generate Secrets outside of Helm. This lays the groundwork for removing plain text secrets from the Helm deployment.
- Anti-Affinity clause was using the wrong name to match pods, causing unbalanced deployments
- Examples for setting up a High Throughput Cluster, or using different backup parameters
- Ability to override archive-push/archive-get pgBackRest settings
- Ability to use envFrom to specify environment variables
- Update references to the latest Docker image (PostgreSQL 11.7). This also means PostGIS is now included in the default Docker Image
- Remove all non-PostgreSQL/Kubernetes environment variables from Patroni/PostgreSQL A regular user in PostgreSQL has the ability to read the environment variables of the postmaster. Up to now, the chance of leaking secrets would have been small, but with commit 9708c38b, it is now much more likely that environment variables are exposed to the PostgreSQL processes.
- Set autotune max_wal_size to 60% (instead of 80%) for a dedicated WAL volume
- Prevent creation of replication slots for Jobs
NOTICE: When migrating from a < 0.5.x chart, the primary Service needs to be removed before invoking
helm update
, as the update will otherwise fail.
- Support for multiple tablespaces at initialization time
- CronJob triggering the backup (the POST request was not valid json)
NOTICE: When migrating from a < 0.5.x chart, the primary Service needs to be removed before invoking
helm update
, as the update will otherwise fail.
- Optionally tune PostgreSQL settings (e.g. shared_buffers, work_mem, max_wal_size) using timescaledb-tune
- The charts are now also available in a Helm Repository
- The Service for the primary is now also created and managed by Helm
- Use TimescaleDB 1.6 as the default version
- Configuration changes in
patroni.bootstrap.dcs
now propagate to PostgreSQL servers, previously these settings were only read during bootstrap. - Patroni can now also use the endpoint in OpenShift
pgBackRest
will not check its stanza on a replica- Default Backup Schedule is now set to 1 full a week and 6 incremental backups. (The previous definition mixed up day of month with day of week)
- Enabling Prometheus now creates a Service that can be properly scraped
- Support for NetworkPolicy
- Switch services to ClusterIP if the Load Balancer is set to disabled
- Create PGDATA and WALDIR before a pgBackRest restore
NOTICE: When migrating from a 0.2.x chart to a 0.3 chart, please take the following into account:
- if you use the
env
key in your values, you should rewrite them from a plain dict into a list of EnvVar
- Add ability to annotate pods in the StatefulSet
- Add ability to run any script as callback, if exposed as a ConfigMap
- Reduce loglevel of Patroni from INFO to WARNING
- The values.yaml env key should be expressed as a list of EnvVars
- Refer to the latest minor versions for PostgreSQL & TimescaleDB
- Set
unix_socket_permissions
using PostgreSQL parameters instead
- Add readiness probe for PostgreSQL
- Allow a (debug) command to run at container startup
- Add a Headless Service (by default), with the option to convert it into a Load Balancer
- Rename backup.enable to backup.enabled for consistency, the old naming does still work.
- Rename postgresExporter to prometheus
- Use 2.0.0-beta3 Docker Image for multinode
- Allow postgres-exporter to run as a sidecar
- Allow annotations to be specified for the Load Balancer in the values.yaml file
- Use TimescaleDB 1.5 Docker image by default
- Point to the -latest Docker image tag for multinode by default
- Always explicitly set wal directory
- (multinode) Drop the TimescaleDB extension from the Data Nodes to allow a clean bootstrap to be done
- A preliminary multinode Helm chart
- Architecture diagrams
- Allow multiple volumes for the data directory and the WAL directory
- Documentation pgBackRest restore outside of Kubernetes environment
- The defined Patroni configuration is passed on (using a ConfigMap) to Patroni
- Secrets required by Patroni are injected using environment variables
- The defined pgBackRest configuration is passed on to pgBackRest (using a Secret as it holds credentials)
- The entrypoint no longer points to scripts in the Docker image, this pretty much allows any Docker image to be used, as long as it contains PostgreSQL, TimescaleDB, and pgBackRest
- Best practice PostgreSQL parameters, e.g. enable logging of connections by default
- Open Sourced this repository as Apache License 2.0
- Helm chart for
timescaledb-single
- Documentation for the
timescaledb-single
Helm chart