Deploy PostgreSQL
PostgreSQL is used by Gnocchi to index the data collected and sent by Ceilometer.
Install the Postgres Operator
We are using the Zalando postgres-operator which offers easy to run and highly-available PostgreSQL clusters on Kubernetes.
Run the postgres-operator deployment Script bin/install-postgres-operator.sh
#!/bin/bash
# shellcheck disable=SC2124,SC2145,SC2294
# Directory to check for YAML files
CONFIG_DIR="/etc/genestack/helm-configs/postgres-operator"
pushd /opt/genestack/submodules/postgres-operator/charts || exit
# Base helm command setup
HELM_CMD="helm upgrade --install postgres-operator ./postgres-operator \
--namespace=postgres-system \
--create-namespace \
--timeout 120m"
# Add the base overrides file
HELM_CMD+=" -f /opt/genestack/base-helm-configs/postgres-operator/postgres-operator-helm-overrides.yaml"
# Check if YAML files exist in the specified directory
if compgen -G "${CONFIG_DIR}/*.yaml" > /dev/null; then
# Append all YAML files from the directory to the helm command
for yaml_file in "${CONFIG_DIR}"/*.yaml; do
HELM_CMD+=" -f ${yaml_file}"
done
fi
HELM_CMD+="${@}"
# Run the helm command
echo "Executing Helm command:"
echo "${HELM_CMD}"
eval "${HELM_CMD}"
popd || exit
Create the PostgreSQL Cluster
Customize as needed
Be sure to modify the cluster parameters to suit your needs. The below values should work fine for a small lab or staging envionrment, however more disk space and other changes may be required in production.
kubectl apply -f - <<EOF
apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
name: postgres-cluster
namespace: openstack
spec:
dockerImage: ghcr.io/zalando/spilo-16:3.2-p3
teamId: "acid"
numberOfInstances: 3
postgresql:
version: "16"
parameters:
shared_buffers: "2GB"
max_connections: "1024"
log_statement: "all"
volume:
size: 40Gi
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/worker
operator: In
values:
- worker
EOF