SGShardedCluster


Kind: SGShardedCluster

listKind: SGShardedClusterList

plural: sgshardedclusters

singular: sgshardedcluster

shortNames sgscl


StackGres PostgreSQL sharded clusters are created using the SGShardedCluster Custom Resource.

Example:

apiVersion: stackgres.io/v1alpha1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  postgres:
    version: 'latest'
  type: citus
  database: database
  coordinator:
    instances: 1
    pods:
      persistentVolume:
        size: '5Gi'
  workers:
    clusters: 2
    instancesPerCluster: 1
    pods:
      persistentVolume:
        size: '5Gi'

See also Sharded Cluster Creation section.

Property
Description
apiVersion
string
stackgres.io/v1beta1

Constraints: required, immutable
kind
string
SGShardedCluster

Constraints: required, immutable
metadata
object
Refer to the Kubernetes API documentation for the fields of the metadata field.

Constraints: required, updatable
spec
object
Specification of the desired behavior of a StackGres sharded cluster.

Constraints: required, updatable
status
object
Current status of a StackGres sharded cluster.

Constraints: optional, updatable

SGShardedCluster.spec

↩ Parent

Specification of the desired behavior of a StackGres sharded cluster.

Property
Description
coordinator
object
The coordinator is a StackGres cluster responsible for coordinating data storage and access to the workers.

Constraints: required, updatable
database
string
The database name that will be created and used across all node and where “partitioned” (distributed) tables will live in.

Constraints: required, updatable
postgres
object
This section allows to configure Postgres features

Constraints: required, updatable
configurations
object
Sharded cluster custom configurations.

Constraints: optional, updatable
distributedLogs
object
StackGres features a functionality for all pods to send Postgres, Patroni and PgBouncer logs to a central (distributed) location, which is in turn another Postgres database. Logs can then be accessed via SQL interface or from the web UI. This section controls whether to enable this feature or not. If not enabled, logs are sent to the pod’s standard output.

Constraints: optional, updatable
initialData
object

Sharded cluster initialization data options. Sharded cluster may be initialized empty, or from a sharded backup restoration.

This field can only be set on creation.


Constraints: optional, immutable
metadata
object
Metadata information from any cluster created resources.

Constraints: optional, updatable
nonProductionOptions
object
Constraints: optional, updatable
postgresServices
object
Kubernetes services created or managed by StackGres.

Constraints: optional, updatable
profile
string

The profile allows changing in a convenient place a set of configuration defaults that affect how the cluster is generated.

All those defaults can be overwritten by setting the correspoinding fields.

Available profiles are:

  • production:

    Prevents two Pods from running in the same Node (set .spec.nonProductionOptions.disableClusterPodAntiAffinity to false by default). Sets both limits and requests using SGInstanceProfile for patroni container that runs both Patroni and Postgres (set .spec.nonProductionOptions.disablePatroniResourceRequirements to false by default). Sets requests using the referenced SGInstanceProfile for sidecar containers other than patroni (set .spec.nonProductionOptions.disableClusterResourceRequirements to false by default).

  • testing:

    Allows two Pods to running in the same Node (set .spec.nonProductionOptions.disableClusterPodAntiAffinity to true by default). Sets both limits and requests using SGInstanceProfile for patroni container that runs both Patroni and Postgres (set .spec.nonProductionOptions.disablePatroniResourceRequirements to false by default). Sets requests using the referenced SGInstanceProfile for sidecar containers other than patroni (set .spec.nonProductionOptions.disableClusterResourceRequirements to false by default).

  • development:

    Allows two Pods from running in the same Node (set .spec.nonProductionOptions.disableClusterPodAntiAffinity to true by default). Unset both limits and requests for patroni container that runs both Patroni and Postgres (set .spec.nonProductionOptions.disablePatroniResourceRequirements to true by default). Unsets requests for sidecar containers other than patroni (set .spec.nonProductionOptions.disableClusterResourceRequirements to true by default).

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: production
replicateFrom
object

Make the sharded cluster a read-only standby replica allowing replication from another sharded cluster and acting as a relay.

Changing this section is allowed to fix issues or to change the replication source.

Removing this section convert the sharded cluster in a normal sharded cluster where the standby leader of each SGCluster is converted into a primary instance.


Constraints: optional, updatable
replication
object

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.


Constraints: optional, updatable
shards
object

Deprecated use workers instead.

The workers are a group of StackGres clusters where the partitioned data chunks are stored.

When referring to the cluster in the descriptions below it applies to any worker’s StackGres cluster.


Constraints: optional, updatable
type
string

The sharding technology that will be used for the sharded cluster.

Available technologies are:

  • citus
  • ddp
  • shardingsphere

Citus

Citus is a PostgreSQL extension that transforms Postgres into a distributed database—so you can achieve high performance at any scale.

See also https://github.com/citusdata/citus

DDP

DDP (Distributed Data Partitioning) allows you to distribute data across different physical nodes to improve the query performance of high data volumes, taking advantage of distinct nodes’ resources. Using the entry point named coordinator in charge of sending/distributing the queries to different nodes named workers.

ShardingSphere

Apache ShardingSphere is an ecosystem to transform any database into a distributed database system, and enhance it with sharding, elastic scaling, encryption features & more.

StackGres implementation of ShardingSphere as a sharding technology uses the ShardingSphere Proxy as an entry point to distribute SQL traffic among the workers.

This implementation requires the ShardingSphere Operator to be installed and will create a ComputeNode


Constraints: optional, updatable
workers
object

The workers are a group of StackGres clusters where the partitioned data chunks are stored.

When referring to the cluster in the descriptions below it applies to any worker’s StackGres cluster.


Constraints: optional, updatable

SGShardedCluster.spec.coordinator

↩ Parent

The coordinator is a StackGres cluster responsible for coordinating data storage and access to the workers.

Property
Description
instances
integer

Number of StackGres instances for the cluster. Each instance contains one Postgres server. Out of all of the Postgres servers, one is elected as the primary, the rest remain as read-only replicas.

If sharding type is shardingsphere then, instead of an SGCluster a ComputeNode will be created.

See also https://shardingsphere.apache.org/oncloud/current/en/user-manual/cn-sn-operator/#computenode


Constraints: required, updatable
Minimum: 0
pods
object

Cluster pod’s configuration.

If sharding type is shardingsphere then this section will apply to the ComputeNode.


Constraints: required, updatable
autoscaling
object

This section allows configuring vertical Pod autoscaling for the SGCluster’s Pods.

Vertical Pod Autoscaling will use cpu and memory usage as the metric to control the upscale or downscale of the Pod requests and limits resources. Vertical Pod Autoscaling requires the Vertical Pod Autoscaler operator to be installed in the Kubernetes cluster.


Constraints: optional, updatable
clusterName
string

Name of coordinator StackGres cluster.

When this name is specified it will be used as the coordinator SGCluster name.

This field can only be set on creation.


Constraints: optional, immutable
configurations
object
Coordinator custom configurations.

Constraints: optional, updatable
managedSql
object

This section allows referencing SQL scripts that will be applied to the cluster live.

If sharding type is shardingsphere then this section will be applied to the first cluster worker. In this case the database postgres will also provide a foreign server called shardingsphere and the superuser user mappings that will allow running DistQL queries using command like the following:


SELECT * FROM dblink('shardingsphere', 'SHOW STORAGE UNITS')
  AS _(name text, type text, host text, port int, db text,
    connection_timeout_milliseconds int, idle_timeout_milliseconds int,
    max_lifetime_milliseconds int, max_pool_size int, min_pool_size int,
    read_only boolean, other_attributes text);

See https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-proxy/distsql


Constraints: optional, updatable
metadata
object

Metadata information from coordinator cluster created resources.

If sharding type is shardingsphere then this section is applied to the ComputeNode.


Constraints: optional, updatable
queryRouterClusterNameTemplate
string

Name template of query router worker’s StackGres clusters.

The SGCluster name will be created using the name template and the index (starting at 0) as a suffix. For instance with a clusterNameTemplate set to myworker the first SGCluster name will be myworker0.

By default the query router cluster name template is <cluster name>-router.

This field can only be set on creation.


Constraints: optional, immutable
queryRouterClusters
integer

Number of query router StackGres clusters, each composed of a single instance.

Query routers are special workers that do not store sharded table data. Like the coordinator, query routers are StackGres clusters responsible for coordinating access to the workers but do not coordinate data storage. The instances created as query routers allow horizontal scaling of the entrypoints for read/write operations without overloading the workers that store the sharded table data.

Query router StackGres clusters inherit the same characteristics as the coordinator in their spec, with the exception of the instances which is fixed to one and the managedSql that requires an override to be set. This is because a query router, like the coordinator, is not meant to store data and is architecturally more similar to a coordinator than to a worker. Their values can still be overridden via .spec.workers.overrides. See also field queryRouterIndexOffset.

This parameter can only be set if .spec.type is citus.


Constraints: optional, updatable
Minimum: 0
queryRouterIndexOffset
integer
Allow to set the index offset for query router workers. Needed only if you plan to have more than 1023 regular worker nodes.

Constraints: optional, updatable
Minimum: 1024
replication
object

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
sgInstanceProfile
string

Name of the SGInstanceProfile.

A SGInstanceProfile defines CPU and memory limits. Must exist before creating a cluster.

When no profile is set, a default (1 core, 2 GiB RAM) one is used.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart

SGShardedCluster.spec.coordinator.pods

↩ Parent

Cluster pod’s configuration.

If sharding type is shardingsphere then this section will apply to the ComputeNode.

Property
Description
persistentVolume
object

Pod’s persistent volume configuration.

If sharding type is shardingsphere then this section is ignored.


Constraints: required, updatable
customContainers
[]object

A list of custom application containers that run within the coordinator cluster’s Pods.

The name used in this section will be prefixed with the string custom- so that when referencing them in the .spec.containers section of SGInstanceProfile the name used has to be prepended with the same prefix.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable
customEnv
map[string][]object

A list of custom environment variables for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customEnvFrom
map[string][]object

A list of custom environment variables from source for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitContainers
[]object

A list of custom application init containers that run within the workers cluster’s Pods. The custom init containers will run following the defined sequence at the end of cluster’s Pods init containers.

The name used in this section will be prefixed with the string custom- so that when referencing them in the .spec.containers section of SGInstanceProfile the name used has to be prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitEnv
map[string][]object

A list of custom environment variables for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitEnvFrom
map[string][]object

A list of custom environment variables from source for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitVolumeMounts
map[string][]object

A list of custom volume mounts for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customVolumeMounts
map[string][]object

A list of custom volume mounts for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customVolumes
[]object

A list of custom volumes that may be used along with any container defined in customInitContainers or customContainers sections for the coordinator.

The name used in this section will be prefixed with the string custom- so that when referencing them in the customInitContainers or customContainers sections the name used has to be prepended with the same prefix.

Only the following volume types are allowed: configMap, downwardAPI, emptyDir, gitRepo, glusterfs, hostPath, nfs, projected and secret

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#volume-v1-core


Constraints: optional, updatable, may require restart
disableConnectionPooling
boolean

If set to true, avoids creating a connection pooling (using PgBouncer) sidecar.

If sharding type is citus and .spec.configurations.citus.connectToPooler is true (the default) this field is ignored.

If sharding type is shardingsphere then this field is ignored.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
disableEnvoy
boolean

If set to false, creates the envoy sidecar. This sidecar is used as the edge proxy for the cluster’s Pods providing extra metrics to the monitoring layer.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: true
disableMetricsExporter
boolean
Deprecated use .spec.configurations.observability.disableMetrics instead.

Constraints: optional, updatable
Default: false
disablePostgresUtil
boolean

If set to true, avoids creating the postgres-util sidecar. This sidecar contains usual Postgres administration utilities that are not present in the main (patroni) container, like psql. Only disable if you know what you are doing.

If sharding type is shardingsphere then this field is ignored.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
dnsConfig
object
PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

Constraints: optional, updatable
dnsPolicy
string
Set DNS policy for the pod. Defaults to “ClusterFirst”. Valid values are ‘ClusterFirstWithHostNet’, ‘ClusterFirst’, ‘Default’ or ‘None’. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to ‘ClusterFirstWithHostNet’.

Constraints: optional, updatable
hostNetwork
boolean
Host networking requested for this pod. Use the host’s network namespace. When using HostNetwork you should specify ports so the scheduler is aware. When hostNetwork is true, specified hostPort fields in port definitions must match containerPort, and unspecified hostPort fields in port definitions are defaulted to match containerPort. Default to false.

Constraints: optional, updatable
livenessProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
managementPolicy
string

managementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is OrderedReady, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is Parallel which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.

If sharding type is shardingsphere then this field is ignored.


Constraints: optional, updatable
readinessProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
resources
object
Pod custom resources configuration.

Constraints: optional, updatable
scheduling
object

Pod custom scheduling, affinity and topology spread constratins configuration.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
setHostnameAsFQDN
boolean
If true the pod’s hostname will be configured as the pod’s FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false.

Constraints: optional, updatable
startupProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
statefulSetServiceName
string
serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where “pod-specific-string” is managed by the StatefulSet controller.

Constraints: optional, updatable
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.

Constraints: optional, updatable
Format: int64
updateStrategy
object

This section indicates the strategy that the SGCluster controller will use to perform updates.

It includes any additional parameters necessary to perform the update for the indicated strategy.

When a change only require the Postgres instance to be restarted, and not the Pod to be re-created, the Postgres instances of the replicas are restarted first and a switchover to the ready replica with the least lag is then performed, so that the primary is demoted instead of being restarted.

The Postgres instance of the primary is restarted in place, without performing any switchover, only when any of the parameters max_connections, max_prepared_transactions, max_locks_per_transaction, max_wal_senders or max_worker_processes is decreased (a hot standby require those parameters to be set to a value greater than or equal to the value set on the primary, see https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-ADMIN) or when no replica is available to switchover to. Patroni only reports the parameters that are pending a change since version 4, when they are not reported a switchover is performed.


Constraints: optional, updatable
Default: {"type":"OnlyDbOps"}
SGShardedCluster.spec.coordinator.pods.persistentVolume

↩ Parent

Pod’s persistent volume configuration.

If sharding type is shardingsphere then this section is ignored.

Property
Description
size
string

Size of the PersistentVolume set for each instance of the cluster. This size is specified either in Mebibytes, Gibibytes or Tebibytes (multiples of 2^20, 2^30 or 2^40, respectively).

If sharding type is shardingsphere then this field is ignored.


Constraints: required, updatable
fsGroupChangePolicy
string
fsGroupChangePolicy defines behavior of changing ownership and permission of the volume before being exposed inside Pod. This field will only apply to volume types which support fsGroup based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are “OnRootMismatch” and “Always”. If not specified, “Always” is used. Note that this field cannot be set when spec.os.name is windows.

Constraints: optional, updatable
ioLimits
object

This section allows to define per-volume I/O limits for nodes using cgroup v2 io.max features.

NOTE: This is an alpha feature.

When multiple PostgreSQL clusters share the same local storage device on a Kubernetes node, a single cluster running a heavy workload (for example large COPY, aggressive VACUUM, or an unoptimized query) can saturate the device’s I/O bandwidth and degrade performance for every other cluster on that node. StackGres provides this mechanism to prevent this class of noisy-neighbor problem. The mechanism operates at the cgroup + block-device layer, not at the PVC abstraction. Since each pod has its own cgroup, limits are enforced independently across pods even when they share the same physical device — this is the core of the noisy-neighbor protection. However, if multiple volumes within the same pod share the same backing device, their limits target a single entry in that pod’s cgroup and cannot be enforced independently of each other.

This feature works on top of existing CSI drivers such as TopoLVM or OpenEBS LocalPV. The primary target is on-premises deployments where multiple StackGres clusters share local NVMe storage on the same node.

IMPORTANT: Setting any of the value above will require to create an init container named setup-io-limits in each SGCluster’s Pods running as root with only the CHOWN cabability set. Also both the setup-io-limits init container and the cluster-controller container will require to mount the host path /sys/fs/cgroup in order to be able to set owner of and write to the io.max file that will allows to set the io limits. For this reason this feature must be enabled globally by the operator administrator by adding the io-limits feature gate under .spec.featureGates of the SGConfig. Setting any of the value above without the io-limits feature gate enabled will be rejected.


Constraints: optional, updatable
storageClass
string

Name of an existing StorageClass in the Kubernetes cluster, used to create the PersistentVolumes for the instances of the cluster.

If sharding type is shardingsphere then this field is ignored.


Constraints: optional, updatable
volumeAttributesClassName
string

Name of an existing StorageClass in the Kubernetes cluster, used to create the PersistentVolumes for the instances of the cluster.

See https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/


Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.persistentVolume.ioLimits

↩ Parent

This section allows to define per-volume I/O limits for nodes using cgroup v2 io.max features.

NOTE: This is an alpha feature.

When multiple PostgreSQL clusters share the same local storage device on a Kubernetes node, a single cluster running a heavy workload (for example large COPY, aggressive VACUUM, or an unoptimized query) can saturate the device’s I/O bandwidth and degrade performance for every other cluster on that node. StackGres provides this mechanism to prevent this class of noisy-neighbor problem. The mechanism operates at the cgroup + block-device layer, not at the PVC abstraction. Since each pod has its own cgroup, limits are enforced independently across pods even when they share the same physical device — this is the core of the noisy-neighbor protection. However, if multiple volumes within the same pod share the same backing device, their limits target a single entry in that pod’s cgroup and cannot be enforced independently of each other.

This feature works on top of existing CSI drivers such as TopoLVM or OpenEBS LocalPV. The primary target is on-premises deployments where multiple StackGres clusters share local NVMe storage on the same node.

IMPORTANT: Setting any of the value above will require to create an init container named setup-io-limits in each SGCluster’s Pods running as root with only the CHOWN cabability set. Also both the setup-io-limits init container and the cluster-controller container will require to mount the host path /sys/fs/cgroup in order to be able to set owner of and write to the io.max file that will allows to set the io limits. For this reason this feature must be enabled globally by the operator administrator by adding the io-limits feature gate under .spec.featureGates of the SGConfig. Setting any of the value above without the io-limits feature gate enabled will be rejected.

Property
Description
readIops
integer
Max read IO operations per second. Leave empty to remove this limit.

Constraints: optional, updatable
readMiBps
integer
Max read MiB per second. Leave empty to remove this limit.

Constraints: optional, updatable
writeIops
integer
Max write IO operations per second. Leave empty to remove this limit.

Constraints: optional, updatable
writeMiBps
integer
Max write MiB per second. Leave empty to remove this limit.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.dnsConfig

↩ Parent

PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

Property
Description
nameservers
[]string
A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.

Constraints: optional, updatable
options
[]object
A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.

Constraints: optional, updatable
searches
[]string
A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.dnsConfig.options[index]

↩ Parent

PodDNSConfigOption defines DNS resolver options of a pod.

Property
Description
name
string
Name is this DNS resolver option’s name. Required.

Constraints: optional, updatable
value
string
Value is this DNS resolver option’s value.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.livenessProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.coordinator.pods.readinessProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.coordinator.pods.resources

↩ Parent

Pod custom resources configuration.

Property
Description
containers
map[string]object
Resources configuration to be merged with the specified container on top of SGInstanceProfile referenced by sgInstanceProfile field if specified.

Constraints: optional, updatable
disableResourcesRequestsSplitFromTotal
boolean

When set to true the resources requests values in fields SGInstanceProfile.spec.requests.cpu and SGInstanceProfile.spec.requests.memory will represent the resources requests of the patroni container and the total resources requests calculated by adding the resources requests of all the containers (including the patroni container).

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
enableClusterLimitsRequirements
boolean

When enabled resource limits for containers other than the patroni container will be set just like for patroni container as specified in the SGInstanceProfile.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
failWhenTotalIsHigher
boolean

When set to true the reconciliation of the cluster will fail if disableResourcesRequestsSplitFromTotal is not set or set to false and the sum of the CPU or memory of all the containers except patroni is equal to or higher than the total specified in SGInstanceProfile.spec.requests.cpu or SGInstanceProfile.spec.requests.memory.

When false (the default) and disableResourcesRequestsSplitFromTotal is not set or set to false and the sum of the CPU or memory of all the containers except patroni is equal to or higher than the total specified in SGInstanceProfile.spec.requests.cpu or SGInstanceProfile.spec.requests.memory then the patroni container resources will be set to 0.


Constraints: optional, updatable
initContainers
map[string]object
Resources configuration to be merged with the specified init container on top of SGInstanceProfile referenced by sgInstanceProfile field if specified.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.resources.containers[key]

↩ Parent

ResourceRequirements describes the compute resource requirements.

Property
Description
claims
[]object

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This field depends on the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.


Constraints: optional, updatable
limits
map[string]string
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
requests
map[string]string
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.resources.containers[key].claims[index]

↩ Parent

ResourceClaim references one entry in PodSpec.ResourceClaims.

Property
Description
name
string
Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Constraints: required, updatable
request
string
Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.resources.initContainers[key]

↩ Parent

ResourceRequirements describes the compute resource requirements.

Property
Description
claims
[]object

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This field depends on the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.


Constraints: optional, updatable
limits
map[string]string
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
requests
map[string]string
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.resources.initContainers[key].claims[index]

↩ Parent

ResourceClaim references one entry in PodSpec.ResourceClaims.

Property
Description
name
string
Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Constraints: required, updatable
request
string
Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.pods.scheduling

↩ Parent

Pod custom scheduling, affinity and topology spread constratins configuration.

Changing this field may require a restart.

Property
Description
backup
object
Backup Pod custom scheduling and affinity configuration.

Constraints: optional, updatable, may require restart
nodeAffinity
object

Node affinity is a group of node affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#nodeaffinity-v1-core


Constraints: optional, updatable, may require restart
nodeSelector
map[string]string
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

Constraints: optional, updatable, may require restart
podAffinity
object

Pod affinity is a group of inter pod affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podaffinity-v1-core


Constraints: optional, updatable, may require restart
podAntiAffinity
object

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podantiaffinity-v1-core


Constraints: optional, updatable, may require restart
preemptionPolicy
string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

Constraints: optional, updatable, may require restart
priorityClassName
string
If specified, indicates the pod’s priority. “system-node-critical” and “system-cluster-critical” are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

Constraints: optional, updatable, may require restart
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the “legacy” RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

Constraints: optional, updatable, may require restart
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

Constraints: optional, updatable, may require restart
tolerations
[]object

Constraints: optional, updatable, may require restart
topologySpreadConstraints
[]object

TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#topologyspreadconstraint-v1-core


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.coordinator.pods.scheduling.backup

↩ Parent

Backup Pod custom scheduling and affinity configuration.

Property
Description
nodeAffinity
object

Node affinity is a group of node affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#nodeaffinity-v1-core


Constraints: optional, updatable, may require restart
nodeSelector
map[string]string
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

Constraints: optional, updatable, may require restart
podAffinity
object

Pod affinity is a group of inter pod affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podaffinity-v1-core


Constraints: optional, updatable, may require restart
podAntiAffinity
object

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podantiaffinity-v1-core


Constraints: optional, updatable, may require restart
preemptionPolicy
string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

Constraints: optional, updatable, may require restart
priorityClassName
string
If specified, indicates the pod’s priority. “system-node-critical” and “system-cluster-critical” are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

Constraints: optional, updatable, may require restart
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the “legacy” RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

Constraints: optional, updatable, may require restart
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

Constraints: optional, updatable, may require restart
tolerations
[]object

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.coordinator.pods.startupProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.coordinator.pods.updateStrategy

↩ Parent

This section indicates the strategy that the SGCluster controller will use to perform updates.

It includes any additional parameters necessary to perform the update for the indicated strategy.

When a change only require the Postgres instance to be restarted, and not the Pod to be re-created, the Postgres instances of the replicas are restarted first and a switchover to the ready replica with the least lag is then performed, so that the primary is demoted instead of being restarted.

The Postgres instance of the primary is restarted in place, without performing any switchover, only when any of the parameters max_connections, max_prepared_transactions, max_locks_per_transaction, max_wal_senders or max_worker_processes is decreased (a hot standby require those parameters to be set to a value greater than or equal to the value set on the primary, see https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-ADMIN) or when no replica is available to switchover to. Patroni only reports the parameters that are pending a change since version 4, when they are not reported a switchover is performed.

Property
Description
method
string

Indicates the method of the update strategy. Default is InPlace.

  • InPlace: update will be performed on the existing instances.
  • ReducedImpact: before an update is performed on the existing instances a new instance if created to reduce the impact on read-only replicas.

Constraints: optional, updatable
Default: InPlace
restartDelay
string
An ISO 8601 duration in the format PnDTnHnMn.nS indicating the delay that has to pass between the restart of a Postgres instance performed by the SGCluster controller and the next one. Default is PT5M.

Constraints: optional, updatable
Default: PT5M
schedule
[]object
Indicates a list of windows of time where an update can be performed.

Constraints: optional, updatable
type
string

Indicates the type of the update strategy. Default is OnlyDbOps.

  • Always: update will be performed as soon as possible.
  • Schedule: update will be performed as specified in the schedule section where you can configure windows of time where the update can be performed.
  • OnlyDbOps: update will be performed only when an SGDbOps of type restart, securityUpgrade or minorVersionUpgrade targeting the SGCluster is started.
  • Never: update will never be performed (even if annotation stackgres.io/rollout is present with a different value) unless the Pods are deleted manually.

Alternatively to this configuration you may specify the following annotations:

  • stackgres.io/rollout=always: Same behavior as Always.
  • stackgres.io/rollout=schedule: Same behavior as Schedule.
  • stackgres.io/rollout=never: Same behavior as Never (even if type has a different value).

Unless Never (or the annotation stackgres.io/rollout=never) is specified an SGDbOps of type restart, securityUpgrade or minorVersionUpgrade targeting the SGCluster will trigger an update of the Pods.

The update of the Pods will be performed only if Pods are pending any change. Changes in the configuration may not require restarting the Pod and, in such cases, only the Postgres instance will be restarted.


Constraints: optional, updatable
Default: OnlyDbOps
SGShardedCluster.spec.coordinator.pods.updateStrategy.schedule[index]

↩ Parent

Indicates a window of time where an update can be performed.

Property
Description
cron
string
A UNIX cron expression indicating the start of the window of time where the update can be performed.

Constraints: optional, updatable
duration
string
An ISO 8601 duration in the format PnDTnHnMn.nS, that, together with the cron expression, indicates the end of the window of time where the update can be performed.

Constraints: optional, updatable

SGShardedCluster.spec.coordinator.autoscaling

↩ Parent

This section allows configuring vertical Pod autoscaling for the SGCluster’s Pods.

Vertical Pod Autoscaling will use cpu and memory usage as the metric to control the upscale or downscale of the Pod requests and limits resources. Vertical Pod Autoscaling requires the Vertical Pod Autoscaler operator to be installed in the Kubernetes cluster.

Property
Description
horizontal
object
Section to configure horizontal Pod autoscaling aspects.

Constraints: optional, updatable
maxAllowed
object
Defines the higher bound for Pod resources of patroni, pgbouncer and envoy containers

Constraints: optional, updatable
minAllowed
object
Defines the lower bound for Pod resources of patroni, pgbouncer and envoy containers

Constraints: optional, updatable
mode
enum

Allows enabling or disabling any of horizontal and vertical Pod autoscaling.

Possible values are:

  • vertical: only vertical Pod autoscaling will be enabled (default)
  • none: all autoscaling will be disabled

Constraints: optional, updatable
Enum: vertical, none
Default: vertical
vertical
object
Section to configure vertical Pod autoscaling aspects.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.horizontal

↩ Parent

Section to configure horizontal Pod autoscaling aspects.

Property
Description
cooldownPeriod
integer
The period in seconds before the downscale of replica instances can be triggered.

Constraints: optional, updatable
Default: 300
pollingInterval
integer
The interval in seconds to check if the scaleup or scaledown have to be triggered.

Constraints: optional, updatable
Default: 30
replicasConnectionsUsageMetricType
string
The metric type for connections used metric. See https://keda.sh/docs/latest/concepts/scaling-deployments/#triggers

Constraints: optional, updatable
Default: AverageValue
replicasConnectionsUsageTarget
string
The target value for replicas connections used in order to trigger the upscale of replica instances.

Constraints: optional, updatable
Default: 0.8
SGShardedCluster.spec.coordinator.autoscaling.maxAllowed

↩ Parent

Defines the higher bound for Pod resources of patroni, pgbouncer and envoy containers

Property
Description
envoy
object
Defines the higher bound for Pod resources of envoy container

Constraints: optional, updatable
patroni
object
Defines the higher bound for Pod resources of patroni container

Constraints: optional, updatable
pgbouncer
object
Defines the higher bound for Pod resources of pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.maxAllowed.envoy

↩ Parent

Defines the higher bound for Pod resources of envoy container

Property
Description
cpu
string
The maximum allowed CPU for the envoy container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the envoy container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.maxAllowed.patroni

↩ Parent

Defines the higher bound for Pod resources of patroni container

Property
Description
cpu
string
The maximum allowed CPU for the patroni container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the patroni container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.maxAllowed.pgbouncer

↩ Parent

Defines the higher bound for Pod resources of pgbouncer container

Property
Description
cpu
string
The maximum allowed CPU for the pgbouncer container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.minAllowed

↩ Parent

Defines the lower bound for Pod resources of patroni, pgbouncer and envoy containers

Property
Description
envoy
object
Defines the lower bound for Pod resources of envoy container

Constraints: optional, updatable
patroni
object
Defines the lower bound for Pod resources of patroni container

Constraints: optional, updatable
pgbouncer
object
Defines the lower bound for Pod resources of pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.minAllowed.envoy

↩ Parent

Defines the lower bound for Pod resources of envoy container

Property
Description
cpu
string
The minimum allowed CPU for the envoy container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the envoy container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.minAllowed.patroni

↩ Parent

Defines the lower bound for Pod resources of patroni container

Property
Description
cpu
string
The minimum allowed CPU for the patroni container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the patroni container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.minAllowed.pgbouncer

↩ Parent

Defines the lower bound for Pod resources of pgbouncer container

Property
Description
cpu
string
The minimum allowed CPU for the pgbouncer container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.autoscaling.vertical

↩ Parent

Section to configure vertical Pod autoscaling aspects.

Property
Description
recommender
string
Recommender responsible for generating recommendation for vertical Pod autoscaling. If not specified the default one will be used.

Constraints: optional, updatable

SGShardedCluster.spec.coordinator.configurations

↩ Parent

Coordinator custom configurations.

Property
Description
patroni
object

Allows specifying Patroni configuration that will extend the generated one

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
pooling
object
Constraints: optional, updatable
postgres
object
Section for postgres configuration.

Constraints: optional, updatable
postgresExporter
object
Section to configure the postgres_exporter component.

Constraints: optional, updatable
sgPoolingConfig
string

Name of the SGPoolingConfig used for this cluster. Each pod contains a sidecar with a connection pooler (currently: PgBouncer). The connection pooler is implemented as a sidecar.

If not set, a default configuration will be used. Disabling connection pooling altogether is possible if the disableConnectionPooling property of the pods object is set to true.

If sharding type is shardingsphere then this field is ignored.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
sgPostgresConfig
string

Name of the SGPostgresConfig used for the cluster. It must exist. When not set, a default Postgres config, for the major version selected, is used.

If sharding type is shardingsphere then this field is ignored.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
shardingSphere
object

Allows specifying Sharding Sphere Proxy configuration that will extend the generated one.

This section is required when sharding type is shardingsphere otherwise is ignored.


Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.patroni

↩ Parent

Allows specifying Patroni configuration that will extend the generated one

If sharding type is shardingsphere then this section is ignored.

Property
Description
connectUsingFqdn
boolean
Configure Patroni to use FQDN instead of the Pod’s assigned IPs to connect between Patroni and Postgres instances.

Constraints: optional, updatable
dynamicConfig
object

Allows specifying Patroni dynamic configuration that will overwrite the generated one. See https://patroni.readthedocs.io/en/latest/dynamic_configuration.html

The following configuration fields will be ignored:

  • synchronous_mode
  • synchronous_mode_strict
  • postgresql
  • standby_cluster

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
initialConfig
object

Allows specifying Patroni configuration that will overwrite the generated one. See https://patroni.readthedocs.io/en/latest/yaml_configuration.html

The following configuration fields will be ignored:

  • name
  • namespace
  • log
  • bootstrap
  • citus
  • postgresql # with the exception of postgresql.callbacks, postgresql.pre_promote, postgresql.before_stop and postgresql.pg_ctl_timeout
  • restapi
  • ctl
  • watchdog
  • tags

If sharding type is shardingsphere then this section is ignored.

This field can only be set on creation.


Constraints: optional, immutable
startGateAnnotations
map[string]string

Annotations that must be set on the generated SGClusters before Patroni is started. See SGCluster.spec.configurations.patroni.startGateAnnotations.

If sharding type is citus the operator also adds the annotation required to start the query routers only once they have been registered by the coordinator.


Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.pooling

↩ Parent

Property
Description
pgBouncer
object
Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.pooling.pgBouncer

↩ Parent

Property
Description
pgbouncer.ini
object

The pgbouncer.ini parameters that overwrite those specified in the referenced SGPoolingConfig.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.coordinator.configurations.pooling.pgBouncer.pgbouncer.ini

↩ Parent

The pgbouncer.ini parameters that overwrite those specified in the referenced SGPoolingConfig.

Changing this field may require a restart.

Property
Description
databases
map[string]map[string]string

The pgbouncer.ini (Section [databases]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters.


Constraints: optional, updatable, may require restart
pgbouncer
map[string]string

The pgbouncer.ini (Section [pgbouncer]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters


Constraints: optional, updatable, may require restart
users
map[string]map[string]string

The pgbouncer.ini (Section [users]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.coordinator.configurations.postgres

↩ Parent

Section for postgres configuration.

Property
Description
postgresql.conf
map[string]string

The postgresql.conf parameters that overwrite those specified in the referenced SGPostgresConfig.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.coordinator.configurations.postgresExporter

↩ Parent

Section to configure the postgres_exporter component.

Property
Description
queries
object

Section to configure the postgres_exporter queries.yaml configuration.

The queries defined here will overwrite those created by the operator.

WARNING: Changing this may beak some of the functionality that depend on the query overwritten.


Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere

↩ Parent

Allows specifying Sharding Sphere Proxy configuration that will extend the generated one.

This section is required when sharding type is shardingsphere otherwise is ignored.

Property
Description
mode
object
Allows configuring the Sharding Sphere Proxy mode.

Constraints: required, updatable
authority
object
Allows configuring the Sharding Sphere Proxy authority.

Constraints: optional, updatable
properties
object

Properties that will be set in the ShardingSphere Proxy configuration.

Some properties will be overwritten with the configuration generated by the operator. In particular:

  • server-lists

Constraints: optional, updatable
serviceAccount
object

Section to configure ServiceAccount used by ShardingSphere operator.

You may configure a global value under operator configuration section SGConfig.spec.shardingSphere.serviceAccount.


Constraints: optional, updatable
version
string
The version of the ShardingSphere Proxy. If not specified latest version available will be used.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.mode

↩ Parent

Allows configuring the Sharding Sphere Proxy mode.

Property
Description
repository
object
Constraints: required, updatable
type
string

Allows configuring the Sharding Sphere Proxy mode type. Options available are:

  • Standalone
  • Cluster

When Standalone only 1 coordinator instance may be set.


Constraints: required, updatable
properties
object

Properties that will be set in the ShardingSphere Proxy configuration.

Some properties will be overwritten with the configuration generated by the operator. In particular:

  • proxy-frontend-database-protocol-type
  • proxy-default-port

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.mode.repository

↩ Parent

Property
Description
type
string

Allows configuring the Sharding Sphere Proxy repository type. Options available are:

  • Memory
  • ZooKeeper
  • Etcd

When mode.type is standalone then repository.type must be memory. When mode.type is cluster then repository.type could be any of zooKeeper or etcd.


Constraints: required, updatable
etcd
object
Allows configuring Etcd repository for Sharding Sphere Proxy.

Constraints: optional, updatable
properties
object

Properties that will be set in the ShardingSphere Proxy configuration for the Repository.

Some properties will be overwritten with the configuration generated by the operator. In particular:

  • server-lists

Constraints: optional, updatable
zooKeeper
object
Allows configuring ZooKeeper repository for Sharding Sphere Proxy.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.mode.repository.etcd

↩ Parent

Allows configuring Etcd repository for Sharding Sphere Proxy.

Property
Description
serverList
[]string
List of Etcd servers to connect to.

Constraints: required, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.mode.repository.zooKeeper

↩ Parent

Allows configuring ZooKeeper repository for Sharding Sphere Proxy.

Property
Description
serverList
[]string
List of ZooKeeper servers to connect to.

Constraints: required, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.authority

↩ Parent

Allows configuring the Sharding Sphere Proxy authority.

Property
Description
privilege
object
Allows configuring the Sharding Sphere Proxy authority privilege.

Constraints: optional, updatable
users
[]object

Allows configuring extra users other than the superuser (by default superuser username is postgres).

See also https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-proxy/yaml-config/authority/#authentication-configuration


Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.authority.privilege

↩ Parent

Allows configuring the Sharding Sphere Proxy authority privilege.

Property
Description
type
string

Constraints: optional, updatable
userDatabaseMappings
string

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.authority.users[index]

↩ Parent

Allows configuring an extra user other than the superuser (by default superuser username is postgres).

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: required, updatable
user
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: required, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.authority.users[index].password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.authority.users[index].user

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.coordinator.configurations.shardingSphere.serviceAccount

↩ Parent

Section to configure ServiceAccount used by ShardingSphere operator.

You may configure a global value under operator configuration section SGConfig.spec.shardingSphere.serviceAccount.

Property
Description
name
string
The name of the ServiceAccount used by ShardingSphere operator

Constraints: required, updatable
namespace
string
The namespace of the ServiceAccount used by ShardingSphere operator

Constraints: required, updatable

SGShardedCluster.spec.coordinator.managedSql

↩ Parent

This section allows referencing SQL scripts that will be applied to the cluster live.

If sharding type is shardingsphere then this section will be applied to the first cluster worker. In this case the database postgres will also provide a foreign server called shardingsphere and the superuser user mappings that will allow running DistQL queries using command like the following:


SELECT * FROM dblink('shardingsphere', 'SHOW STORAGE UNITS')
  AS _(name text, type text, host text, port int, db text,
    connection_timeout_milliseconds int, idle_timeout_milliseconds int,
    max_lifetime_milliseconds int, max_pool_size int, min_pool_size int,
    read_only boolean, other_attributes text);

See https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-proxy/distsql

Property
Description
continueOnSGScriptError
boolean
If true, when any entry of any SGScript fail will not prevent subsequent SGScript from being executed. By default is false.

Constraints: optional, updatable
scripts
[]object
A list of script references that will be executed in sequence.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.managedSql.scripts[index]

↩ Parent

A script reference. Each version of each entry of the script referenced will be executed exactly once following the sequence defined in the referenced script and skipping any script entry that have already been executed.

Property
Description
id
integer
The id is immutable and must be unique across all the SGScript entries. It is replaced by the operator and is used to identify the SGScript entry.

Constraints: optional, updatable
sgScript
string
A reference to an SGScript

Constraints: optional, updatable

SGShardedCluster.spec.coordinator.metadata

↩ Parent

Metadata information from coordinator cluster created resources.

If sharding type is shardingsphere then this section is applied to the ComputeNode.

Property
Description
annotations
object
Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
labels
object
Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.metadata.annotations

↩ Parent

Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Property
Description
allResources
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
SGShardedCluster.spec.coordinator.metadata.labels

↩ Parent

Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Property
Description
allResources
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable

SGShardedCluster.spec.coordinator.replication

↩ Parent

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.

If sharding type is shardingsphere then this section is ignored.

Property
Description
initialization
object
Allows specifying how the replicas are initialized.

Constraints: optional, updatable
mode
string

The replication mode applied to the whole cluster. Possible values are:

  • async (default)
  • sync
  • strict-sync
  • sync-all
  • strict-sync-all

async

When in asynchronous mode the cluster is allowed to lose some committed transactions. When the primary server fails or becomes unavailable for any other reason a sufficiently healthy standby will automatically be promoted to primary. Any transactions that have not been replicated to that standby remain in a “forked timeline” on the primary, and are effectively unrecoverable (the data is still there, but recovering it requires a manual recovery effort by data recovery specialists).

sync

When in synchronous mode a standby will not be promoted unless it is certain that the standby contains all transactions that may have returned a successful commit status to client (clients can change the behavior per transaction using PostgreSQL’s synchronous_commit setting. Transactions with synchronous_commit values of off and local may be lost on fail over, but will not be blocked by replication delays). This means that the system may be unavailable for writes even though some servers are available. System administrators can still use manual failover commands to promote a standby even if it results in transaction loss.

Synchronous mode does not guarantee multi node durability of commits under all circumstances. When no suitable standby is available, primary server will still accept writes, but does not guarantee their replication. When the primary fails in this mode no standby will be promoted. When the host that used to be the primary comes back it will get promoted automatically, unless system administrator performed a manual failover. This behavior makes synchronous mode usable with 2 node clusters.

When synchronous mode is used and a standby crashes, commits will block until the primary is switched to standalone mode. Manually shutting down or restarting a standby will not cause a commit service interruption. Standby will signal the primary to release itself from synchronous standby duties before PostgreSQL shutdown is initiated.

strict-sync

When it is absolutely necessary to guarantee that each write is stored durably on at least two nodes, use the strict synchronous mode. This mode prevents synchronous replication to be switched off on the primary when no synchronous standby candidates are available. As a downside, the primary will not be available for writes (unless the Postgres transaction explicitly turns off synchronous_mode parameter), blocking all client write requests until at least one synchronous replica comes up.

Note: Because of the way synchronous replication is implemented in PostgreSQL it is still possible to lose transactions even when using strict synchronous mode. If the PostgreSQL backend is cancelled while waiting to acknowledge replication (as a result of packet cancellation due to client timeout or backend failure) transaction changes become visible for other backends. Such changes are not yet replicated and may be lost in case of standby promotion.

sync-all

The same as sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.

strict-sync-all

The same as strict-sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.


Constraints: optional, updatable
Default: sync-all
syncInstances
integer
Number of synchronous standby instances. Must be less than the total number of instances. It is set to 1 by default. Only setteable if mode is sync or strict-sync.

Constraints: optional, updatable
Minimum: 1
SGShardedCluster.spec.coordinator.replication.initialization

↩ Parent

Allows specifying how the replicas are initialized.

Property
Description
backupNewerThan
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies how old an SGBackup have to be in order to be seleceted to initialize a replica.

When FromExistingBackup mode is set this field restrict the selection of SGBackup to be used for recovery newer than the specified value.

When FromNewlyCreatedBackup mode is set this field skip the creation SGBackup to be used for recovery if one newer than the specified value exists.


Constraints: optional, updatable
backupRestorePerformance
object
Configuration that affects the backup network and disk usage performance during recovery.

Constraints: optional, updatable
mode
string

Allows specifying how the replicas are initialized.

Possible values are:

  • FromPrimary: When this mode is used replicas will be always created from the primary using pg_basebackup.
  • FromReplica: When this mode is used replicas will be created from another existing replica using pg_basebackup. Fallsback to FromPrimary if there’s no replica or it fails.
  • FromExistingBackup: When this mode is used replicas will be created from an existing SGBackup. If backupNewerThan is set the SGBackup must be newer than its value. When this mode fails to restore an SGBackup it will try with a previous one (if exists). Fallsback to FromReplica if there’s no backup left or it fails.
  • FromNewlyCreatedBackup: When this mode is used replicas will be created from a newly created SGBackup. Fallsback to FromExistingBackup if backupNewerThan is set and exists a recent backup newer than its value or it fails.

Constraints: optional, updatable
Default: FromExistingBackup
SGShardedCluster.spec.coordinator.replication.initialization.backupRestorePerformance

↩ Parent

Configuration that affects the backup network and disk usage performance during recovery.

Property
Description
downloadConcurrency
integer
Backup storage may use several concurrent streams to read the data. This parameter configures the number of parallel streams to use. By default, it’s set to the minimum between the number of file to read and 10.

Constraints: optional, updatable
Minimum: 1
maxDiskBandwidth
integer
Maximum disk read I/O when performing a backup. In bytes (per second).

Constraints: optional, updatable
maxNetworkBandwidth
integer
Maximum storage upload bandwidth used when storing a backup. In bytes (per second).

Constraints: optional, updatable

SGShardedCluster.spec.postgres

↩ Parent

This section allows to configure Postgres features

Property
Description
version
string

Postgres version used on the cluster. It is either of:

  • The string ‘latest’, which automatically sets the latest major.minor Postgres version.
  • A major version, like ‘14’ or ‘13’, which sets that major version and the latest minor version.
  • A specific major.minor version, like ‘14.4’.

Constraints: required, updatable
extensions
[]object

StackGres supports deploying extensions at runtime by simply adding an entry to this array. A deployed extension still requires the creation in a database using the CREATE EXTENSION statement. After an extension is deployed correctly it will be present until removed and the cluster restarted.

A cluster restart is required for:

  • Extensions that requires to add an entry to shared_preload_libraries configuration parameter.
  • Upgrading extensions that overwrite any file that is not the extension’s control file or extension’s script file.
  • Removing extensions. Until the cluster is not restarted a removed extension will still be available.
  • Install of extensions that require extra mount. After installed the cluster will require to be restarted.

Constraints: optional, updatable
flavor
string

Postgres flavor used on the cluster. It is either of:

If not specified then the vanilla Postgres will be used for the cluster.

This field can only be set on creation.


Constraints: optional, immutable
ssl
object
This section allows to use SSL when connecting to Postgres

Constraints: optional, updatable
Default: {"enabled":true}

SGShardedCluster.spec.postgres.extensions[index]

↩ Parent

Property
Description
name
string
The name of the extension to deploy.

Constraints: required, updatable
publisher
string
The id of the publisher of the extension to deploy. If not specified com.ongres will be used by default.

Constraints: optional, updatable
repository
string

The repository base URL from where to obtain the extension to deploy.

This section is filled by the operator.


Constraints: optional, updatable
version
string
The version of the extension to deploy. If not specified version of stable channel will be used by default.

Constraints: optional, updatable

SGShardedCluster.spec.postgres.ssl

↩ Parent

This section allows to use SSL when connecting to Postgres

Example:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  postgres:
    ssl:
      enabled: true
      certificateSecretKeySelector:
        name: stackgres-secrets
        key: cert
      privateKeySecretKeySelector:
        name: stackgres-secrets
        key: key

Property
Description
certificateSecretKeySelector
object
Secret key selector for the certificate or certificate chain used for SSL connections.

Constraints: optional, updatable
duration
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies the duration of the auto-generated certificate.

If not specified the default duration will be of 13 months.

The certificate will be re-generated 1 day or, if more, 1/12th of its duration before it expires.


Constraints: optional, updatable
enabled
boolean

Allows enabling SSL for connections to Postgres. By default is true.

If true certificate and private key will be auto-generated unless fields certificateSecretKeySelector and privateKeySecretKeySelector are specified.


Constraints: optional, updatable
Default: true
privateKeySecretKeySelector
object
Secret key selector for the private key used for SSL connections.

Constraints: optional, updatable
SGShardedCluster.spec.postgres.ssl.certificateSecretKeySelector

↩ Parent

Secret key selector for the certificate or certificate chain used for SSL connections.

Property
Description
key
string
The key of Secret that contains the certificate or certificate chain for SSL connections

Constraints: required, updatable
name
string
The name of Secret that contains the certificate or certificate chain for SSL connections

Constraints: required, updatable
SGShardedCluster.spec.postgres.ssl.privateKeySecretKeySelector

↩ Parent

Secret key selector for the private key used for SSL connections.

Property
Description
key
string
The key of Secret that contains the private key for SSL connections

Constraints: required, updatable
name
string
The name of Secret that contains the private key for SSL connections

Constraints: required, updatable

SGShardedCluster.spec.configurations

↩ Parent

Sharded cluster custom configurations.

Example:

 yaml
apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  configurations:
    backups:
    - sgObjectStorage: 'backupconf'

Property
Description
backups
[]object
List of sharded backups configurations for this SGShardedCluster

Constraints: optional, updatable
binding
object

This section allows specifying the properties of Service Binding spec for provisioned service. If not specified, then some default will be used.

For more information see https://servicebinding.io/spec/core/1.0.0/


Constraints: optional, updatable
citus
object
Configuration specific to the citus sharding technology. It is ignored for other sharding types.

Constraints: optional, updatable
credentials
object

Allows specifying custom credentials for Postgres users and Patroni REST API

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
observability
object
Allows specifying Observability configuration (related to logs, metrics and traces)

Constraints: optional, updatable
postgresExporter
object
Section to configure the postgres_exporter component.

Constraints: optional, updatable

SGShardedCluster.spec.configurations.backups[index]

↩ Parent

Sharded backup configuration for this SGShardedCluster

Property
Description
sgObjectStorage
string
Name of the SGObjectStorage to use for the cluster. It defines the location in which the backups will be stored.

Constraints: required, updatable
compression
enum
Specifies the backup compression algorithm. Possible options are: lz4, lzma, zstd, brotli. The default method is lz4. LZ4 is the fastest method, but compression ratio is the worst. LZMA is way slower, but it compresses backups about 6 times better than LZ4. Brotli is a good trade-off between speed and compression ratio, being about 3 times better than LZ4.

Constraints: optional, updatable
Enum: lz4, lzma, zstd, brotli
cronSchedule
string

Continuous Archiving backups are composed of periodic base backups and all the WAL segments produced in between those base backups for the coordinator and each worker. This parameter specifies at what time and with what frequency to start performing a new base backup.

Use cron syntax (m h dom mon dow) for this parameter, i.e., 5 values separated by spaces:

  • m: minute, 0 to 59.
  • h: hour, 0 to 23.
  • dom: day of month, 1 to 31 (recommended not to set it higher than 28).
  • mon: month, 1 to 12.
  • dow: day of week, 0 to 7 (0 and 7 both represent Sunday).

Also ranges of values (start-end), the symbol * (meaning first-last) or even */N, where N is a number, meaning ““every N, may be used. All times are UTC. It is recommended to avoid 00:00 as base backup time, to avoid overlapping with any other external operations happening at this time.

If not set, full backups are never performed automatically.


Constraints: optional, updatable
fastVolumeSnapshot
boolean

If specified SGBackup will create a backup forcing a fast start (by setting parameter fast to true when calling pg_backup_start) that will reduce the time the backups may take at the expense of more IO usage.

See also https://www.postgresql.org/docs/current/continuous-archiving.html#BACKUP-LOWLEVEL-BASE-BACKUP


Constraints: optional, updatable
maxRetries
integer

The maximum number of retries the backup operation is allowed to do after a failure.

A value of 0 (zero) means no retries are made. Defaults to: 3.


Constraints: optional, updatable
paths
[]string

The paths where the backups of coordinator and workers are stored. If not set this field is filled up by the operator.

When provided will indicate where the backups and WAL files will be stored.

The first path indicate the coordinator path and the other paths indicate the workers paths

WARNING: Most users should leave this field empty since having it manually set could be dangerous. If the value is repeated due to re-creating an SGShardedCluster or re-using the same value in another SGShardedCluster and you may get a mixed WAL history with unrecoverable backups.


Constraints: optional, updatable
performance
object
Configuration that affects the backup network and disk usage performance.

Constraints: optional, updatable
queryRouterPaths
[]string

The paths where the backups of the query routers are stored. If not set this field is filled up by the operator.

When provided will indicate where the backups and WAL files will be stored.

WARNING: Most users should leave this field empty since having it manually set could be dangerous. If the value is repeated due to re-creating an SGShardedCluster or re-using the same value in another SGShardedCluster and you may get a mixed WAL history with unrecoverable backups.


Constraints: optional, updatable
reconciliationTimeout
integer

Allows setting a timeout for the reconciliation process that take place after the backup.

If not set defaults to 300 (5 minutes). If set to 0 it will disable timeout.

Failure of reconciliation will not make the backup fail and will be re-tried the next time a SGBackup or shecduled backup Job take place.


Constraints: optional, updatable
Default: 300
retainWalsForUnmanagedLifecycle
boolean
If specified, WAL created after any unmanaged lifecycle backups will be retained.

Constraints: optional, updatable
retention
integer

When an automatic retention policy is defined to delete old base backups, this parameter specifies the number of base backups to keep, in a sliding window.

Consequently, the time range covered by backups is periodicity*retention, where periodicity is the separation between backups as specified by the cronSchedule property.

Default is 5.


Constraints: optional, updatable
Minimum: 1
retryDelay
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies the initial delay used by the exponential backoff applied when a command run by the backup script is retried and in general by unbounded retries and in some cases without exponential backoff.

Defaults to: PT1S.


Constraints: optional, updatable
retryLimit
integer

The maximum number of times a command run by the backup script is retried before failing.

Defaults to: 10.


Constraints: optional, updatable
retryMaxDelay
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies the maximum delay the exponential backoff is allowed to reach when a command run by the backup script is retried.

Defaults to: PT1M.


Constraints: optional, updatable
timeout
integer

Allows setting a timeout for the backup creation.

If not set it will be disabled and the backup operation will continue until the backup completes or fail. If set to 0 is the same as not being set.

Make sure to set a reasonable high value in order to allow for any unexpected delays during backup creation (network low bandwidth, disk low throughput and so forth).


Constraints: optional, updatable
useVolumeSnapshot
boolean

If specified SGBackup will use VolumeSnapshot to create backups.

This functionality still require to store WAL files in an SGObjectStorage but could result in much faster backups and restore of those backups.

See also https://kubernetes.io/docs/concepts/storage/volume-snapshots/


Constraints: optional, updatable
volumeSnapshotClass
string

The name of the VolumeSnapshotClass to use to create the VolumeSnapshot for backups.

See also https://kubernetes.io/docs/concepts/storage/volume-snapshots/


Constraints: optional, updatable
SGShardedCluster.spec.configurations.backups[index].performance

↩ Parent

Configuration that affects the backup network and disk usage performance.

Property
Description
downloadConcurrency
integer
Backup storage may use several concurrent streams to read the data. This parameter configures the number of parallel streams to use. By default, it’s set to the minimum between the number of files to read and 10.

Constraints: optional, updatable
Minimum: 1
maxDiskBandwidth
integer
Maximum disk read I/O when performing a backup. In bytes (per second).

Constraints: optional, updatable
maxNetworkBandwidth
integer
Maximum storage upload bandwidth used when storing a backup. In bytes (per second).

Constraints: optional, updatable
uploadConcurrency
integer
Backup storage may use several concurrent streams to store the data. This parameter configures the number of parallel streams to use. By default, it’s set to 16.

Constraints: optional, updatable
Minimum: 1
uploadDiskConcurrency
integer
Backup storage may use several concurrent streams to store the data. This parameter configures the number of parallel streams to use to reading from disk. By default, it’s set to 1.

Constraints: optional, updatable
Minimum: 1

SGShardedCluster.spec.configurations.binding

↩ Parent

This section allows specifying the properties of Service Binding spec for provisioned service. If not specified, then some default will be used.

For more information see https://servicebinding.io/spec/core/1.0.0/

Property
Description
database
string
Allows specifying the database name. If not specified, then the default value is postgres

Constraints: optional, updatable
password
object
Allows referencing a Secret that contains the user’s password. If not specified, then the superuser password will be used.

Constraints: optional, updatable
provider
string
It’s the reference of custom provider name. If not specified, then the default value will be stackgres

Constraints: optional, updatable
username
string
Allows specifying the username. If not specified, then the superuser username will be used.

Constraints: optional, updatable
SGShardedCluster.spec.configurations.binding.password

↩ Parent

Allows referencing a Secret that contains the user’s password. If not specified, then the superuser password will be used.

Property
Description
key
string
The key of the Secret

Constraints: optional, updatable
name
string
The name of the Secret

Constraints: optional, updatable

SGShardedCluster.spec.configurations.citus

↩ Parent

Configuration specific to the citus sharding technology. It is ignored for other sharding types.

Property
Description
connectToPooler
boolean

When true (the default) Citus connects to each node through the connection pooler (PgBouncer) running in its Pod instead of connecting directly to Postgres: the coordinator maintains pg_dist_poolinfo on the coordinator and on every worker and query router so that the port 6432 of PgBouncer (or the Envoy entry port 7432 when Envoy is enabled) is used instead of the Postgres port registered in pg_dist_node. Only the port is set, so the host keeps following the one that Patroni updates in pg_dist_node after a failover. Citus ignores pg_dist_poolinfo for the connections that can not go through a pooler (like the ones of the shard rebalancer).

When true the disableConnectionPooling fields of the coordinator, the workers, the query routers and their overrides (.spec.coordinator.pods.disableConnectionPooling, .spec.workers.pods.disableConnectionPooling and .spec.workers.overrides[].pods.disableConnectionPooling) are ignored and PgBouncer is always created.

When false the coordinator removes from pg_dist_poolinfo the entries it created.


Constraints: optional, updatable
Default: true
enableNodeAutoRemoval
boolean

When true the coordinator removes from pg_dist_node the nodes of the groups that are no longer part of the sharded cluster (after decreasing .spec.workers.clusters or .spec.coordinator.queryRouterClusters), as long as they hold no shard of a distributed table and can be reached.

Patroni only maintains the Citus groups that exist, so the nodes of a removed group would otherwise stay in pg_dist_node and, once they can not be reached, make Citus reject any node addition and distributed DDL.

Regardless of this setting, the SGCluster of a removed worker or query router is kept running while its group is registered in pg_dist_node (Citus can only remove a primary node that can be reached) and is scaled down to 0 instances once its group has been removed from pg_dist_node.


Constraints: optional, updatable
Default: false
updateNodeInterval
string

The interval at which the coordinator updates the nodes registered in pg_dist_node: it registers the query routers (with shouldhaveshards set to false, before their Patroni is started), fixes the shouldhaveshards flag of the query routers, activates the registered query routers and, if enableNodeAutoRemoval is true, removes the nodes of the removed groups.

An ISO 8601 duration in the format PnDTnHnMn.nS, truncated to seconds if lower than a minute, to minutes if lower than an hour and to hours otherwise (up to 23 hours). An interval that does not divide its unit restarts at the beginning of each minute, hour or day.

Defaults to: PT10S.


Constraints: optional, updatable

SGShardedCluster.spec.configurations.credentials

↩ Parent

Allows specifying custom credentials for Postgres users and Patroni REST API

Changing this field may require a restart.

Property
Description
patroni
object

Kubernetes SecretKeySelectors that contains the credentials for patroni REST API.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
users
object

Kubernetes SecretKeySelectors that contains the credentials of the users.

Changing this field may require a manual modification of the database users to reflect the new values specified.

In particular you may have to create those users if username is changed or alter password if it is changed. Here are the SQL commands to perform such operation (replace default usernames with the new ones and *** with their respective passwords):

  • Superuser username changed:

CREATE ROLE postgres;

  • Superuser password changed:

ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD '***';

  • Replication username changed:

CREATE ROLE replicator;

  • Replication password changed:

ALTER ROLE replicator WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN REPLICATION NOBYPASSRLS PASSWORD '***';

  • Authenticator username changed:

CREATE ROLE authenticator;

  • Authenticator password changed:

ALTER ROLE authenticator WITH SUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD '***';

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.patroni

↩ Parent

Kubernetes SecretKeySelectors that contains the credentials for patroni REST API.

Changing this field may require a restart.

Property
Description
restApiPassword
object
A Kubernetes SecretKeySelector that contains the password for the patroni REST API.

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.patroni.restApiPassword

↩ Parent

A Kubernetes SecretKeySelector that contains the password for the patroni REST API.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users

↩ Parent

Kubernetes SecretKeySelectors that contains the credentials of the users.

Changing this field may require a manual modification of the database users to reflect the new values specified.

In particular you may have to create those users if username is changed or alter password if it is changed. Here are the SQL commands to perform such operation (replace default usernames with the new ones and *** with their respective passwords):

  • Superuser username changed:

CREATE ROLE postgres;

  • Superuser password changed:

ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD '***';

  • Replication username changed:

CREATE ROLE replicator;

  • Replication password changed:

ALTER ROLE replicator WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN REPLICATION NOBYPASSRLS PASSWORD '***';

  • Authenticator username changed:

CREATE ROLE authenticator;

  • Authenticator password changed:

ALTER ROLE authenticator WITH SUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD '***';

Changing this field may require a restart.

Property
Description
authenticator
object
A Kubernetes SecretKeySelector that contains the credentials of the authenticator user used by pgbouncer to authenticate other users.

Constraints: optional, updatable, may require restart
replication
object
A Kubernetes SecretKeySelector that contains the credentials of the replication user used to replicate from the primary cluster and from replicas of this cluster.

Constraints: optional, updatable, may require restart
superuser
object
A Kubernetes SecretKeySelector that contains the credentials of the superuser (usually the postgres user).

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.authenticator

↩ Parent

A Kubernetes SecretKeySelector that contains the credentials of the authenticator user used by pgbouncer to authenticate other users.

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: optional, updatable, may require restart
username
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.authenticator.password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.authenticator.username

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.replication

↩ Parent

A Kubernetes SecretKeySelector that contains the credentials of the replication user used to replicate from the primary cluster and from replicas of this cluster.

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: optional, updatable, may require restart
username
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.replication.password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.replication.username

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.superuser

↩ Parent

A Kubernetes SecretKeySelector that contains the credentials of the superuser (usually the postgres user).

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: optional, updatable, may require restart
username
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.superuser.password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart
SGShardedCluster.spec.configurations.credentials.users.superuser.username

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable, may require restart
name
string
Name of the referent. More information.

Constraints: required, updatable, may require restart

SGShardedCluster.spec.configurations.observability

↩ Parent

Allows specifying Observability configuration (related to logs, metrics and traces)

Property
Description
disableMetrics
boolean

If set to true, avoids creating the Prometheus exporter sidecar. Recommended when there’s no intention to use internal monitoring.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
prometheusAutobind
boolean
If set to true, a PodMonitor is created for each Prometheus instance as specified in the SGConfig.spec.collector.prometheusOperator.monitors section.

Constraints: optional, updatable
Default: false
receiver
string
Indicate the receiver in the configuration for the collector scraper (if not specified, will default to prometheus).

Constraints: optional, updatable

SGShardedCluster.spec.configurations.postgresExporter

↩ Parent

Section to configure the postgres_exporter component.

Property
Description
queries
object

Section to configure the postgres_exporter queries.yaml configuration.

The queries defined here will overwrite those created by the operator.

WARNING: Changing this may break some of the functionality that depend on the query overwritten.


Constraints: optional, updatable

SGShardedCluster.spec.distributedLogs

↩ Parent

StackGres features a functionality for all pods to send Postgres, Patroni and PgBouncer logs to a central (distributed) location, which is in turn another Postgres database. Logs can then be accessed via SQL interface or from the web UI. This section controls whether to enable this feature or not. If not enabled, logs are sent to the pod’s standard output.

Example:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  distributedLogs:
    sgDistributedLogs: distributedlogs

Property
Description
retention
string

Define a retention window with the syntax <integer> (minutes|hours|days|months) in which log entries are kept. Log entries will be removed when they get older more than the double of the specified retention window.

When this field is changed the retention will be applied only to log entries that are newer than the end of the retention window previously specified. If no retention window was previously specified it is considered to be of 7 days. This means that if previous retention window is of 7 days new retention configuration will apply after UTC timestamp calculated with: SELECT date_trunc('days', now() at time zone 'UTC') - INTERVAL '7 days'.


Constraints: optional, updatable
sgDistributedLogs
string
Name of the SGDistributedLogs to use for this cluster. It must exist.

Constraints: optional, updatable

SGShardedCluster.spec.initialData

↩ Parent

Sharded cluster initialization data options. Sharded cluster may be initialized empty, or from a sharded backup restoration.

This field can only be set on creation.

Property
Description
restore
object
This section allows to restore a sharded cluster from an existing copy of the metadata and data.

Constraints: optional, immutable

SGShardedCluster.spec.initialData.restore

↩ Parent

This section allows to restore a sharded cluster from an existing copy of the metadata and data.

Property
Description
downloadDiskConcurrency
integer

The backup fetch process may fetch several streams in parallel. Parallel fetching is enabled when set to a value larger than one.

If not specified it will be interpreted as latest.


Constraints: optional, immutable
Minimum: 1
fromBackup
object
From which sharded backup to restore and how the process is configured

Constraints: optional, immutable
SGShardedCluster.spec.initialData.restore.fromBackup

↩ Parent

From which sharded backup to restore and how the process is configured

Example:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  initialData:
    restore:
      fromBackup:
        name: stackgres-backup
      downloadDiskConcurrency: 1

Property
Description
name
string
When set to the name of an existing SGShardedBackup, the sharded cluster is initialized by restoring the backup data to it. If not set, the sharded cluster is initialized empty. The selected sharded backup must be in the same namespace.

Constraints: optional, immutable
pointInTimeRecovery
object

It is possible to restore the database to its state at any time since your backup was taken using Point-in-Time Recovery (PITR) as long as another backup newer than the PITR requested restoration date does not exist.

Point In Time Recovery (PITR). PITR allows restoring the database state to an arbitrary point of time in the past, as long as you specify a backup older than the PITR requested restoration date and does not exist a backup newer than the same restoration date.

See also: https://www.postgresql.org/docs/current/continuous-archiving.html


Constraints: optional, immutable
targetInclusive
boolean
Specify the recovery_target_inclusive to stop recovery just after the specified recovery target (true), or just before the recovery target (false). Applies when targetLsn, pointInTimeRecovery, or targetXid is specified. This setting controls whether transactions having exactly the target WAL location (LSN), commit time, or transaction ID, respectively, will be included in the recovery. Default is true.

Constraints: optional, immutable
SGShardedCluster.spec.initialData.restore.fromBackup.pointInTimeRecovery

↩ Parent

It is possible to restore the database to its state at any time since your backup was taken using Point-in-Time Recovery (PITR) as long as another backup newer than the PITR requested restoration date does not exist.

Point In Time Recovery (PITR). PITR allows restoring the database state to an arbitrary point of time in the past, as long as you specify a backup older than the PITR requested restoration date and does not exist a backup newer than the same restoration date.

See also: https://www.postgresql.org/docs/current/continuous-archiving.html

Property
Description
restoreToTimestamp
string
An ISO 8601 date, that holds UTC date indicating at which point-in-time the database have to be restored.

Constraints: optional, immutable

SGShardedCluster.spec.metadata

↩ Parent

Metadata information from any cluster created resources.

Property
Description
annotations
object
Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
labels
object
Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Constraints: optional, updatable

SGShardedCluster.spec.metadata.annotations

↩ Parent

Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Example:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  metadata:
    annotations:
      clusterPods:
        customAnnotations: customAnnotationValue
      coordinatorPrimaryService:
        customAnnotations: customAnnotationValue
      coordinatorAnyService:
        customAnnotations: customAnnotationValue
      workersPrimariesService:
        customAnnotations: customAnnotationValue

Property
Description
allResources
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
coordinatorAnyService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
coordinatorPrimaryService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
queryRoutersPrimariesService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
shardsPrimariesService
map[string]string

Deprecated use workersPrimariesService instead.

Custom Kubernetes annotations.


Constraints: optional, updatable
workersPrimariesService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable

SGShardedCluster.spec.metadata.labels

↩ Parent

Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Example:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  metadata:
    labels:
      clusterPods:
        customLabel: customLabelValue
      services:
        customLabel: customLabelValue

Property
Description
allResources
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
coordinatorAnyService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
coordinatorPrimaryService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
queryRoutersPrimariesService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
shardsPrimariesService
map[string]string

Deprecated use workersPrimariesService instead.

Custom Kubernetes labels.


Constraints: optional, updatable
workersPrimariesService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable

SGShardedCluster.spec.nonProductionOptions

↩ Parent

Property
Description
disableClusterPodAntiAffinity
boolean

It is a best practice, on non-containerized environments, when running production workloads, to run each database server on a different server (virtual or physical), i.e., not to co-locate more than one database server per host.

The same best practice applies to databases on containers. By default, StackGres will not allow running more than one StackGres pod on a given Kubernetes node. Set this property to true to allow more than one StackGres pod per node.

This property default value may be changed depending on the value of field .spec.profile.

This property default value may be changed depending on the value of field .spec.profile.


Constraints: optional, updatable
disableClusterResourceRequirements
boolean

It is a best practice, on containerized environments, when running production workloads, to enforce container’s resources requirements.

By default, StackGres will configure resource requirements for all the containers. Set this property to true to prevent StackGres from setting container’s resources requirements (except for patroni container, see disablePatroniResourceRequirements).

This property default value may be changed depending on the value of field .spec.profile.


Constraints: optional, updatable
disablePatroniResourceRequirements
boolean

It is a best practice, on containerized environments, when running production workloads, to enforce container’s resources requirements.

The same best practice applies to databases on containers. By default, StackGres will configure resource requirements for patroni container. Set this property to true to prevent StackGres from setting patroni container’s resources requirement.

This property default value may be changed depending on the value of field .spec.profile.


Constraints: optional, updatable
enableSetClusterCpuRequests
boolean

Deprecated this value is ignored and you can consider it as always true.

On containerized environments, when running production workloads, enforcing container’s cpu requirements request to be equals to the limit allows achieving the highest level of performance. Doing so, reduces the chances of leaving the workload with less cpu than it requires. It also allows setting static CPU management policy that allows to guarantee a pod the usage exclusive CPUs on the node.

By default, StackGres will configure cpu requirements to have the same limit and request for all the containers. Set this property to true to make StackGres set container’s cpu requirements request equals to the limit (except for patroni container, see enableSetPatroniCpuRequests) when .spec.requests.containers.<container name>.cpu .spec.requests.initContainers.<container name>.cpu is configured in the referenced SGInstanceProfile.


Constraints: optional, updatable
Default: false
enableSetClusterMemoryRequests
boolean

Deprecated this value is ignored and you can consider it as always true.

On containerized environments, when running production workloads, enforcing container’s memory requirements request to be equals to the limit allows achieving the highest level of performance. Doing so, reduces the chances of leaving the workload with less memory than it requires.

By default, StackGres will configure memory requirements to have the same limit and request for all the containers. Set this property to true to make StackGres set container’s memory requirements request equals to the limit (except for patroni container, see enableSetPatroniMemoryRequests) when .spec.requests.containers.<container name>.memory .spec.requests.initContainers.<container name>.memory is configured in the referenced SGInstanceProfile.


Constraints: optional, updatable
Default: false
enableSetPatroniCpuRequests
boolean

Deprecated this value is ignored and you can consider it as always true.

On containerized environments, when running production workloads, enforcing container’s cpu requirements request to be equals to the limit allows achieving the highest level of performance. Doing so, reduces the chances of leaving the workload with less cpu than it requires. It also allows setting static CPU management policy that allows to guarantee a pod the usage exclusive CPUs on the node.

By default, StackGres will configure cpu requirements to have the same limit and request for the patroni container. Set this property to true to make StackGres set patroni container’s cpu requirements request equals to the limit when .spec.requests.cpu is configured in the referenced SGInstanceProfile.


Constraints: optional, updatable
Default: false
enableSetPatroniMemoryRequests
boolean

Deprecated this value is ignored and you can consider it as always true.

On containerized environments, when running production workloads, enforcing container’s memory requirements request to be equals to the limit allows achieving the highest level of performance. Doing so, reduces the chances of leaving the workload with less memory than it requires.

By default, StackGres will configure memory requirements to have the same limit and request for the patroni container. Set this property to true to make StackGres set patroni container’s memory requirements request equals to the limit when .spec.requests.memory is configured in the referenced SGInstanceProfile.


Constraints: optional, updatable
Default: false
enabledFeatureGates
[]string

A list of StackGres feature gates to enable (not suitable for a production environment).

Available feature gates are:

  • babelfish-flavor: Allows using the babelfish flavor.

Constraints: optional, updatable

SGShardedCluster.spec.postgresServices

↩ Parent

Kubernetes services created or managed by StackGres.

Property
Description
coordinator
object
Configuration for the coordinator services

Constraints: optional, updatable
shards
object

Deprecated use workers instead.

Configuration for the workers services


Constraints: optional, updatable
workers
object
Configuration for the workers services

Constraints: optional, updatable

SGShardedCluster.spec.postgresServices.coordinator

↩ Parent

Configuration for the coordinator services

Property
Description
any
object

Configure the coordinator service to any instance of the coordinator with the same name as the SGShardedCluster plus the -reads suffix.

If the sharding type is shardingsphere then the name of the service will be the same name as the SGShardedCluster.

It provides a stable connection (regardless of node failures) to any Postgres server of the coordinator cluster. Servers are load-balanced via this service.

See also https://kubernetes.io/docs/concepts/services-networking/service/


Constraints: optional, updatable
customPorts
[]object

The list of custom ports that will be exposed by the coordinator services.

The names of custom ports will be prefixed with the string custom- so they do not conflict with ports defined for the coordinator services.

The names of target ports will be prefixed with the string custom- so that the ports that can be referenced in this section will be only those defined under .spec.pods.customContainers[].ports sections where names are also prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#serviceport-v1-core


Constraints: optional, updatable, may require restart
primary
object

Configure the coordinator service to the primary of the coordinator with the name as the SGShardedCluster.

If the sharding type is shardingsphere then this service will be disabled.

It provides a stable connection (regardless of primary failures or switchovers) to the read-write Postgres server of the coordinator cluster.

See also https://kubernetes.io/docs/concepts/services-networking/service/


Constraints: optional, updatable
queryRouters
object

Configure the query routers service to any primary in the query router wokrers with the name as the SGShardedCluster plus the -routers suffix.

It provides a stable connection to read-write Postgres servers of any query router worker SGCluster. Read-write servers are load-balanced via this service.

See also .spec.coordinator.queryRouterClusters

See also https://kubernetes.io/docs/concepts/services-networking/service/


Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.any

↩ Parent

Configure the coordinator service to any instance of the coordinator with the same name as the SGShardedCluster plus the -reads suffix.

If the sharding type is shardingsphere then the name of the service will be the same name as the SGShardedCluster.

It provides a stable connection (regardless of node failures) to any Postgres server of the coordinator cluster. Servers are load-balanced via this service.

See also https://kubernetes.io/docs/concepts/services-networking/service/

Property
Description
allocateLoadBalancerNodePorts
boolean
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is “true”. It may be set to “false” if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.

Constraints: optional, updatable
enabled
boolean
Specify if the service should be created or not.

Constraints: optional, updatable
externalIPs
[]string

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#allocateloadbalancernodeports-v1-core


Constraints: optional, updatable
externalTrafficPolicy
string
externalTrafficPolicy describes how nodes distribute service traffic they receive on one of the Service’s “externally-facing” addresses (NodePorts, ExternalIPs, and LoadBalancer IPs). If set to “Local”, the proxy will configure the service in a way that assumes that external load balancers will take care of balancing the service traffic between nodes, and so each node will deliver traffic only to the node-local endpoints of the service, without masquerading the client source IP. (Traffic mistakenly sent to a node with no endpoints will be dropped.) The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). Note that traffic sent to an External IP or LoadBalancer IP from within the cluster will always get “Cluster” semantics, but clients sending to a NodePort from within the cluster may need to take traffic policy into account when picking a node.

Constraints: optional, updatable
healthCheckNodePort
integer
healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). This field cannot be updated once set.

Constraints: optional, updatable
Format: int32
internalTrafficPolicy
string
InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to “Local”, the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features).

Constraints: optional, updatable
ipFamilies
[]string

IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are “IPv4” and “IPv6”. This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to “headless” services. This field will be wiped when updating a Service to type ExternalName.

This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.


Constraints: optional, updatable
ipFamilyPolicy
string
IPFamilyPolicy represents the dual-stack-ness requested or required by this Service. If there is no value provided, then this field will be set to SingleStack. Services can be “SingleStack” (a single IP family), “PreferDualStack” (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or “RequireDualStack” (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName.

Constraints: optional, updatable
loadBalancerClass
string
loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. “internal-vip” or “example.com/internal-vip”. Unprefixed names are reserved for end-users. This field can only be set when the Service type is ‘LoadBalancer’. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type ‘LoadBalancer’. Once set, it can not be changed. This field will be wiped when a service is updated to a non ‘LoadBalancer’ type.

Constraints: optional, updatable
loadBalancerIP
string
Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations. Using it is non-portable and it may not support dual-stack. Users are encouraged to use implementation-specific annotations when available.

Constraints: optional, updatable
loadBalancerSourceRanges
[]string
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

Constraints: optional, updatable
nodePorts
object
nodePorts is a list of ports for exposing a cluster services to the outside world

Constraints: optional, updatable
publishNotReadyAddresses
boolean
publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet’s Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered “ready” even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.

Constraints: optional, updatable
sessionAffinity
string
Supports “ClientIP” and “None”. Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

Constraints: optional, updatable
sessionAffinityConfig
object

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core


Constraints: optional, updatable
type
enum

type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ClusterIP, NodePort, LoadBalancer and None. “ClusterIP” allocates a cluster-internal IP address for load-balancing to endpoints. “NodePort” builds on ClusterIP and allocates a port on every node. “LoadBalancer” builds on NodePort and creates an external load-balancer (if supported in the current cloud). “None” creates a headless service that can be used in conjunction with .spec.pods.disableEnvoy set to true in order to access the database using a DNS. More info:


Constraints: optional, updatable
Enum: ClusterIP, LoadBalancer, NodePort, None
SGShardedCluster.spec.postgresServices.coordinator.any.nodePorts

↩ Parent

nodePorts is a list of ports for exposing a cluster services to the outside world

Property
Description
pgport
integer
the node port that will be exposed to connect to Postgres instance

Constraints: optional, updatable
replicationport
integer
the node port that will be exposed to connect to Postgres instance for replication purpose

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.any.sessionAffinityConfig

↩ Parent

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core

Property
Description
clientIP
object
ClientIPConfig represents the configurations of Client IP based session affinity.

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.any.sessionAffinityConfig.clientIP

↩ Parent

ClientIPConfig represents the configurations of Client IP based session affinity.

Property
Description
timeoutSeconds
integer
timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == “ClientIP”. Default value is 10800(for 3 hours).

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.postgresServices.coordinator.primary

↩ Parent

Configure the coordinator service to the primary of the coordinator with the name as the SGShardedCluster.

If the sharding type is shardingsphere then this service will be disabled.

It provides a stable connection (regardless of primary failures or switchovers) to the read-write Postgres server of the coordinator cluster.

See also https://kubernetes.io/docs/concepts/services-networking/service/

Property
Description
allocateLoadBalancerNodePorts
boolean
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is “true”. It may be set to “false” if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.

Constraints: optional, updatable
enabled
boolean
Specify if the service should be created or not.

Constraints: optional, updatable
externalIPs
[]string

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#allocateloadbalancernodeports-v1-core


Constraints: optional, updatable
externalTrafficPolicy
string
externalTrafficPolicy describes how nodes distribute service traffic they receive on one of the Service’s “externally-facing” addresses (NodePorts, ExternalIPs, and LoadBalancer IPs). If set to “Local”, the proxy will configure the service in a way that assumes that external load balancers will take care of balancing the service traffic between nodes, and so each node will deliver traffic only to the node-local endpoints of the service, without masquerading the client source IP. (Traffic mistakenly sent to a node with no endpoints will be dropped.) The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). Note that traffic sent to an External IP or LoadBalancer IP from within the cluster will always get “Cluster” semantics, but clients sending to a NodePort from within the cluster may need to take traffic policy into account when picking a node.

Constraints: optional, updatable
healthCheckNodePort
integer
healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). This field cannot be updated once set.

Constraints: optional, updatable
Format: int32
internalTrafficPolicy
string
InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to “Local”, the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features).

Constraints: optional, updatable
ipFamilies
[]string

IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are “IPv4” and “IPv6”. This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to “headless” services. This field will be wiped when updating a Service to type ExternalName.

This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.


Constraints: optional, updatable
ipFamilyPolicy
string
IPFamilyPolicy represents the dual-stack-ness requested or required by this Service. If there is no value provided, then this field will be set to SingleStack. Services can be “SingleStack” (a single IP family), “PreferDualStack” (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or “RequireDualStack” (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName.

Constraints: optional, updatable
loadBalancerClass
string
loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. “internal-vip” or “example.com/internal-vip”. Unprefixed names are reserved for end-users. This field can only be set when the Service type is ‘LoadBalancer’. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type ‘LoadBalancer’. Once set, it can not be changed. This field will be wiped when a service is updated to a non ‘LoadBalancer’ type.

Constraints: optional, updatable
loadBalancerIP
string
Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations. Using it is non-portable and it may not support dual-stack. Users are encouraged to use implementation-specific annotations when available.

Constraints: optional, updatable
loadBalancerSourceRanges
[]string
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

Constraints: optional, updatable
nodePorts
object
nodePorts is a list of ports for exposing a cluster services to the outside world

Constraints: optional, updatable
publishNotReadyAddresses
boolean
publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet’s Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered “ready” even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.

Constraints: optional, updatable
sessionAffinity
string
Supports “ClientIP” and “None”. Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

Constraints: optional, updatable
sessionAffinityConfig
object

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core


Constraints: optional, updatable
type
enum

type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ClusterIP, NodePort, LoadBalancer and None. “ClusterIP” allocates a cluster-internal IP address for load-balancing to endpoints. “NodePort” builds on ClusterIP and allocates a port on every node. “LoadBalancer” builds on NodePort and creates an external load-balancer (if supported in the current cloud). “None” creates a headless service that can be used in conjunction with .spec.pods.disableEnvoy set to true in order to access the database using a DNS. More info:


Constraints: optional, updatable
Enum: ClusterIP, LoadBalancer, NodePort, None
SGShardedCluster.spec.postgresServices.coordinator.primary.nodePorts

↩ Parent

nodePorts is a list of ports for exposing a cluster services to the outside world

Property
Description
pgport
integer
the node port that will be exposed to connect to Postgres instance

Constraints: optional, updatable
replicationport
integer
the node port that will be exposed to connect to Postgres instance for replication purpose

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.primary.sessionAffinityConfig

↩ Parent

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core

Property
Description
clientIP
object
ClientIPConfig represents the configurations of Client IP based session affinity.

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.primary.sessionAffinityConfig.clientIP

↩ Parent

ClientIPConfig represents the configurations of Client IP based session affinity.

Property
Description
timeoutSeconds
integer
timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == “ClientIP”. Default value is 10800(for 3 hours).

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.postgresServices.coordinator.queryRouters

↩ Parent

Configure the query routers service to any primary in the query router wokrers with the name as the SGShardedCluster plus the -routers suffix.

It provides a stable connection to read-write Postgres servers of any query router worker SGCluster. Read-write servers are load-balanced via this service.

See also .spec.coordinator.queryRouterClusters

See also https://kubernetes.io/docs/concepts/services-networking/service/

Property
Description
allocateLoadBalancerNodePorts
boolean
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is “true”. It may be set to “false” if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.

Constraints: optional, updatable
enabled
boolean
Specify if the service should be created or not.

Constraints: optional, updatable
externalIPs
[]string

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#allocateloadbalancernodeports-v1-core


Constraints: optional, updatable
externalTrafficPolicy
string
externalTrafficPolicy describes how nodes distribute service traffic they receive on one of the Service’s “externally-facing” addresses (NodePorts, ExternalIPs, and LoadBalancer IPs). If set to “Local”, the proxy will configure the service in a way that assumes that external load balancers will take care of balancing the service traffic between nodes, and so each node will deliver traffic only to the node-local endpoints of the service, without masquerading the client source IP. (Traffic mistakenly sent to a node with no endpoints will be dropped.) The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). Note that traffic sent to an External IP or LoadBalancer IP from within the cluster will always get “Cluster” semantics, but clients sending to a NodePort from within the cluster may need to take traffic policy into account when picking a node.

Constraints: optional, updatable
healthCheckNodePort
integer
healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). This field cannot be updated once set.

Constraints: optional, updatable
Format: int32
internalTrafficPolicy
string
InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to “Local”, the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features).

Constraints: optional, updatable
ipFamilies
[]string

IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are “IPv4” and “IPv6”. This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to “headless” services. This field will be wiped when updating a Service to type ExternalName.

This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.


Constraints: optional, updatable
ipFamilyPolicy
string
IPFamilyPolicy represents the dual-stack-ness requested or required by this Service. If there is no value provided, then this field will be set to SingleStack. Services can be “SingleStack” (a single IP family), “PreferDualStack” (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or “RequireDualStack” (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName.

Constraints: optional, updatable
loadBalancerClass
string
loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. “internal-vip” or “example.com/internal-vip”. Unprefixed names are reserved for end-users. This field can only be set when the Service type is ‘LoadBalancer’. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type ‘LoadBalancer’. Once set, it can not be changed. This field will be wiped when a service is updated to a non ‘LoadBalancer’ type.

Constraints: optional, updatable
loadBalancerIP
string
Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations. Using it is non-portable and it may not support dual-stack. Users are encouraged to use implementation-specific annotations when available.

Constraints: optional, updatable
loadBalancerSourceRanges
[]string
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

Constraints: optional, updatable
nodePorts
object
nodePorts is a list of ports for exposing a cluster services to the outside world

Constraints: optional, updatable
publishNotReadyAddresses
boolean
publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet’s Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered “ready” even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.

Constraints: optional, updatable
sessionAffinity
string
Supports “ClientIP” and “None”. Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

Constraints: optional, updatable
sessionAffinityConfig
object

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core


Constraints: optional, updatable
type
enum

type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ClusterIP, NodePort, LoadBalancer and None. “ClusterIP” allocates a cluster-internal IP address for load-balancing to endpoints. “NodePort” builds on ClusterIP and allocates a port on every node. “LoadBalancer” builds on NodePort and creates an external load-balancer (if supported in the current cloud). “None” creates a headless service that can be used in conjunction with .spec.pods.disableEnvoy set to true in order to access the database using a DNS. More info:


Constraints: optional, updatable
Enum: ClusterIP, LoadBalancer, NodePort, None
SGShardedCluster.spec.postgresServices.coordinator.queryRouters.nodePorts

↩ Parent

nodePorts is a list of ports for exposing a cluster services to the outside world

Property
Description
pgport
integer
the node port that will be exposed to connect to Postgres instance

Constraints: optional, updatable
replicationport
integer
the node port that will be exposed to connect to Postgres instance for replication purpose

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.queryRouters.sessionAffinityConfig

↩ Parent

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core

Property
Description
clientIP
object
ClientIPConfig represents the configurations of Client IP based session affinity.

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.coordinator.queryRouters.sessionAffinityConfig.clientIP

↩ Parent

ClientIPConfig represents the configurations of Client IP based session affinity.

Property
Description
timeoutSeconds
integer
timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == “ClientIP”. Default value is 10800(for 3 hours).

Constraints: optional, updatable
Format: int32

SGShardedCluster.spec.postgresServices.shards

↩ Parent

Deprecated use workers instead.

Configuration for the workers services

Property
Description
customPorts
[]object

The list of custom ports that will be exposed by the workers services.

The names of custom ports will be prefixed with the string custom- so they do not conflict with ports defined for the workers services.

The names of target ports will be prefixed with the string custom- so that the ports that can be referenced in this section will be only those defined under .spec.pods.customContainers[].ports sections where names are also prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#serviceport-v1-core


Constraints: optional, updatable, may require restart
primaries
object

Configure the workers service to any primary in the workers with the name as the SGShardedCluster plus the -workers suffix.

It provides a stable connection (regardless of primary failures or switchovers) to read-write Postgres servers of any worker SGCluster. Read-write servers are load-balanced via this service.

See also https://kubernetes.io/docs/concepts/services-networking/service/


Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.shards.primaries

↩ Parent

Configure the workers service to any primary in the workers with the name as the SGShardedCluster plus the -workers suffix.

It provides a stable connection (regardless of primary failures or switchovers) to read-write Postgres servers of any worker SGCluster. Read-write servers are load-balanced via this service.

See also https://kubernetes.io/docs/concepts/services-networking/service/

Property
Description
allocateLoadBalancerNodePorts
boolean
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is “true”. It may be set to “false” if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.

Constraints: optional, updatable
enabled
boolean
Specify if the service should be created or not.

Constraints: optional, updatable
externalIPs
[]string

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#allocateloadbalancernodeports-v1-core


Constraints: optional, updatable
externalTrafficPolicy
string
externalTrafficPolicy describes how nodes distribute service traffic they receive on one of the Service’s “externally-facing” addresses (NodePorts, ExternalIPs, and LoadBalancer IPs). If set to “Local”, the proxy will configure the service in a way that assumes that external load balancers will take care of balancing the service traffic between nodes, and so each node will deliver traffic only to the node-local endpoints of the service, without masquerading the client source IP. (Traffic mistakenly sent to a node with no endpoints will be dropped.) The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). Note that traffic sent to an External IP or LoadBalancer IP from within the cluster will always get “Cluster” semantics, but clients sending to a NodePort from within the cluster may need to take traffic policy into account when picking a node.

Constraints: optional, updatable
healthCheckNodePort
integer
healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). This field cannot be updated once set.

Constraints: optional, updatable
Format: int32
internalTrafficPolicy
string
InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to “Local”, the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features).

Constraints: optional, updatable
ipFamilies
[]string

IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are “IPv4” and “IPv6”. This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to “headless” services. This field will be wiped when updating a Service to type ExternalName.

This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.


Constraints: optional, updatable
ipFamilyPolicy
string
IPFamilyPolicy represents the dual-stack-ness requested or required by this Service. If there is no value provided, then this field will be set to SingleStack. Services can be “SingleStack” (a single IP family), “PreferDualStack” (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or “RequireDualStack” (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName.

Constraints: optional, updatable
loadBalancerClass
string
loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. “internal-vip” or “example.com/internal-vip”. Unprefixed names are reserved for end-users. This field can only be set when the Service type is ‘LoadBalancer’. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type ‘LoadBalancer’. Once set, it can not be changed. This field will be wiped when a service is updated to a non ‘LoadBalancer’ type.

Constraints: optional, updatable
loadBalancerIP
string
Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations. Using it is non-portable and it may not support dual-stack. Users are encouraged to use implementation-specific annotations when available.

Constraints: optional, updatable
loadBalancerSourceRanges
[]string
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

Constraints: optional, updatable
nodePorts
object
nodePorts is a list of ports for exposing a cluster services to the outside world

Constraints: optional, updatable
publishNotReadyAddresses
boolean
publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet’s Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered “ready” even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.

Constraints: optional, updatable
sessionAffinity
string
Supports “ClientIP” and “None”. Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

Constraints: optional, updatable
sessionAffinityConfig
object

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core


Constraints: optional, updatable
type
enum

type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ClusterIP, NodePort, LoadBalancer and None. “ClusterIP” allocates a cluster-internal IP address for load-balancing to endpoints. “NodePort” builds on ClusterIP and allocates a port on every node. “LoadBalancer” builds on NodePort and creates an external load-balancer (if supported in the current cloud). “None” creates a headless service that can be used in conjunction with .spec.pods.disableEnvoy set to true in order to access the database using a DNS. More info:


Constraints: optional, updatable
Enum: ClusterIP, LoadBalancer, NodePort, None
SGShardedCluster.spec.postgresServices.shards.primaries.nodePorts

↩ Parent

nodePorts is a list of ports for exposing a cluster services to the outside world

Property
Description
pgport
integer
the node port that will be exposed to connect to Postgres instance

Constraints: optional, updatable
replicationport
integer
the node port that will be exposed to connect to Postgres instance for replication purpose

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.shards.primaries.sessionAffinityConfig

↩ Parent

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core

Property
Description
clientIP
object
ClientIPConfig represents the configurations of Client IP based session affinity.

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.shards.primaries.sessionAffinityConfig.clientIP

↩ Parent

ClientIPConfig represents the configurations of Client IP based session affinity.

Property
Description
timeoutSeconds
integer
timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == “ClientIP”. Default value is 10800(for 3 hours).

Constraints: optional, updatable
Format: int32

SGShardedCluster.spec.postgresServices.workers

↩ Parent

Configuration for the workers services

Property
Description
customPorts
[]object

The list of custom ports that will be exposed by the workers services.

The names of custom ports will be prefixed with the string custom- so they do not conflict with ports defined for the workers services.

The names of target ports will be prefixed with the string custom- so that the ports that can be referenced in this section will be only those defined under .spec.pods.customContainers[].ports sections where names are also prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#serviceport-v1-core


Constraints: optional, updatable, may require restart
primaries
object

Configure the workers service to any primary in the workers with the name as the SGShardedCluster plus the -workers suffix.

It provides a stable connection (regardless of primary failures or switchovers) to read-write Postgres servers of any worker SGCluster. Read-write servers are load-balanced via this service.

See also https://kubernetes.io/docs/concepts/services-networking/service/


Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.workers.primaries

↩ Parent

Configure the workers service to any primary in the workers with the name as the SGShardedCluster plus the -workers suffix.

It provides a stable connection (regardless of primary failures or switchovers) to read-write Postgres servers of any worker SGCluster. Read-write servers are load-balanced via this service.

See also https://kubernetes.io/docs/concepts/services-networking/service/

Property
Description
allocateLoadBalancerNodePorts
boolean
allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is “true”. It may be set to “false” if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.

Constraints: optional, updatable
enabled
boolean
Specify if the service should be created or not.

Constraints: optional, updatable
externalIPs
[]string

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#allocateloadbalancernodeports-v1-core


Constraints: optional, updatable
externalTrafficPolicy
string
externalTrafficPolicy describes how nodes distribute service traffic they receive on one of the Service’s “externally-facing” addresses (NodePorts, ExternalIPs, and LoadBalancer IPs). If set to “Local”, the proxy will configure the service in a way that assumes that external load balancers will take care of balancing the service traffic between nodes, and so each node will deliver traffic only to the node-local endpoints of the service, without masquerading the client source IP. (Traffic mistakenly sent to a node with no endpoints will be dropped.) The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). Note that traffic sent to an External IP or LoadBalancer IP from within the cluster will always get “Cluster” semantics, but clients sending to a NodePort from within the cluster may need to take traffic policy into account when picking a node.

Constraints: optional, updatable
healthCheckNodePort
integer
healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). This field cannot be updated once set.

Constraints: optional, updatable
Format: int32
internalTrafficPolicy
string
InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to “Local”, the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, “Cluster”, uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features).

Constraints: optional, updatable
ipFamilies
[]string

IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are “IPv4” and “IPv6”. This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to “headless” services. This field will be wiped when updating a Service to type ExternalName.

This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.


Constraints: optional, updatable
ipFamilyPolicy
string
IPFamilyPolicy represents the dual-stack-ness requested or required by this Service. If there is no value provided, then this field will be set to SingleStack. Services can be “SingleStack” (a single IP family), “PreferDualStack” (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or “RequireDualStack” (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName.

Constraints: optional, updatable
loadBalancerClass
string
loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. “internal-vip” or “example.com/internal-vip”. Unprefixed names are reserved for end-users. This field can only be set when the Service type is ‘LoadBalancer’. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type ‘LoadBalancer’. Once set, it can not be changed. This field will be wiped when a service is updated to a non ‘LoadBalancer’ type.

Constraints: optional, updatable
loadBalancerIP
string
Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations. Using it is non-portable and it may not support dual-stack. Users are encouraged to use implementation-specific annotations when available.

Constraints: optional, updatable
loadBalancerSourceRanges
[]string
If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

Constraints: optional, updatable
nodePorts
object
nodePorts is a list of ports for exposing a cluster services to the outside world

Constraints: optional, updatable
publishNotReadyAddresses
boolean
publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet’s Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered “ready” even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.

Constraints: optional, updatable
sessionAffinity
string
Supports “ClientIP” and “None”. Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

Constraints: optional, updatable
sessionAffinityConfig
object

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core


Constraints: optional, updatable
type
enum

type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ClusterIP, NodePort, LoadBalancer and None. “ClusterIP” allocates a cluster-internal IP address for load-balancing to endpoints. “NodePort” builds on ClusterIP and allocates a port on every node. “LoadBalancer” builds on NodePort and creates an external load-balancer (if supported in the current cloud). “None” creates a headless service that can be used in conjunction with .spec.pods.disableEnvoy set to true in order to access the database using a DNS. More info:


Constraints: optional, updatable
Enum: ClusterIP, LoadBalancer, NodePort, None
SGShardedCluster.spec.postgresServices.workers.primaries.nodePorts

↩ Parent

nodePorts is a list of ports for exposing a cluster services to the outside world

Property
Description
pgport
integer
the node port that will be exposed to connect to Postgres instance

Constraints: optional, updatable
replicationport
integer
the node port that will be exposed to connect to Postgres instance for replication purpose

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.workers.primaries.sessionAffinityConfig

↩ Parent

SessionAffinityConfig represents the configurations of session affinity.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#sessionaffinityconfig-v1-core

Property
Description
clientIP
object
ClientIPConfig represents the configurations of Client IP based session affinity.

Constraints: optional, updatable
SGShardedCluster.spec.postgresServices.workers.primaries.sessionAffinityConfig.clientIP

↩ Parent

ClientIPConfig represents the configurations of Client IP based session affinity.

Property
Description
timeoutSeconds
integer
timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == “ClientIP”. Default value is 10800(for 3 hours).

Constraints: optional, updatable
Format: int32

SGShardedCluster.spec.replicateFrom

↩ Parent

Make the sharded cluster a read-only standby replica allowing replication from another sharded cluster and acting as a relay.

Changing this section is allowed to fix issues or to change the replication source.

Removing this section convert the sharded cluster in a normal sharded cluster where the standby leader of each SGCluster is converted into a primary instance.

Example:

From SGShardedCluster instance:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  replicateFrom:
    instance:
      sgShardedCluster: my-cluster

Note: The above example allows replicating from another SGShardedCluster instance that in the same namespace and the same K8s cluster.

This option cannot be combined with external sharded cluster instance, storage and users.

From external sharded cluster instance:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  replicateFrom:
    instance:
      external:
        hosts: ["${COORDINATOR_HOST_IP}","${SHARD_0_HOST_IP}","${SHARD_1_HOST_IP}"]
        ports: [5433,5433,5433]
    users:
      superuser:
        username:
          name: pg-origin-secret
          key: superuser-username
        password:
          name: pg-origin-secret
          key: superuser-password
      replication:
        username:
          name: pg-origin-secret
          key: replication-username
        password:
          name: pg-origin-secret
          key: replication-password
      authenticator:
        username:
          name: pg-origin-secret
          key: authenticator-username
        password:
          name: pg-origin-secret
          key: authenticator-password

Note: Replace the ${COORDINATOR_HOST_IP}, ${SHARD_0_HOST_IP} and ${SHARD_1_HOST_IP} with the actual IPs of the external sharded cluster instance.

From Storage:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  initialData:
    restore:
      fromBackup:
        name: backup-name
  replicateFrom:
    storage:
      paths: ["${PG_ORIGIN_COORDINATOR_BACKUP_PATH}","${PG_ORIGIN_SHARD_0_BACKUP_PATH}","${PG_ORIGIN_SHARD_1_BACKUP_PATH}"]
      sgObjectStorage: stackgres-backups
    users:
      superuser:
        username:
          name: pg-origin-secret
          key: superuser-username
        password:
          name: pg-origin-secret
          key: superuser-password
      replication:
        username:
          name: pg-origin-secret
          key: replication-username
        password:
          name: pg-origin-secret
          key: replication-password
      authenticator:
        username:
          name: pg-origin-secret
          key: authenticator-username
        password:
          name: pg-origin-secret
          key: authenticator-password

Note: Using storage only to replicate from requires to recover from a backup in order to bootstrap the database.

Replace the ${PG_ORIGIN_COORDINATOR_BACKUP_PATH}, ${PG_ORIGIN_SHARD_0_BACKUP_PATH}, ${PG_ORIGIN_SHARD_1_BACKUP_PATH} with the actual paths in the object storage where the backups are stored.

From external instance and storage:


apiVersion: stackgres.io/v1beta1
kind: SGShardedCluster
metadata:
  name: stackgres
spec:
  replicateFrom:
    instance:
      external:
        hosts: ["${COORDINATOR_HOST_IP}","${SHARD_0_HOST_IP}","${SHARD_1_HOST_IP}"]
        ports: [5433,5433,5433]
    storage:
      paths: ["${PG_ORIGIN_COORDINATOR_BACKUP_PATH}","${PG_ORIGIN_SHARD_0_BACKUP_PATH}","${PG_ORIGIN_SHARD_1_BACKUP_PATH}"]
      sgObjectStorage: stackgres-backups
    users:
      superuser:
        username:
          name: pg-origin-secret
          key: superuser-username
        password:
          name: pg-origin-secret
          key: superuser-password
      replication:
        username:
          name: pg-origin-secret
          key: replication-username
        password:
          name: pg-origin-secret
          key: replication-password
      authenticator:
        username:
          name: pg-origin-secret
          key: authenticator-username
        password:
          name: pg-origin-secret
          key: authenticator-password

Note: Replace the ${COORDINATOR_HOST_IP}, ${SHARD_0_HOST_IP} and ${SHARD_1_HOST_IP} with the actual IPs of the external sharded cluster instance.

Replace the ${PG_ORIGIN_COORDINATOR_BACKUP_PATH}, ${PG_ORIGIN_SHARD_0_BACKUP_PATH}, ${PG_ORIGIN_SHARD_1_BACKUP_PATH} with the actual paths in the object storage where the backups are stored.

Property
Description
instance
object
Configure replication from a PostgreSQL sharded cluster instance.

Constraints: optional, updatable
storage
object

Configure replication from an SGObjectStorage using WAL shipping.

The file structure of the object storage must follow the WAL-G file structure.


Constraints: optional, updatable
users
object
Kubernetes SecretKeySelectors that contains the credentials of the users.

Constraints: optional, updatable

SGShardedCluster.spec.replicateFrom.instance

↩ Parent

Configure replication from a PostgreSQL sharded cluster instance.

Property
Description
external
object
Configure replication from an external PostgreSQL instance.

Constraints: optional, updatable
sgShardedCluster
string
Configure replication from an SGShardedCluster.

Constraints: optional, updatable
SGShardedCluster.spec.replicateFrom.instance.external

↩ Parent

Configure replication from an external PostgreSQL instance.

Property
Description
hosts
[]string
The hosts of the PostgreSQL instances to replicate from.

Constraints: required, updatable
ports
[]integer
The ports of the PostgreSQL instances to replicate from.

Constraints: required, updatable
customRestoreMethods
[]object

Constraints: optional, updatable
SGShardedCluster.spec.replicateFrom.instance.external.customRestoreMethods[index]

↩ Parent

Custom restore method. See https://patroni.readthedocs.io/en/latest/replica_bootstrap.html#custom-replica-creation

Property
Description
command
string
A command to be run to restore the leader replica. Mutually exclusive with script field.

Constraints: optional, updatable
keep_data
boolean
If set to true, will instruct Patroni to not clean PGDATA folder before calling restore.

Constraints: optional, updatable
keep_existing_recovery_conf
boolean
If set to true, will instruct Patroni to not remove the existing recovery.conf file if it exists (PostgreSQL <= 11). Similarly, in that case Patroni will not remove the existing recovery.signal or standby.signal if either exists, nor will it override the configured recovery settings (PostgreSQL >= 12). This is useful when bootstrapping from a backup with tools like pgBackRest that generate the appropriate recovery configuration for you.

Constraints: optional, updatable
no_leader
boolean
If set to true allows Patroni to call the replica creation method even if there is no running leader or replicas. In that case, an empty string will be passed in a connection string. This is useful for restoring the formerly running cluster from the binary backup.

Constraints: optional, updatable
no_params
boolean
If set to true, restricts passing parameters to custom command or script.

Constraints: optional, updatable
parameters
map[string]string
A list of optional parameters to pass to the command or script.

Constraints: optional, updatable
recovery_conf
map[string]string
When set, Patroni will generate a recovery.conf before starting the newly bootstrapped instance (or set the recovery settings on Postgres configuration if running PostgreSQL >= 12). Typically, such recovery configuration should contain at least one of the recovery_target_* parameters, together with the recovery_target_action set to promote.

Constraints: optional, updatable
script
string
The path to a shell script to be run to restore the leader replica. Mutually exclusive with command field.

Constraints: optional, updatable

SGShardedCluster.spec.replicateFrom.storage

↩ Parent

Configure replication from an SGObjectStorage using WAL shipping.

The file structure of the object storage must follow the WAL-G file structure.

Property
Description
paths
[]string
The paths in the SGObjectStorage to replicate from.

Constraints: required, updatable
sgObjectStorage
string
The SGObjectStorage name to replicate from.

Constraints: required, updatable
performance
object
Configuration that affects the backup network and disk usage performance during recovery.

Constraints: optional, updatable
SGShardedCluster.spec.replicateFrom.storage.performance

↩ Parent

Configuration that affects the backup network and disk usage performance during recovery.

Property
Description
downloadConcurrency
integer
Backup storage may use several concurrent streams to read the data. This parameter configures the number of parallel streams to use. By default, it’s set to the minimum between the number of files to read and 10.

Constraints: optional, updatable
Minimum: 1
maxDiskBandwidth
integer
Maximum disk read I/O when performing a backup. In bytes (per second).

Constraints: optional, updatable
maxNetworkBandwidth
integer
Maximum storage upload bandwidth used when storing a backup. In bytes (per second).

Constraints: optional, updatable

SGShardedCluster.spec.replicateFrom.users

↩ Parent

Kubernetes SecretKeySelectors that contains the credentials of the users.

Property
Description
authenticator
object
A Kubernetes SecretKeySelector that contains the credentials of the authenticator user used by pgbouncer to authenticate other users.

Constraints: required, updatable
replication
object
A Kubernetes SecretKeySelector that contains the credentials of the replication user used to replicate from the primary cluster and from replicas of this cluster.

Constraints: required, updatable
superuser
object
A Kubernetes SecretKeySelector that contains the credentials of the superuser (usually the postgres user).

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.authenticator

↩ Parent

A Kubernetes SecretKeySelector that contains the credentials of the authenticator user used by pgbouncer to authenticate other users.

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: required, updatable
username
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.authenticator.password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.authenticator.username

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.replication

↩ Parent

A Kubernetes SecretKeySelector that contains the credentials of the replication user used to replicate from the primary cluster and from replicas of this cluster.

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: required, updatable
username
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.replication.password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.replication.username

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.superuser

↩ Parent

A Kubernetes SecretKeySelector that contains the credentials of the superuser (usually the postgres user).

Property
Description
password
object
A Kubernetes SecretKeySelector that contains the password of the user.

Constraints: required, updatable
username
object
A Kubernetes SecretKeySelector that contains the username of the user.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.superuser.password

↩ Parent

A Kubernetes SecretKeySelector that contains the password of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable
SGShardedCluster.spec.replicateFrom.users.superuser.username

↩ Parent

A Kubernetes SecretKeySelector that contains the username of the user.

Property
Description
key
string
The key of the secret to select from. Must be a valid secret key.

Constraints: required, updatable
name
string
Name of the referent. More information.

Constraints: required, updatable

SGShardedCluster.spec.replication

↩ Parent

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.

Property
Description
initialization
object
Allows specifying how the replicas are initialized.

Constraints: optional, updatable
mode
string

The replication mode applied to the whole cluster. Possible values are:

  • async (default)
  • sync
  • strict-sync
  • sync-all
  • strict-sync-all

async

When in asynchronous mode the cluster is allowed to lose some committed transactions. When the primary server fails or becomes unavailable for any other reason a sufficiently healthy standby will automatically be promoted to primary. Any transactions that have not been replicated to that standby remain in a “forked timeline” on the primary, and are effectively unrecoverable (the data is still there, but recovering it requires a manual recovery effort by data recovery specialists).

sync

When in synchronous mode a standby will not be promoted unless it is certain that the standby contains all transactions that may have returned a successful commit status to client (clients can change the behavior per transaction using PostgreSQL’s synchronous_commit setting. Transactions with synchronous_commit values of off and local may be lost on fail over, but will not be blocked by replication delays). This means that the system may be unavailable for writes even though some servers are available. System administrators can still use manual failover commands to promote a standby even if it results in transaction loss.

Synchronous mode does not guarantee multi node durability of commits under all circumstances. When no suitable standby is available, primary server will still accept writes, but does not guarantee their replication. When the primary fails in this mode no standby will be promoted. When the host that used to be the primary comes back it will get promoted automatically, unless system administrator performed a manual failover. This behavior makes synchronous mode usable with 2 node clusters.

When synchronous mode is used and a standby crashes, commits will block until the primary is switched to standalone mode. Manually shutting down or restarting a standby will not cause a commit service interruption. Standby will signal the primary to release itself from synchronous standby duties before PostgreSQL shutdown is initiated.

strict-sync

When it is absolutely necessary to guarantee that each write is stored durably on at least two nodes, use the strict synchronous mode. This mode prevents synchronous replication to be switched off on the primary when no synchronous standby candidates are available. As a downside, the primary will not be available for writes (unless the Postgres transaction explicitly turns off synchronous_mode parameter), blocking all client write requests until at least one synchronous replica comes up.

Note: Because of the way synchronous replication is implemented in PostgreSQL it is still possible to lose transactions even when using strict synchronous mode. If the PostgreSQL backend is cancelled while waiting to acknowledge replication (as a result of packet cancellation due to client timeout or backend failure) transaction changes become visible for other backends. Such changes are not yet replicated and may be lost in case of standby promotion.

sync-all

The same as sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.

strict-sync-all

The same as strict-sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.


Constraints: optional, updatable
Default: async
syncInstances
integer
Number of synchronous standby instances. Must be less than the total number of instances. It is set to 1 by default. Only setteable if mode is sync or strict-sync.

Constraints: optional, updatable
Minimum: 1

SGShardedCluster.spec.replication.initialization

↩ Parent

Allows specifying how the replicas are initialized.

Property
Description
backupNewerThan
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies how old an SGBackup have to be in order to be seleceted to initialize a replica.

When FromExistingBackup mode is set this field restrict the selection of SGBackup to be used for recovery newer than the specified value.

When FromNewlyCreatedBackup mode is set this field skip the creation SGBackup to be used for recovery if one newer than the specified value exists.


Constraints: optional, updatable
backupRestorePerformance
object
Configuration that affects the backup network and disk usage performance during recovery.

Constraints: optional, updatable
mode
string

Allows specifying how the replicas are initialized.

Possible values are:

  • FromPrimary: When this mode is used replicas will be always created from the primary using pg_basebackup.
  • FromReplica: When this mode is used replicas will be created from another existing replica using pg_basebackup. Fallsback to FromPrimary if there’s no replica or it fails.
  • FromExistingBackup: When this mode is used replicas will be created from an existing SGBackup. If backupNewerThan is set the SGBackup must be newer than its value. When this mode fails to restore an SGBackup it will try with a previous one (if exists). Fallsback to FromReplica if there’s no backup left or it fails.
  • FromNewlyCreatedBackup: When this mode is used replicas will be created from a newly created SGBackup. Fallsback to FromExistingBackup if backupNewerThan is set and exists a recent backup newer than its value or it fails.

Constraints: optional, updatable
Default: FromExistingBackup
SGShardedCluster.spec.replication.initialization.backupRestorePerformance

↩ Parent

Configuration that affects the backup network and disk usage performance during recovery.

Property
Description
downloadConcurrency
integer
Backup storage may use several concurrent streams to read the data. This parameter configures the number of parallel streams to use. By default, it’s set to the minimum between the number of file to read and 10.

Constraints: optional, updatable
Minimum: 1
maxDiskBandwidth
integer
Maximum disk read I/O when performing a backup. In bytes (per second).

Constraints: optional, updatable
maxNetworkBandwidth
integer
Maximum storage upload bandwidth used when storing a backup. In bytes (per second).

Constraints: optional, updatable

SGShardedCluster.spec.workers

↩ Parent

The workers are a group of StackGres clusters where the partitioned data chunks are stored.

When referring to the cluster in the descriptions below it applies to any worker’s StackGres cluster.

Property
Description
clusters
integer
Number of worker’s StackGres clusters

Constraints: required, updatable
Minimum: 0
instancesPerCluster
integer
Number of StackGres instances per worker’s StackGres cluster. Each instance contains one Postgres server. Out of all of the Postgres servers, one is elected as the primary, the rest remain as read-only replicas.

Constraints: required, updatable
Minimum: 0
pods
object
Cluster pod’s configuration.

Constraints: required, updatable
autoscaling
object

This section allows configuring vertical Pod autoscaling for the SGCluster’s Pods.

Vertical Pod Autoscaling will use cpu and memory usage as the metric to control the upscale or downscale of the Pod requests and limits resources. Vertical Pod Autoscaling requires the Vertical Pod Autoscaler operator to be installed in the Kubernetes cluster.


Constraints: optional, updatable
clusterNameTemplate
string

Name template of worker’s StackGres clusters.

The SGCluster name will be created using the name template and the index (starting at 0) as a suffix. For instance with a clusterNameTemplate set to myworker the first SGCluster name will be myworker0.

By default the query router cluster name template is <cluster name>-worker.

This field can only be set on creation.


Constraints: optional, immutable
configurations
object
Shards custom configurations.

Constraints: optional, updatable
managedSql
object
This section allows to reference SQL scripts that will be applied to the cluster live.

Constraints: optional, updatable
metadata
object
Metadata information from workers cluster created resources.

Constraints: optional, updatable
overrides
[]object

Any worker can be overridden by this section.

An entry only overrides the SGClusters of its type (see field type), and the index (or indexes) is always relative to that type. An entry of type Worker and an entry of type QueryRouter may therefore use the same index without overlapping.

Any field that is not set in an entry is inherited from the section the overridden SGCluster is generated from: .spec.workers for workers and .spec.coordinator for query routers. In particular a query router with no override uses .spec.coordinator.sgInstanceProfile and .spec.coordinator.configurations, and not the ones of .spec.workers.


Constraints: optional, updatable
replication
object

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.


Constraints: optional, updatable
sgInstanceProfile
string

Name of the SGInstanceProfile.

A SGInstanceProfile defines CPU and memory limits. Must exist before creating a cluster.

When no profile is set, a default (1 core, 2 GiB RAM) one is used.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart

SGShardedCluster.spec.workers.pods

↩ Parent

Cluster pod’s configuration.

Property
Description
persistentVolume
object
Pod’s persistent volume configuration.

Constraints: required, updatable
customContainers
[]object

A list of custom application containers that run within the workers cluster’s Pods.

The name used in this section will be prefixed with the string custom- so that when referencing them in the .spec.containers section of SGInstanceProfile the name used has to be prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customEnv
map[string][]object

A list of custom environment variables for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customEnvFrom
map[string][]object
Custom Pod environment variables from a source for the specified container.

Constraints: optional, updatable
customInitContainers
[]object

A list of custom application init containers that run within the coordinator cluster’s Pods. The custom init containers will run following the defined sequence at the end of cluster’s Pods init containers.

The name used in this section will be prefixed with the string custom- so that when referencing them in the .spec.containers section of SGInstanceProfile the name used has to be prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitEnv
map[string][]object

A list of custom environment variables from source for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitEnvFrom
map[string][]object

A list of custom environment variables from source for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitVolumeMounts
map[string][]object

A list of custom volume mounts for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customVolumeMounts
map[string][]object

A list of custom volume mounts for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customVolumes
[]object

A list of custom volumes that may be used along with any container defined in customInitContainers or customContainers sections for the workers.

The name used in this section will be prefixed with the string custom- so that when referencing them in the customInitContainers or customContainers sections the name used has to be prepended with the same prefix.

Only the following volume types are allowed: configMap, downwardAPI, emptyDir, gitRepo, glusterfs, hostPath, nfs, projected and secret

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#volume-v1-core


Constraints: optional, updatable, may require restart
disableConnectionPooling
boolean

If set to true, avoids creating a connection pooling (using PgBouncer) sidecar.

If sharding type is citus and .spec.configurations.citus.connectToPooler is true (the default) this field is ignored.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
disableEnvoy
boolean

If set to true, avoids creating the envoy sidecar. This sidecar is used as the endge proxy for the cluster’s Pods providing extra metrics to the monitoring layer.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: true
disableMetricsExporter
boolean
Deprecated use .spec.configurations.observability.disableMetrics instead.

Constraints: optional, updatable
Default: false
disablePostgresUtil
boolean

If set to true, avoids creating the postgres-util sidecar. This sidecar contains usual Postgres administration utilities that are not present in the main (patroni) container, like psql. Only disable if you know what you are doing.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
dnsConfig
object
PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

Constraints: optional, updatable
dnsPolicy
string
Set DNS policy for the pod. Defaults to “ClusterFirst”. Valid values are ‘ClusterFirstWithHostNet’, ‘ClusterFirst’, ‘Default’ or ‘None’. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to ‘ClusterFirstWithHostNet’.

Constraints: optional, updatable
hostNetwork
boolean
Host networking requested for this pod. Use the host’s network namespace. When using HostNetwork you should specify ports so the scheduler is aware. When hostNetwork is true, specified hostPort fields in port definitions must match containerPort, and unspecified hostPort fields in port definitions are defaulted to match containerPort. Default to false.

Constraints: optional, updatable
livenessProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
managementPolicy
string
managementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is OrderedReady, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is Parallel which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.

Constraints: optional, updatable
readinessProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
resources
object
Pod custom resources configuration.

Constraints: optional, updatable
scheduling
object

Pod custom scheduling, affinity and topology spread constratins configuration.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
setHostnameAsFQDN
boolean
If true the pod’s hostname will be configured as the pod’s FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false.

Constraints: optional, updatable
startupProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
statefulSetServiceName
string
serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where “pod-specific-string” is managed by the StatefulSet controller.

Constraints: optional, updatable
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.

Constraints: optional, updatable
Format: int64
updateStrategy
object

This section indicates the strategy that the SGCluster controller will use to perform updates.

It includes any additional parameters necessary to perform the update for the indicated strategy.

When a change only require the Postgres instance to be restarted, and not the Pod to be re-created, the Postgres instances of the replicas are restarted first and a switchover to the ready replica with the least lag is then performed, so that the primary is demoted instead of being restarted.

The Postgres instance of the primary is restarted in place, without performing any switchover, only when any of the parameters max_connections, max_prepared_transactions, max_locks_per_transaction, max_wal_senders or max_worker_processes is decreased (a hot standby require those parameters to be set to a value greater than or equal to the value set on the primary, see https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-ADMIN) or when no replica is available to switchover to. Patroni only reports the parameters that are pending a change since version 4, when they are not reported a switchover is performed.


Constraints: optional, updatable
Default: {"type":"OnlyDbOps"}
SGShardedCluster.spec.workers.pods.persistentVolume

↩ Parent

Pod’s persistent volume configuration.

Property
Description
size
string
Size of the PersistentVolume set for each instance of the cluster. This size is specified either in Mebibytes, Gibibytes or Tebibytes (multiples of 2^20, 2^30 or 2^40, respectively).

Constraints: required, updatable
fsGroupChangePolicy
string
fsGroupChangePolicy defines behavior of changing ownership and permission of the volume before being exposed inside Pod. This field will only apply to volume types which support fsGroup based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are “OnRootMismatch” and “Always”. If not specified, “Always” is used. Note that this field cannot be set when spec.os.name is windows.

Constraints: optional, updatable
ioLimits
object

This section allows to define per-volume I/O limits for nodes using cgroup v2 io.max features.

NOTE: This is an alpha feature.

When multiple PostgreSQL clusters share the same local storage device on a Kubernetes node, a single cluster running a heavy workload (for example large COPY, aggressive VACUUM, or an unoptimized query) can saturate the device’s I/O bandwidth and degrade performance for every other cluster on that node. StackGres provides this mechanism to prevent this class of noisy-neighbor problem. The mechanism operates at the cgroup + block-device layer, not at the PVC abstraction. Since each pod has its own cgroup, limits are enforced independently across pods even when they share the same physical device — this is the core of the noisy-neighbor protection. However, if multiple volumes within the same pod share the same backing device, their limits target a single entry in that pod’s cgroup and cannot be enforced independently of each other.

This feature works on top of existing CSI drivers such as TopoLVM or OpenEBS LocalPV. The primary target is on-premises deployments where multiple StackGres clusters share local NVMe storage on the same node.

IMPORTANT: Setting any of the value above will require to create an init container named setup-io-limits in each SGCluster’s Pods running as root with only the CHOWN cabability set. Also both the setup-io-limits init container and the cluster-controller container will require to mount the host path /sys/fs/cgroup in order to be able to set owner of and write to the io.max file that will allows to set the io limits. For this reason this feature must be enabled globally by the operator administrator by adding the io-limits feature gate under .spec.featureGates of the SGConfig. Setting any of the value above without the io-limits feature gate enabled will be rejected.


Constraints: optional, updatable
storageClass
string
Name of an existing StorageClass in the Kubernetes cluster, used to create the PersistentVolumes for the instances of the cluster.

Constraints: optional, updatable
volumeAttributesClassName
string

Name of an existing StorageClass in the Kubernetes cluster, used to create the PersistentVolumes for the instances of the cluster.

See https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/


Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.persistentVolume.ioLimits

↩ Parent

This section allows to define per-volume I/O limits for nodes using cgroup v2 io.max features.

NOTE: This is an alpha feature.

When multiple PostgreSQL clusters share the same local storage device on a Kubernetes node, a single cluster running a heavy workload (for example large COPY, aggressive VACUUM, or an unoptimized query) can saturate the device’s I/O bandwidth and degrade performance for every other cluster on that node. StackGres provides this mechanism to prevent this class of noisy-neighbor problem. The mechanism operates at the cgroup + block-device layer, not at the PVC abstraction. Since each pod has its own cgroup, limits are enforced independently across pods even when they share the same physical device — this is the core of the noisy-neighbor protection. However, if multiple volumes within the same pod share the same backing device, their limits target a single entry in that pod’s cgroup and cannot be enforced independently of each other.

This feature works on top of existing CSI drivers such as TopoLVM or OpenEBS LocalPV. The primary target is on-premises deployments where multiple StackGres clusters share local NVMe storage on the same node.

IMPORTANT: Setting any of the value above will require to create an init container named setup-io-limits in each SGCluster’s Pods running as root with only the CHOWN cabability set. Also both the setup-io-limits init container and the cluster-controller container will require to mount the host path /sys/fs/cgroup in order to be able to set owner of and write to the io.max file that will allows to set the io limits. For this reason this feature must be enabled globally by the operator administrator by adding the io-limits feature gate under .spec.featureGates of the SGConfig. Setting any of the value above without the io-limits feature gate enabled will be rejected.

Property
Description
readIops
integer
Max read IO operations per second. Leave empty to remove this limit.

Constraints: optional, updatable
readMiBps
integer
Max read MiB per second. Leave empty to remove this limit.

Constraints: optional, updatable
writeIops
integer
Max write IO operations per second. Leave empty to remove this limit.

Constraints: optional, updatable
writeMiBps
integer
Max write MiB per second. Leave empty to remove this limit.

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.customEnvFrom[key][index]

↩ Parent

EnvFromSource represents the source of a set of ConfigMaps or Secrets

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#envfromsource-v1-core

Property
Description
configMapRef
object

ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.

The contents of the target ConfigMap’s Data field will represent the key-value pairs as environment variables.


Constraints: optional, updatable
prefix
string
Optional text to prepend to the name of each environment variable. May consist of any printable ASCII characters except ‘=’.

Constraints: optional, updatable
secretRef
object

SecretEnvSource selects a Secret to populate the environment variables with.

The contents of the target Secret’s Data field will represent the key-value pairs as environment variables.


Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.customEnvFrom[key][index].configMapRef

↩ Parent

ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.

The contents of the target ConfigMap’s Data field will represent the key-value pairs as environment variables.

Property
Description
name
string
Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

Constraints: optional, updatable
optional
boolean
Specify whether the ConfigMap must be defined

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.customEnvFrom[key][index].secretRef

↩ Parent

SecretEnvSource selects a Secret to populate the environment variables with.

The contents of the target Secret’s Data field will represent the key-value pairs as environment variables.

Property
Description
name
string
Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

Constraints: optional, updatable
optional
boolean
Specify whether the Secret must be defined

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.dnsConfig

↩ Parent

PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

Property
Description
nameservers
[]string
A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.

Constraints: optional, updatable
options
[]object
A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.

Constraints: optional, updatable
searches
[]string
A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.dnsConfig.options[index]

↩ Parent

PodDNSConfigOption defines DNS resolver options of a pod.

Property
Description
name
string
Name is this DNS resolver option’s name. Required.

Constraints: optional, updatable
value
string
Value is this DNS resolver option’s value.

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.livenessProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.workers.pods.readinessProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.workers.pods.resources

↩ Parent

Pod custom resources configuration.

Property
Description
containers
map[string]object
Resources configuration to be merged with the specified container on top of SGInstanceProfile referenced by sgInstanceProfile field if specified.

Constraints: optional, updatable
disableResourcesRequestsSplitFromTotal
boolean

When set to true the resources requests values in fields SGInstanceProfile.spec.requests.cpu and SGInstanceProfile.spec.requests.memory will represent the resources requests of the patroni container and the total resources requests calculated by adding the resources requests of all the containers (including the patroni container).

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
enableClusterLimitsRequirements
boolean

When enabled resource limits for containers other than the patroni container will be set just like for patroni container as specified in the SGInstanceProfile.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
failWhenTotalIsHigher
boolean

When set to true the reconciliation of the cluster will fail if disableResourcesRequestsSplitFromTotal is not set or set to false and the sum of the CPU or memory of all the containers except patroni is equals or higher than the total specified in SGInstanceProfile.spec.requests.cpu or SGInstanceProfile.spec.requests.memory.

When false (the default) and disableResourcesRequestsSplitFromTotal is not set or set to false and the sum of the CPU or memory of all the containers except patroni is equals or higher than the total specified in SGInstanceProfile.spec.requests.cpu or SGInstanceProfile.spec.requests.memory then the patroni container resources will be set to 0.


Constraints: optional, updatable
initContainers
map[string]object
Resources configuration to be merged with the specified init container on top of SGInstanceProfile referenced by sgInstanceProfile field if specified.

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.resources.containers[key]

↩ Parent

ResourceRequirements describes the compute resource requirements.

Property
Description
claims
[]object

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This field depends on the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.


Constraints: optional, updatable
limits
map[string]string
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
requests
map[string]string
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.resources.containers[key].claims[index]

↩ Parent

ResourceClaim references one entry in PodSpec.ResourceClaims.

Property
Description
name
string
Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Constraints: required, updatable
request
string
Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.resources.initContainers[key]

↩ Parent

ResourceRequirements describes the compute resource requirements.

Property
Description
claims
[]object

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This field depends on the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.


Constraints: optional, updatable
limits
map[string]string
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
requests
map[string]string
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.resources.initContainers[key].claims[index]

↩ Parent

ResourceClaim references one entry in PodSpec.ResourceClaims.

Property
Description
name
string
Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Constraints: required, updatable
request
string
Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Constraints: optional, updatable
SGShardedCluster.spec.workers.pods.scheduling

↩ Parent

Pod custom scheduling, affinity and topology spread constratins configuration.

Changing this field may require a restart.

Property
Description
backup
object
Backup Pod custom scheduling and affinity configuration.

Constraints: optional, updatable, may require restart
nodeAffinity
object

Node affinity is a group of node affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#nodeaffinity-v1-core


Constraints: optional, updatable, may require restart
nodeSelector
map[string]string
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

Constraints: optional, updatable, may require restart
podAffinity
object

Pod affinity is a group of inter pod affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podaffinity-v1-core


Constraints: optional, updatable, may require restart
podAntiAffinity
object

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podantiaffinity-v1-core


Constraints: optional, updatable, may require restart
preemptionPolicy
string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

Constraints: optional, updatable, may require restart
priorityClassName
string
If specified, indicates the pod’s priority. “system-node-critical” and “system-cluster-critical” are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

Constraints: optional, updatable, may require restart
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the “legacy” RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

Constraints: optional, updatable, may require restart
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

Constraints: optional, updatable, may require restart
tolerations
[]object

Constraints: optional, updatable, may require restart
topologySpreadConstraints
[]object

TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#topologyspreadconstraint-v1-core


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.pods.scheduling.backup

↩ Parent

Backup Pod custom scheduling and affinity configuration.

Property
Description
nodeAffinity
object

Node affinity is a group of node affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#nodeaffinity-v1-core


Constraints: optional, updatable, may require restart
nodeSelector
map[string]string
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

Constraints: optional, updatable, may require restart
podAffinity
object

Pod affinity is a group of inter pod affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podaffinity-v1-core


Constraints: optional, updatable, may require restart
podAntiAffinity
object

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podantiaffinity-v1-core


Constraints: optional, updatable, may require restart
preemptionPolicy
string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

Constraints: optional, updatable, may require restart
priorityClassName
string
If specified, indicates the pod’s priority. “system-node-critical” and “system-cluster-critical” are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

Constraints: optional, updatable, may require restart
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the “legacy” RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

Constraints: optional, updatable, may require restart
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

Constraints: optional, updatable, may require restart
tolerations
[]object

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.pods.startupProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.workers.pods.updateStrategy

↩ Parent

This section indicates the strategy that the SGCluster controller will use to perform updates.

It includes any additional parameters necessary to perform the update for the indicated strategy.

When a change only require the Postgres instance to be restarted, and not the Pod to be re-created, the Postgres instances of the replicas are restarted first and a switchover to the ready replica with the least lag is then performed, so that the primary is demoted instead of being restarted.

The Postgres instance of the primary is restarted in place, without performing any switchover, only when any of the parameters max_connections, max_prepared_transactions, max_locks_per_transaction, max_wal_senders or max_worker_processes is decreased (a hot standby require those parameters to be set to a value greater than or equal to the value set on the primary, see https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-ADMIN) or when no replica is available to switchover to. Patroni only reports the parameters that are pending a change since version 4, when they are not reported a switchover is performed.

Property
Description
method
string

Indicates the method of the update strategy. Default is InPlace.

  • InPlace: update will be performed on the existing instances.
  • ReducedImpact: before an update is performed on the existing instances a new instance if created to reduce the impact on read-only replicas.

Constraints: optional, updatable
Default: InPlace
restartDelay
string
An ISO 8601 duration in the format PnDTnHnMn.nS indicating the delay that has to pass between the restart of a Postgres instance performed by the SGCluster controller and the next one. Default is PT5M.

Constraints: optional, updatable
Default: PT5M
schedule
[]object
Indicates a list of windows of time where an update can be performed.

Constraints: optional, updatable
type
string

Indicates the type of the update strategy. Default is OnlyDbOps.

  • Always: update will be performed as soon as possible.
  • Schedule: update will be performed as specified in the schedule section where you can configure windows of time where the update can be performed.
  • OnlyDbOps: update will be performed only when an SGDbOps of type restart, securityUpgrade or minorVersionUpgrade targeting the SGCluster is started.
  • Never: update will never be performed (even if annotation stackgres.io/rollout is present with a different value) unless the Pods are deleted manually.

Alternatively to this configuration you may specify the following annotations:

  • stackgres.io/rollout=always: Same behavior as Always.
  • stackgres.io/rollout=schedule: Same behavior as Schedule.
  • stackgres.io/rollout=never: Same behavior as Never (even if type has a different value).

Unless Never (or the annotation stackgres.io/rollout=never) is specified an SGDbOps of type restart, securityUpgrade or minorVersionUpgrade targeting the SGCluster will trigger an update of the Pods.

The update of the Pods will be performed only if Pods are pending any change. Changes in the configuration may not require restarting the Pod and, in such cases, only the Postgres instance will be restarted.


Constraints: optional, updatable
Default: OnlyDbOps
SGShardedCluster.spec.workers.pods.updateStrategy.schedule[index]

↩ Parent

Indicates a window of time where an update can be performed.

Property
Description
cron
string
A UNIX cron expression indicating the start of the window of time where the update can be performed.

Constraints: optional, updatable
duration
string
An ISO 8601 duration in the format PnDTnHnMn.nS, that, together with the cron expression, indicates the end of the window of time where the update can be performed.

Constraints: optional, updatable

SGShardedCluster.spec.workers.autoscaling

↩ Parent

This section allows configuring vertical Pod autoscaling for the SGCluster’s Pods.

Vertical Pod Autoscaling will use cpu and memory usage as the metric to control the upscale or downscale of the Pod requests and limits resources. Vertical Pod Autoscaling requires the Vertical Pod Autoscaler operator to be installed in the Kubernetes cluster.

Property
Description
horizontal
object
Section to configure horizontal Pod autoscaling aspects.

Constraints: optional, updatable
maxAllowed
object
Defines the higher bound for Pod resources of patroni, pgbouncer and envoy containers

Constraints: optional, updatable
minAllowed
object
Defines the lower bound for Pod resources of patroni, pgbouncer and envoy containers

Constraints: optional, updatable
mode
enum

Allows enabling or disabling any of horizontal and vertical Pod autoscaling.

Possible values are:

  • vertical: only vertical Pod autoscaling will be enabled (default)
  • none: all autoscaling will be disabled

Constraints: optional, updatable
Enum: vertical, none
Default: vertical
vertical
object
Section to configure vertical Pod autoscaling aspects.

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.horizontal

↩ Parent

Section to configure horizontal Pod autoscaling aspects.

Property
Description
cooldownPeriod
integer
The period in seconds before the downscale of replica instances can be triggered.

Constraints: optional, updatable
Default: 300
pollingInterval
integer
The interval in seconds to check if the scaleup or scaledown have to be triggered.

Constraints: optional, updatable
Default: 30
replicasConnectionsUsageMetricType
string
The metric type for connections used metric. See https://keda.sh/docs/latest/concepts/scaling-deployments/#triggers

Constraints: optional, updatable
Default: AverageValue
replicasConnectionsUsageTarget
string
The target value for replicas connections used in order to trigger the upscale of replica instances.

Constraints: optional, updatable
Default: 0.8
SGShardedCluster.spec.workers.autoscaling.maxAllowed

↩ Parent

Defines the higher bound for Pod resources of patroni, pgbouncer and envoy containers

Property
Description
envoy
object
Defines the higher bound for Pod resources of envoy container

Constraints: optional, updatable
patroni
object
Defines the higher bound for Pod resources of patroni container

Constraints: optional, updatable
pgbouncer
object
Defines the higher bound for Pod resources of pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.maxAllowed.envoy

↩ Parent

Defines the higher bound for Pod resources of envoy container

Property
Description
cpu
string
The maximum allowed CPU for the envoy container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the envoy container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.maxAllowed.patroni

↩ Parent

Defines the higher bound for Pod resources of patroni container

Property
Description
cpu
string
The maximum allowed CPU for the patroni container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the patroni container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.maxAllowed.pgbouncer

↩ Parent

Defines the higher bound for Pod resources of pgbouncer container

Property
Description
cpu
string
The maximum allowed CPU for the pgbouncer container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.minAllowed

↩ Parent

Defines the lower bound for Pod resources of patroni, pgbouncer and envoy containers

Property
Description
envoy
object
Defines the lower bound for Pod resources of envoy container

Constraints: optional, updatable
patroni
object
Defines the lower bound for Pod resources of patroni container

Constraints: optional, updatable
pgbouncer
object
Defines the lower bound for Pod resources of pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.minAllowed.envoy

↩ Parent

Defines the lower bound for Pod resources of envoy container

Property
Description
cpu
string
The minimum allowed CPU for the envoy container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the envoy container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.minAllowed.patroni

↩ Parent

Defines the lower bound for Pod resources of patroni container

Property
Description
cpu
string
The minimum allowed CPU for the patroni container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the patroni container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.minAllowed.pgbouncer

↩ Parent

Defines the lower bound for Pod resources of pgbouncer container

Property
Description
cpu
string
The minimum allowed CPU for the pgbouncer container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.autoscaling.vertical

↩ Parent

Section to configure vertical Pod autoscaling aspects.

Property
Description
recommender
string
Recommender responsible for generating recommendation for vertical Pod autoscaling. If not specified the default one will be used.

Constraints: optional, updatable

SGShardedCluster.spec.workers.configurations

↩ Parent

Shards custom configurations.

Property
Description
patroni
object

Allows specifying Patroni configuration that will extend the generated one

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
pooling
object
Constraints: optional, updatable
postgres
object
Section for postgres configuration.

Constraints: optional, updatable
postgresExporter
object
Section to configure the postgres_exporter component.

Constraints: optional, updatable
sgPoolingConfig
string

Name of the SGPoolingConfig used for this cluster. Each pod contains a sidecar with a connection pooler (currently: PgBouncer). The connection pooler is implemented as a sidecar.

If not set, a default configuration will be used. Disabling connection pooling altogether is possible if the disableConnectionPooling property of the pods object is set to true.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
sgPostgresConfig
string

Name of the SGPostgresConfig used for the cluster. It must exist. When not set, a default Postgres config, for the major version selected, is used.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.configurations.patroni

↩ Parent

Allows specifying Patroni configuration that will extend the generated one

If sharding type is shardingsphere then this section is ignored.

Property
Description
connectUsingFqdn
boolean
Configure Patroni to use FQDN instead of the Pod’s assigned IPs to connect between Patroni and Postgres instances.

Constraints: optional, updatable
dynamicConfig
object

Allows specifying Patroni dynamic configuration that will overwrite the generated one. See https://patroni.readthedocs.io/en/latest/dynamic_configuration.html

The following configuration fields will be ignored:

  • synchronous_mode
  • synchronous_mode_strict
  • postgresql
  • standby_cluster

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
initialConfig
object

Allows specifying Patroni configuration that will overwrite the generated one. See https://patroni.readthedocs.io/en/latest/yaml_configuration.html

The following configuration fields will be ignored:

  • name
  • namespace
  • log
  • bootstrap
  • citus
  • postgresql # with the exception of postgresql.callbacks, postgresql.pre_promote, postgresql.before_stop and postgresql.pg_ctl_timeout
  • restapi
  • ctl
  • watchdog
  • tags

If sharding type is shardingsphere then this section is ignored.

This field can only be set on creation.


Constraints: optional, immutable
startGateAnnotations
map[string]string

Annotations that must be set on the generated SGClusters before Patroni is started. See SGCluster.spec.configurations.patroni.startGateAnnotations.

If sharding type is citus the operator also adds the annotation required to start the query routers only once they have been registered by the coordinator.


Constraints: optional, updatable
SGShardedCluster.spec.workers.configurations.pooling

↩ Parent

Property
Description
pgBouncer
object
Constraints: optional, updatable
SGShardedCluster.spec.workers.configurations.pooling.pgBouncer

↩ Parent

Property
Description
pgbouncer.ini
object

The pgbouncer.ini parameters that overwrite those specified in the referenced SGPoolingConfig.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.configurations.pooling.pgBouncer.pgbouncer.ini

↩ Parent

The pgbouncer.ini parameters that overwrite those specified in the referenced SGPoolingConfig.

Changing this field may require a restart.

Property
Description
databases
map[string]map[string]string

The pgbouncer.ini (Section [databases]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters.


Constraints: optional, updatable, may require restart
pgbouncer
map[string]string

The pgbouncer.ini (Section [pgbouncer]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters


Constraints: optional, updatable, may require restart
users
map[string]map[string]string

The pgbouncer.ini (Section [users]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.configurations.postgres

↩ Parent

Section for postgres configuration.

Property
Description
postgresql.conf
map[string]string

The postgresql.conf parameters that overwrite those specified in the referenced SGPostgresConfig.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.configurations.postgresExporter

↩ Parent

Section to configure the postgres_exporter component.

Property
Description
queries
object

Section to configure the postgres_exporter queries.yaml configuration.

The queries defined here will overwrite those created by the operator.

WARNING: Changing this may beak some of the functionality that depend on the query overwritten.


Constraints: optional, updatable

SGShardedCluster.spec.workers.managedSql

↩ Parent

This section allows to reference SQL scripts that will be applied to the cluster live.

Property
Description
continueOnSGScriptError
boolean
If true, when any entry of any SGScript fail will not prevent subsequent SGScript from being executed. By default is false.

Constraints: optional, updatable
scripts
[]object
A list of script references that will be executed in sequence.

Constraints: optional, updatable
SGShardedCluster.spec.workers.managedSql.scripts[index]

↩ Parent

A script reference. Each version of each entry of the script referenced will be executed exactly once following the sequence defined in the referenced script and skipping any script entry that have already been executed.

Property
Description
id
integer
The id is immutable and must be unique across all the SGScript entries. It is replaced by the operator and is used to identify the SGScript entry.

Constraints: optional, updatable
sgScript
string
A reference to an SGScript

Constraints: optional, updatable

SGShardedCluster.spec.workers.metadata

↩ Parent

Metadata information from workers cluster created resources.

Property
Description
annotations
object
Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
labels
object
Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
SGShardedCluster.spec.workers.metadata.annotations

↩ Parent

Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Property
Description
allResources
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
SGShardedCluster.spec.workers.metadata.labels

↩ Parent

Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Property
Description
allResources
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable

SGShardedCluster.spec.workers.overrides[index]

↩ Parent

Any worker can be overridden by this section.

Property
Description
autoscaling
object

This section allows configuring vertical Pod autoscaling for the SGCluster’s Pods.

Vertical Pod Autoscaling will use cpu and memory usage as the metric to control the upscale or downscale of the Pod requests and limits resources. Vertical Pod Autoscaling requires the Vertical Pod Autoscaler operator to be installed in the Kubernetes cluster.


Constraints: optional, updatable
configurations
object
Shards custom configurations.

Constraints: optional, updatable
index
integer

Identifier of the SGCluster worker to override (starting from 0).

The identifier is relative to the type of the entry. When type is QueryRouter it is the zero-based identifier of the query router (i.e. 0 selects the first query router) and not the Citus group identifier, that is offset by .spec.coordinator.queryRouterIndexOffset.

This field is mutually exclusive with indexes and one of the two must be set.


Constraints: optional, updatable
Minimum: 0
indexes
[]int or string

Identifiers of the SGCluster workers to override (starting from 0).

Each entry can be a single identifier (e.g. 3), a range specified by an initial and a final identifier (both included) separated by a dash character (e.g. 1-2 will override clusters with index 1 and 2) or all to specify all the identifiers. Type of the entry is IntOrString.

The identifiers are relative to the type of the entry, as described in field index.

This field is mutually exclusive with index and one of the two must be set.


Constraints: optional, updatable
instancesPerCluster
integer
Number of StackGres instances per worker’s StackGres cluster. Each instance contains one Postgres server. Out of all of the Postgres servers, one is elected as the primary, the rest remain as read-only replicas.

Constraints: optional, updatable
Minimum: 0
managedSql
object
This section allows to reference SQL scripts that will be applied to the cluster live.

Constraints: optional, updatable
metadata
object
Metadata information from workers cluster created resources.

Constraints: optional, updatable
pods
object
Cluster pod’s configuration.

Constraints: optional, updatable
replication
object

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.


Constraints: optional, updatable
sgInstanceProfile
string
Name of the SGInstanceProfile. A SGInstanceProfile defines CPU and memory limits. Must exist before creating a cluster. When no profile is set, a default (currently: 1 core, 2 GiB RAM) one is used.

Constraints: optional, updatable
type
string

Specifies the type of workers to override. Possible values are:

  • Worker: SGClusters that store the data of sharded tables. See also .spec.workers.
  • QueryRouter: SGClusters that do not store data but route read/write queries. See also .spec.coordinator.queryRouterClusters.

Defaults to Worker when not specified.

The fields that are not set in an entry of type Worker are inherited from .spec.workers, while those of an entry of type QueryRouter are inherited from .spec.coordinator, since query routers are generated from the coordinator section.


Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling

↩ Parent

This section allows configuring vertical Pod autoscaling for the SGCluster’s Pods.

Vertical Pod Autoscaling will use cpu and memory usage as the metric to control the upscale or downscale of the Pod requests and limits resources. Vertical Pod Autoscaling requires the Vertical Pod Autoscaler operator to be installed in the Kubernetes cluster.

Property
Description
horizontal
object
Section to configure horizontal Pod autoscaling aspects.

Constraints: optional, updatable
maxAllowed
object
Defines the higher bound for Pod resources of patroni, pgbouncer and envoy containers

Constraints: optional, updatable
minAllowed
object
Defines the lower bound for Pod resources of patroni, pgbouncer and envoy containers

Constraints: optional, updatable
mode
enum

Allows enabling or disabling any of horizontal and vertical Pod autoscaling.

Possible values are:

  • vertical: only vertical Pod autoscaling will be enabled (default)
  • none: all autoscaling will be disabled

Constraints: optional, updatable
Enum: vertical, none
Default: vertical
vertical
object
Section to configure vertical Pod autoscaling aspects.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.horizontal

↩ Parent

Section to configure horizontal Pod autoscaling aspects.

Property
Description
cooldownPeriod
integer
The period in seconds before the downscale of replica instances can be triggered.

Constraints: optional, updatable
Default: 300
pollingInterval
integer
The interval in seconds to check if the scaleup or scaledown have to be triggered.

Constraints: optional, updatable
Default: 30
replicasConnectionsUsageMetricType
string
The metric type for connections used metric. See https://keda.sh/docs/latest/concepts/scaling-deployments/#triggers

Constraints: optional, updatable
Default: AverageValue
replicasConnectionsUsageTarget
string
The target value for replicas connections used in order to trigger the upscale of replica instances.

Constraints: optional, updatable
Default: 0.8
SGShardedCluster.spec.workers.overrides[index].autoscaling.maxAllowed

↩ Parent

Defines the higher bound for Pod resources of patroni, pgbouncer and envoy containers

Property
Description
envoy
object
Defines the higher bound for Pod resources of envoy container

Constraints: optional, updatable
patroni
object
Defines the higher bound for Pod resources of patroni container

Constraints: optional, updatable
pgbouncer
object
Defines the higher bound for Pod resources of pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.maxAllowed.envoy

↩ Parent

Defines the higher bound for Pod resources of envoy container

Property
Description
cpu
string
The maximum allowed CPU for the envoy container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the envoy container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.maxAllowed.patroni

↩ Parent

Defines the higher bound for Pod resources of patroni container

Property
Description
cpu
string
The maximum allowed CPU for the patroni container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the patroni container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.maxAllowed.pgbouncer

↩ Parent

Defines the higher bound for Pod resources of pgbouncer container

Property
Description
cpu
string
The maximum allowed CPU for the pgbouncer container

Constraints: optional, updatable
memory
string
The maximum allowed memory for the pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.minAllowed

↩ Parent

Defines the lower bound for Pod resources of patroni, pgbouncer and envoy containers

Property
Description
envoy
object
Defines the lower bound for Pod resources of envoy container

Constraints: optional, updatable
patroni
object
Defines the lower bound for Pod resources of patroni container

Constraints: optional, updatable
pgbouncer
object
Defines the lower bound for Pod resources of pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.minAllowed.envoy

↩ Parent

Defines the lower bound for Pod resources of envoy container

Property
Description
cpu
string
The minimum allowed CPU for the envoy container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the envoy container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.minAllowed.patroni

↩ Parent

Defines the lower bound for Pod resources of patroni container

Property
Description
cpu
string
The minimum allowed CPU for the patroni container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the patroni container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.minAllowed.pgbouncer

↩ Parent

Defines the lower bound for Pod resources of pgbouncer container

Property
Description
cpu
string
The minimum allowed CPU for the pgbouncer container

Constraints: optional, updatable
memory
string
The minimum allowed memory for the pgbouncer container

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].autoscaling.vertical

↩ Parent

Section to configure vertical Pod autoscaling aspects.

Property
Description
recommender
string
Recommender responsible for generating recommendation for vertical Pod autoscaling. If not specified the default one will be used.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].configurations

↩ Parent

Shards custom configurations.

Property
Description
patroni
object

Allows specifying Patroni configuration that will extend the generated one

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
pooling
object
Constraints: optional, updatable
postgres
object
Section for postgres configuration.

Constraints: optional, updatable
postgresExporter
object
Section to configure the postgres_exporter component.

Constraints: optional, updatable
sgPoolingConfig
string

Name of the SGPoolingConfig used for this cluster. Each pod contains a sidecar with a connection pooler (currently: PgBouncer). The connection pooler is implemented as a sidecar.

If not set, a default configuration will be used. Disabling connection pooling altogether is possible if the disableConnectionPooling property of the pods object is set to true.


Constraints: optional, updatable
sgPostgresConfig
string
Name of the SGPostgresConfig used for the cluster. It must exist. When not set, a default Postgres config, for the major version selected, is used.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].configurations.patroni

↩ Parent

Allows specifying Patroni configuration that will extend the generated one

If sharding type is shardingsphere then this section is ignored.

Property
Description
connectUsingFqdn
boolean
Configure Patroni to use FQDN instead of the Pod’s assigned IPs to connect between Patroni and Postgres instances.

Constraints: optional, updatable
dynamicConfig
object

Allows specifying Patroni dynamic configuration that will overwrite the generated one. See https://patroni.readthedocs.io/en/latest/dynamic_configuration.html

The following configuration fields will be ignored:

  • synchronous_mode
  • synchronous_mode_strict
  • postgresql
  • standby_cluster

If sharding type is shardingsphere then this section is ignored.


Constraints: optional, updatable
initialConfig
object

Allows specifying Patroni configuration that will overwrite the generated one. See https://patroni.readthedocs.io/en/latest/yaml_configuration.html

The following configuration fields will be ignored:

  • name
  • namespace
  • log
  • bootstrap
  • citus
  • postgresql # with the exception of postgresql.callbacks, postgresql.pre_promote, postgresql.before_stop and postgresql.pg_ctl_timeout
  • restapi
  • ctl
  • watchdog
  • tags

If sharding type is shardingsphere then this section is ignored.

This field can only be set on creation.


Constraints: optional, immutable
startGateAnnotations
map[string]string

Annotations that must be set on the generated SGClusters before Patroni is started. See SGCluster.spec.configurations.patroni.startGateAnnotations.

If sharding type is citus the operator also adds the annotation required to start the query routers only once they have been registered by the coordinator.


Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].configurations.pooling

↩ Parent

Property
Description
pgBouncer
object
Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].configurations.pooling.pgBouncer

↩ Parent

Property
Description
pgbouncer.ini
object

The pgbouncer.ini parameters that overwrite those specified in the referenced SGPoolingConfig.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.overrides[index].configurations.pooling.pgBouncer.pgbouncer.ini

↩ Parent

The pgbouncer.ini parameters that overwrite those specified in the referenced SGPoolingConfig.

Changing this field may require a restart.

Property
Description
databases
map[string]map[string]string

The pgbouncer.ini (Section [databases]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters.


Constraints: optional, updatable, may require restart
pgbouncer
map[string]string

The pgbouncer.ini (Section [pgbouncer]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters


Constraints: optional, updatable, may require restart
users
map[string]map[string]string

The pgbouncer.ini (Section [users]) parameters the configuration contains, represented as an object where the keys are valid names for the pgbouncer.ini configuration file parameters.

Check pgbouncer configuration for more information about supported parameters.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.overrides[index].configurations.postgres

↩ Parent

Section for postgres configuration.

Property
Description
postgresql.conf
map[string]string

The postgresql.conf parameters that overwrite those specified in the referenced SGPostgresConfig.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.overrides[index].configurations.postgresExporter

↩ Parent

Section to configure the postgres_exporter component.

Property
Description
queries
object

Section to configure the postgres_exporter queries.yaml configuration.

The queries defined here will overwrite those created by the operator.

WARNING: Changing this may beak some of the functionality that depend on the query overwritten.


Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].managedSql

↩ Parent

This section allows to reference SQL scripts that will be applied to the cluster live.

Property
Description
continueOnSGScriptError
boolean
If true, when any entry of any SGScript fail will not prevent subsequent SGScript from being executed. By default is false.

Constraints: optional, updatable
scripts
[]object
A list of script references that will be executed in sequence.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].managedSql.scripts[index]

↩ Parent

A script reference. Each version of each entry of the script referenced will be executed exactly once following the sequence defined in the referenced script and skipping any script entry that have already been executed.

Property
Description
id
integer
The id is immutable and must be unique across all the SGScript entries. It is replaced by the operator and is used to identify the SGScript entry.

Constraints: optional, updatable
sgScript
string
A reference to an SGScript

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].metadata

↩ Parent

Metadata information from workers cluster created resources.

Property
Description
annotations
object
Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
labels
object
Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].metadata.annotations

↩ Parent

Custom Kubernetes annotations to be passed to resources created and managed by StackGres.

Property
Description
allResources
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes annotations.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].metadata.labels

↩ Parent

Custom Kubernetes labels to be passed to resources created and managed by StackGres.

Property
Description
allResources
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
clusterPods
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
primaryService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
replicasService
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
serviceAccount
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
services
map[string]string
Custom Kubernetes labels.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods

↩ Parent

Cluster pod’s configuration.

Property
Description
customContainers
[]object

A list of custom application containers that run within the workers cluster’s Pods.

The name used in this section will be prefixed with the string custom- so that when referencing them in the .spec.containers section of SGInstanceProfile the name used has to be prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customEnv
map[string][]object

A list of custom environment variables for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customEnvFrom
map[string][]object

A list of custom environment variables from source for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitContainers
[]object

A list of custom application init containers that run within the coordinator cluster’s Pods. The custom init containers will run following the defined sequence at the end of cluster’s Pods init containers.

The name used in this section will be prefixed with the string custom- so that when referencing them in the .spec.containers section of SGInstanceProfile the name used has to be prepended with the same prefix.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitEnv
map[string][]object

A list of custom environment variables for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitEnvFrom
map[string][]object

A list of custom environment variables from source for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customInitVolumeMounts
map[string][]object

A list of custom volume mounts for the specified init container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customVolumeMounts
map[string][]object

A list of custom volume mounts for the specified container.

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core


Constraints: optional, updatable, may require restart
customVolumes
[]object

A list of custom volumes that may be used along with any container defined in customInitContainers or customContainers sections for the workers.

The name used in this section will be prefixed with the string custom- so that when referencing them in the customInitContainers or customContainers sections the name used has to be prepended with the same prefix.

Only the following volume types are allowed: configMap, downwardAPI, emptyDir, gitRepo, glusterfs, hostPath, nfs, projected and secret

Changing this field may require a restart.

See: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#volume-v1-core


Constraints: optional, updatable, may require restart
disableConnectionPooling
boolean

If set to true, avoids creating a connection pooling (using PgBouncer) sidecar.

If sharding type is citus and .spec.configurations.citus.connectToPooler is true (the default) this field is ignored.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
disableEnvoy
boolean

If set to true, avoids creating the envoy sidecar. This sidecar is used as the endge proxy for the cluster’s Pods providing extra metrics to the monitoring layer.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: true
disableMetricsExporter
boolean
Deprecated use .spec.configurations.observability.disableMetrics instead.

Constraints: optional, updatable
Default: false
disablePostgresUtil
boolean

If set to true, avoids creating the postgres-util sidecar. This sidecar contains usual Postgres administration utilities that are not present in the main (patroni) container, like psql. Only disable if you know what you are doing.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
Default: false
dnsConfig
object
PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

Constraints: optional, updatable
dnsPolicy
string
Set DNS policy for the pod. Defaults to “ClusterFirst”. Valid values are ‘ClusterFirstWithHostNet’, ‘ClusterFirst’, ‘Default’ or ‘None’. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to ‘ClusterFirstWithHostNet’.

Constraints: optional, updatable
hostNetwork
boolean
Host networking requested for this pod. Use the host’s network namespace. When using HostNetwork you should specify ports so the scheduler is aware. When hostNetwork is true, specified hostPort fields in port definitions must match containerPort, and unspecified hostPort fields in port definitions are defaulted to match containerPort. Default to false.

Constraints: optional, updatable
livenessProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
managementPolicy
string
managementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is OrderedReady, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is Parallel which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.

Constraints: optional, updatable
persistentVolume
object
Pod’s persistent volume configuration.

Constraints: optional, updatable
readinessProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
resources
object
Pod custom resources configuration.

Constraints: optional, updatable
scheduling
object

Pod custom scheduling, affinity and topology spread constratins configuration.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
setHostnameAsFQDN
boolean
If true the pod’s hostname will be configured as the pod’s FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false.

Constraints: optional, updatable
startupProbe
object
Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Constraints: optional, updatable
statefulSetServiceName
string
serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where “pod-specific-string” is managed by the StatefulSet controller.

Constraints: optional, updatable
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.

Constraints: optional, updatable
Format: int64
updateStrategy
object

This section indicates the strategy that the SGCluster controller will use to perform updates.

It includes any additional parameters necessary to perform the update for the indicated strategy.

When a change only require the Postgres instance to be restarted, and not the Pod to be re-created, the Postgres instances of the replicas are restarted first and a switchover to the ready replica with the least lag is then performed, so that the primary is demoted instead of being restarted.

The Postgres instance of the primary is restarted in place, without performing any switchover, only when any of the parameters max_connections, max_prepared_transactions, max_locks_per_transaction, max_wal_senders or max_worker_processes is decreased (a hot standby require those parameters to be set to a value greater than or equal to the value set on the primary, see https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-ADMIN) or when no replica is available to switchover to. Patroni only reports the parameters that are pending a change since version 4, when they are not reported a switchover is performed.


Constraints: optional, updatable
Default: {"type":"OnlyDbOps"}
SGShardedCluster.spec.workers.overrides[index].pods.dnsConfig

↩ Parent

PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.

Property
Description
nameservers
[]string
A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.

Constraints: optional, updatable
options
[]object
A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.

Constraints: optional, updatable
searches
[]string
A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.dnsConfig.options[index]

↩ Parent

PodDNSConfigOption defines DNS resolver options of a pod.

Property
Description
name
string
Name is this DNS resolver option’s name. Required.

Constraints: optional, updatable
value
string
Value is this DNS resolver option’s value.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.livenessProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.workers.overrides[index].pods.persistentVolume

↩ Parent

Pod’s persistent volume configuration.

Property
Description
size
string
Size of the PersistentVolume set for each instance of the cluster. This size is specified either in Mebibytes, Gibibytes or Tebibytes (multiples of 2^20, 2^30 or 2^40, respectively).

Constraints: required, updatable
fsGroupChangePolicy
string
fsGroupChangePolicy defines behavior of changing ownership and permission of the volume before being exposed inside Pod. This field will only apply to volume types which support fsGroup based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are “OnRootMismatch” and “Always”. If not specified, “Always” is used. Note that this field cannot be set when spec.os.name is windows.

Constraints: optional, updatable
ioLimits
object

This section allows to define per-volume I/O limits for nodes using cgroup v2 io.max features.

NOTE: This is an alpha feature.

When multiple PostgreSQL clusters share the same local storage device on a Kubernetes node, a single cluster running a heavy workload (for example large COPY, aggressive VACUUM, or an unoptimized query) can saturate the device’s I/O bandwidth and degrade performance for every other cluster on that node. StackGres provides this mechanism to prevent this class of noisy-neighbor problem. The mechanism operates at the cgroup + block-device layer, not at the PVC abstraction. Since each pod has its own cgroup, limits are enforced independently across pods even when they share the same physical device — this is the core of the noisy-neighbor protection. However, if multiple volumes within the same pod share the same backing device, their limits target a single entry in that pod’s cgroup and cannot be enforced independently of each other.

This feature works on top of existing CSI drivers such as TopoLVM or OpenEBS LocalPV. The primary target is on-premises deployments where multiple StackGres clusters share local NVMe storage on the same node.

IMPORTANT: Setting any of the value above will require to create an init container named setup-io-limits in each SGCluster’s Pods running as root with only the CHOWN cabability set. Also both the setup-io-limits init container and the cluster-controller container will require to mount the host path /sys/fs/cgroup in order to be able to set owner of and write to the io.max file that will allows to set the io limits. For this reason this feature must be enabled globally by the operator administrator by adding the io-limits feature gate under .spec.featureGates of the SGConfig. Setting any of the value above without the io-limits feature gate enabled will be rejected.


Constraints: optional, updatable
storageClass
string
Name of an existing StorageClass in the Kubernetes cluster, used to create the PersistentVolumes for the instances of the cluster.

Constraints: optional, updatable
volumeAttributesClassName
string

Name of an existing StorageClass in the Kubernetes cluster, used to create the PersistentVolumes for the instances of the cluster.

See https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/


Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.persistentVolume.ioLimits

↩ Parent

This section allows to define per-volume I/O limits for nodes using cgroup v2 io.max features.

NOTE: This is an alpha feature.

When multiple PostgreSQL clusters share the same local storage device on a Kubernetes node, a single cluster running a heavy workload (for example large COPY, aggressive VACUUM, or an unoptimized query) can saturate the device’s I/O bandwidth and degrade performance for every other cluster on that node. StackGres provides this mechanism to prevent this class of noisy-neighbor problem. The mechanism operates at the cgroup + block-device layer, not at the PVC abstraction. Since each pod has its own cgroup, limits are enforced independently across pods even when they share the same physical device — this is the core of the noisy-neighbor protection. However, if multiple volumes within the same pod share the same backing device, their limits target a single entry in that pod’s cgroup and cannot be enforced independently of each other.

This feature works on top of existing CSI drivers such as TopoLVM or OpenEBS LocalPV. The primary target is on-premises deployments where multiple StackGres clusters share local NVMe storage on the same node.

IMPORTANT: Setting any of the value above will require to create an init container named setup-io-limits in each SGCluster’s Pods running as root with only the CHOWN cabability set. Also both the setup-io-limits init container and the cluster-controller container will require to mount the host path /sys/fs/cgroup in order to be able to set owner of and write to the io.max file that will allows to set the io limits. For this reason this feature must be enabled globally by the operator administrator by adding the io-limits feature gate under .spec.featureGates of the SGConfig. Setting any of the value above without the io-limits feature gate enabled will be rejected.

Property
Description
readIops
integer
Max read IO operations per second. Leave empty to remove this limit.

Constraints: optional, updatable
readMiBps
integer
Max read MiB per second. Leave empty to remove this limit.

Constraints: optional, updatable
writeIops
integer
Max write IO operations per second. Leave empty to remove this limit.

Constraints: optional, updatable
writeMiBps
integer
Max write MiB per second. Leave empty to remove this limit.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.readinessProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.workers.overrides[index].pods.resources

↩ Parent

Pod custom resources configuration.

Property
Description
containers
map[string]object
Resources configuration to be merged with the specified container on top of SGInstanceProfile referenced by sgInstanceProfile field if specified.

Constraints: optional, updatable
disableResourcesRequestsSplitFromTotal
boolean

When set to true the resources requests values in fields SGInstanceProfile.spec.requests.cpu and SGInstanceProfile.spec.requests.memory will represent the resources requests of the patroni container and the total resources requests calculated by adding the resources requests of all the containers (including the patroni container).

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
enableClusterLimitsRequirements
boolean

When enabled resource limits for containers other than the patroni container will be set just like for patroni container as specified in the SGInstanceProfile.

Changing this field may require a restart.


Constraints: optional, updatable, may require restart
failWhenTotalIsHigher
boolean

When set to true the reconciliation of the cluster will fail if disableResourcesRequestsSplitFromTotal is not set or set to false and the sum of the CPU or memory of all the containers except patroni is equals or higher than the total specified in SGInstanceProfile.spec.requests.cpu or SGInstanceProfile.spec.requests.memory.

When false (the default) and disableResourcesRequestsSplitFromTotal is not set or set to false and the sum of the CPU or memory of all the containers except patroni is equals or higher than the total specified in SGInstanceProfile.spec.requests.cpu or SGInstanceProfile.spec.requests.memory then the patroni container resources will be set to 0.


Constraints: optional, updatable
initContainers
map[string]object
Resources configuration to be merged with the specified init container on top of SGInstanceProfile referenced by sgInstanceProfile field if specified.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.resources.containers[key]

↩ Parent

ResourceRequirements describes the compute resource requirements.

Property
Description
claims
[]object

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This field depends on the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.


Constraints: optional, updatable
limits
map[string]string
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
requests
map[string]string
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.resources.containers[key].claims[index]

↩ Parent

ResourceClaim references one entry in PodSpec.ResourceClaims.

Property
Description
name
string
Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Constraints: required, updatable
request
string
Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.resources.initContainers[key]

↩ Parent

ResourceRequirements describes the compute resource requirements.

Property
Description
claims
[]object

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This field depends on the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.


Constraints: optional, updatable
limits
map[string]string
Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
requests
map[string]string
Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.resources.initContainers[key].claims[index]

↩ Parent

ResourceClaim references one entry in PodSpec.ResourceClaims.

Property
Description
name
string
Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Constraints: required, updatable
request
string
Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].pods.scheduling

↩ Parent

Pod custom scheduling, affinity and topology spread constratins configuration.

Changing this field may require a restart.

Property
Description
backup
object
Backup Pod custom scheduling and affinity configuration.

Constraints: optional, updatable, may require restart
nodeAffinity
object

Node affinity is a group of node affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#nodeaffinity-v1-core


Constraints: optional, updatable, may require restart
nodeSelector
map[string]string
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

Constraints: optional, updatable, may require restart
podAffinity
object

Pod affinity is a group of inter pod affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podaffinity-v1-core


Constraints: optional, updatable, may require restart
podAntiAffinity
object

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podantiaffinity-v1-core


Constraints: optional, updatable, may require restart
preemptionPolicy
string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

Constraints: optional, updatable, may require restart
priorityClassName
string
If specified, indicates the pod’s priority. “system-node-critical” and “system-cluster-critical” are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

Constraints: optional, updatable, may require restart
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the “legacy” RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

Constraints: optional, updatable, may require restart
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

Constraints: optional, updatable, may require restart
tolerations
[]object

Constraints: optional, updatable, may require restart
topologySpreadConstraints
[]object

TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#topologyspreadconstraint-v1-core


Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.overrides[index].pods.scheduling.backup

↩ Parent

Backup Pod custom scheduling and affinity configuration.

Property
Description
nodeAffinity
object

Node affinity is a group of node affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#nodeaffinity-v1-core


Constraints: optional, updatable, may require restart
nodeSelector
map[string]string
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

Constraints: optional, updatable, may require restart
podAffinity
object

Pod affinity is a group of inter pod affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podaffinity-v1-core


Constraints: optional, updatable, may require restart
podAntiAffinity
object

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#podantiaffinity-v1-core


Constraints: optional, updatable, may require restart
preemptionPolicy
string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

Constraints: optional, updatable, may require restart
priorityClassName
string
If specified, indicates the pod’s priority. “system-node-critical” and “system-cluster-critical” are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

Constraints: optional, updatable, may require restart
runtimeClassName
string
RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the “legacy” RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

Constraints: optional, updatable, may require restart
schedulerName
string
If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

Constraints: optional, updatable, may require restart
tolerations
[]object

Constraints: optional, updatable, may require restart
SGShardedCluster.spec.workers.overrides[index].pods.startupProbe

↩ Parent

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

Property
Description
failureThreshold
integer
Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

Constraints: optional, updatable
Format: int32
initialDelaySeconds
integer
Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
periodSeconds
integer
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

Constraints: optional, updatable
Format: int32
successThreshold
integer
Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.

Constraints: optional, updatable
Format: int32
terminationGracePeriodSeconds
integer
Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod’s terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.

Constraints: optional, updatable
Format: int64
timeoutSeconds
integer
Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

Constraints: optional, updatable
Format: int32
SGShardedCluster.spec.workers.overrides[index].pods.updateStrategy

↩ Parent

This section indicates the strategy that the SGCluster controller will use to perform updates.

It includes any additional parameters necessary to perform the update for the indicated strategy.

When a change only require the Postgres instance to be restarted, and not the Pod to be re-created, the Postgres instances of the replicas are restarted first and a switchover to the ready replica with the least lag is then performed, so that the primary is demoted instead of being restarted.

The Postgres instance of the primary is restarted in place, without performing any switchover, only when any of the parameters max_connections, max_prepared_transactions, max_locks_per_transaction, max_wal_senders or max_worker_processes is decreased (a hot standby require those parameters to be set to a value greater than or equal to the value set on the primary, see https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-ADMIN) or when no replica is available to switchover to. Patroni only reports the parameters that are pending a change since version 4, when they are not reported a switchover is performed.

Property
Description
method
string

Indicates the method of the update strategy. Default is InPlace.

  • InPlace: update will be performed on the existing instances.
  • ReducedImpact: before an update is performed on the existing instances a new instance if created to reduce the impact on read-only replicas.

Constraints: optional, updatable
Default: InPlace
restartDelay
string
An ISO 8601 duration in the format PnDTnHnMn.nS indicating the delay that has to pass between the restart of a Postgres instance performed by the SGCluster controller and the next one. Default is PT5M.

Constraints: optional, updatable
Default: PT5M
schedule
[]object
Indicates a list of windows of time where an update can be performed.

Constraints: optional, updatable
type
string

Indicates the type of the update strategy. Default is OnlyDbOps.

  • Always: update will be performed as soon as possible.
  • Schedule: update will be performed as specified in the schedule section where you can configure windows of time where the update can be performed.
  • OnlyDbOps: update will be performed only when an SGDbOps of type restart, securityUpgrade or minorVersionUpgrade targeting the SGCluster is started.
  • Never: update will never be performed (even if annotation stackgres.io/rollout is present with a different value) unless the Pods are deleted manually.

Alternatively to this configuration you may specify the following annotations:

  • stackgres.io/rollout=always: Same behavior as Always.
  • stackgres.io/rollout=schedule: Same behavior as Schedule.
  • stackgres.io/rollout=never: Same behavior as Never (even if type has a different value).

Unless Never (or the annotation stackgres.io/rollout=never) is specified an SGDbOps of type restart, securityUpgrade or minorVersionUpgrade targeting the SGCluster will trigger an update of the Pods.

The update of the Pods will be performed only if Pods are pending any change. Changes in the configuration may not require restarting the Pod and, in such cases, only the Postgres instance will be restarted.


Constraints: optional, updatable
Default: OnlyDbOps
SGShardedCluster.spec.workers.overrides[index].pods.updateStrategy.schedule[index]

↩ Parent

Indicates a window of time where an update can be performed.

Property
Description
cron
string
A UNIX cron expression indicating the start of the window of time where the update can be performed.

Constraints: optional, updatable
duration
string
An ISO 8601 duration in the format PnDTnHnMn.nS, that, together with the cron expression, indicates the end of the window of time where the update can be performed.

Constraints: optional, updatable
SGShardedCluster.spec.workers.overrides[index].replication

↩ Parent

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.

Property
Description
initialization
object
Allows specifying how the replicas are initialized.

Constraints: optional, updatable
mode
string

The replication mode applied to the whole cluster. Possible values are:

  • async (default)
  • sync
  • strict-sync
  • sync-all
  • strict-sync-all

async

When in asynchronous mode the cluster is allowed to lose some committed transactions. When the primary server fails or becomes unavailable for any other reason a sufficiently healthy standby will automatically be promoted to primary. Any transactions that have not been replicated to that standby remain in a “forked timeline” on the primary, and are effectively unrecoverable (the data is still there, but recovering it requires a manual recovery effort by data recovery specialists).

sync

When in synchronous mode a standby will not be promoted unless it is certain that the standby contains all transactions that may have returned a successful commit status to client (clients can change the behavior per transaction using PostgreSQL’s synchronous_commit setting. Transactions with synchronous_commit values of off and local may be lost on fail over, but will not be blocked by replication delays). This means that the system may be unavailable for writes even though some servers are available. System administrators can still use manual failover commands to promote a standby even if it results in transaction loss.

Synchronous mode does not guarantee multi node durability of commits under all circumstances. When no suitable standby is available, primary server will still accept writes, but does not guarantee their replication. When the primary fails in this mode no standby will be promoted. When the host that used to be the primary comes back it will get promoted automatically, unless system administrator performed a manual failover. This behavior makes synchronous mode usable with 2 node clusters.

When synchronous mode is used and a standby crashes, commits will block until the primary is switched to standalone mode. Manually shutting down or restarting a standby will not cause a commit service interruption. Standby will signal the primary to release itself from synchronous standby duties before PostgreSQL shutdown is initiated.

strict-sync

When it is absolutely necessary to guarantee that each write is stored durably on at least two nodes, use the strict synchronous mode. This mode prevents synchronous replication to be switched off on the primary when no synchronous standby candidates are available. As a downside, the primary will not be available for writes (unless the Postgres transaction explicitly turns off synchronous_mode parameter), blocking all client write requests until at least one synchronous replica comes up.

Note: Because of the way synchronous replication is implemented in PostgreSQL it is still possible to lose transactions even when using strict synchronous mode. If the PostgreSQL backend is cancelled while waiting to acknowledge replication (as a result of packet cancellation due to client timeout or backend failure) transaction changes become visible for other backends. Such changes are not yet replicated and may be lost in case of standby promotion.

sync-all

The same as sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.

strict-sync-all

The same as strict-sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.


Constraints: optional, updatable
Default: async
syncInstances
integer
Number of synchronous standby instances. Must be less than the total number of instances. It is set to 1 by default. Only setteable if mode is sync or strict-sync.

Constraints: optional, updatable
Minimum: 1
SGShardedCluster.spec.workers.overrides[index].replication.initialization

↩ Parent

Allows specifying how the replicas are initialized.

Property
Description
backupNewerThan
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies how old an SGBackup have to be in order to be seleceted to initialize a replica.

When FromExistingBackup mode is set this field restrict the selection of SGBackup to be used for recovery newer than the specified value.

When FromNewlyCreatedBackup mode is set this field skip the creation SGBackup to be used for recovery if one newer than the specified value exists.


Constraints: optional, updatable
backupRestorePerformance
object
Configuration that affects the backup network and disk usage performance during recovery.

Constraints: optional, updatable
mode
string

Allows specifying how the replicas are initialized.

Possible values are:

  • FromPrimary: When this mode is used replicas will be always created from the primary using pg_basebackup.
  • FromReplica: When this mode is used replicas will be created from another existing replica using pg_basebackup. Fallsback to FromPrimary if there’s no replica or it fails.
  • FromExistingBackup: When this mode is used replicas will be created from an existing SGBackup. If backupNewerThan is set the SGBackup must be newer than its value. When this mode fails to restore an SGBackup it will try with a previous one (if exists). Fallsback to FromReplica if there’s no backup left or it fails.
  • FromNewlyCreatedBackup: When this mode is used replicas will be created from a newly created SGBackup. Fallsback to FromExistingBackup if backupNewerThan is set and exists a recent backup newer than its value or it fails.

Constraints: optional, updatable
Default: FromExistingBackup
SGShardedCluster.spec.workers.overrides[index].replication.initialization.backupRestorePerformance

↩ Parent

Configuration that affects the backup network and disk usage performance during recovery.

Property
Description
downloadConcurrency
integer
Backup storage may use several concurrent streams to read the data. This parameter configures the number of parallel streams to use. By default, it’s set to the minimum between the number of file to read and 10.

Constraints: optional, updatable
Minimum: 1
maxDiskBandwidth
integer
Maximum disk read I/O when performing a backup. In bytes (per second).

Constraints: optional, updatable
maxNetworkBandwidth
integer
Maximum storage upload bandwidth used when storing a backup. In bytes (per second).

Constraints: optional, updatable

SGShardedCluster.spec.workers.replication

↩ Parent

This section allows to configure the global Postgres replication mode.

The main replication group is implicit and contains the total number of instances less the sum of all instances in other replication groups.

The total number of instances is always specified by .spec.instances.

Property
Description
initialization
object
Allows specifying how the replicas are initialized.

Constraints: optional, updatable
mode
string

The replication mode applied to the whole cluster. Possible values are:

  • async (default)
  • sync
  • strict-sync
  • sync-all
  • strict-sync-all

async

When in asynchronous mode the cluster is allowed to lose some committed transactions. When the primary server fails or becomes unavailable for any other reason a sufficiently healthy standby will automatically be promoted to primary. Any transactions that have not been replicated to that standby remain in a “forked timeline” on the primary, and are effectively unrecoverable (the data is still there, but recovering it requires a manual recovery effort by data recovery specialists).

sync

When in synchronous mode a standby will not be promoted unless it is certain that the standby contains all transactions that may have returned a successful commit status to client (clients can change the behavior per transaction using PostgreSQL’s synchronous_commit setting. Transactions with synchronous_commit values of off and local may be lost on fail over, but will not be blocked by replication delays). This means that the system may be unavailable for writes even though some servers are available. System administrators can still use manual failover commands to promote a standby even if it results in transaction loss.

Synchronous mode does not guarantee multi node durability of commits under all circumstances. When no suitable standby is available, primary server will still accept writes, but does not guarantee their replication. When the primary fails in this mode no standby will be promoted. When the host that used to be the primary comes back it will get promoted automatically, unless system administrator performed a manual failover. This behavior makes synchronous mode usable with 2 node clusters.

When synchronous mode is used and a standby crashes, commits will block until the primary is switched to standalone mode. Manually shutting down or restarting a standby will not cause a commit service interruption. Standby will signal the primary to release itself from synchronous standby duties before PostgreSQL shutdown is initiated.

strict-sync

When it is absolutely necessary to guarantee that each write is stored durably on at least two nodes, use the strict synchronous mode. This mode prevents synchronous replication to be switched off on the primary when no synchronous standby candidates are available. As a downside, the primary will not be available for writes (unless the Postgres transaction explicitly turns off synchronous_mode parameter), blocking all client write requests until at least one synchronous replica comes up.

Note: Because of the way synchronous replication is implemented in PostgreSQL it is still possible to lose transactions even when using strict synchronous mode. If the PostgreSQL backend is cancelled while waiting to acknowledge replication (as a result of packet cancellation due to client timeout or backend failure) transaction changes become visible for other backends. Such changes are not yet replicated and may be lost in case of standby promotion.

sync-all

The same as sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.

strict-sync-all

The same as strict-sync but syncInstances is ignored and the number of synchronous instances is equals to the total number of instances less one.


Constraints: optional, updatable
Default: async
syncInstances
integer
Number of synchronous standby instances. Must be less than the total number of instances. It is set to 1 by default. Only setteable if mode is sync or strict-sync.

Constraints: optional, updatable
Minimum: 1
SGShardedCluster.spec.workers.replication.initialization

↩ Parent

Allows specifying how the replicas are initialized.

Property
Description
backupNewerThan
string

An ISO 8601 duration in the format PnDTnHnMn.nS, that specifies how old an SGBackup have to be in order to be seleceted to initialize a replica.

When FromExistingBackup mode is set this field restrict the selection of SGBackup to be used for recovery newer than the specified value.

When FromNewlyCreatedBackup mode is set this field skip the creation SGBackup to be used for recovery if one newer than the specified value exists.


Constraints: optional, updatable
backupRestorePerformance
object
Configuration that affects the backup network and disk usage performance during recovery.

Constraints: optional, updatable
mode
string

Allows specifying how the replicas are initialized.

Possible values are:

  • FromPrimary: When this mode is used replicas will be always created from the primary using pg_basebackup.
  • FromReplica: When this mode is used replicas will be created from another existing replica using pg_basebackup. Fallsback to FromPrimary if there’s no replica or it fails.
  • FromExistingBackup: When this mode is used replicas will be created from an existing SGBackup. If backupNewerThan is set the SGBackup must be newer than its value. When this mode fails to restore an SGBackup it will try with a previous one (if exists). Fallsback to FromReplica if there’s no backup left or it fails.
  • FromNewlyCreatedBackup: When this mode is used replicas will be created from a newly created SGBackup. Fallsback to FromExistingBackup if backupNewerThan is set and exists a recent backup newer than its value or it fails.

Constraints: optional, updatable
Default: FromExistingBackup
SGShardedCluster.spec.workers.replication.initialization.backupRestorePerformance

↩ Parent

Configuration that affects the backup network and disk usage performance during recovery.

Property
Description
downloadConcurrency
integer
Backup storage may use several concurrent streams to read the data. This parameter configures the number of parallel streams to use. By default, it’s set to the minimum between the number of file to read and 10.

Constraints: optional, updatable
Minimum: 1
maxDiskBandwidth
integer
Maximum disk read I/O when performing a backup. In bytes (per second).

Constraints: optional, updatable
maxNetworkBandwidth
integer
Maximum storage upload bandwidth used when storing a backup. In bytes (per second).

Constraints: optional, updatable

SGShardedCluster.status

↩ Parent

Current status of a StackGres sharded cluster.

Property
Description
binding
object

This section follow the schema specified in Service Binding spec for provisioned service.

For more information see https://servicebinding.io/spec/core/1.0.0/


Constraints: optional, updatable
buildVersion
string
The Postgres build version used to generate the SGShardedCluster’s SGClusters

Constraints: optional, updatable
clusterStatuses
[]object
The list of cluster statuses.

Constraints: optional, updatable
conditions
[]object
Constraints: optional, updatable
dbOps
object
Used by some SGShardedDbOps to indicate the operation configuration and status to the operator.

Constraints: optional, updatable
extensions
[]object

The list of Postgres extensions to install.

This section is filled by the operator.


Constraints: optional, updatable
postgresVersion
string
The Postgres version used to generate the SGShardedCluster’s SGClusters

Constraints: optional, updatable
sgBackups
[]string
The list of SGBackups that compose the SGShardedBackup used to restore the sharded cluster.

Constraints: optional, updatable
toInstallPostgresExtensions
[]object

Deprecated replaced by extensions.

The list of Postgres extensions to install


Constraints: optional, updatable

SGShardedCluster.status.binding

↩ Parent

This section follow the schema specified in Service Binding spec for provisioned service.

For more information see https://servicebinding.io/spec/core/1.0.0/

Property
Description
name
string
The name of the Secret as specified in Service Binding spec for provisioned service.

Constraints: optional, updatable

SGShardedCluster.status.clusterStatuses[index]

↩ Parent

Property
Description
name
string
The name of the cluster.

Constraints: required, updatable
pendingRestart
boolean
Indicates if the cluster requires restart

Constraints: optional, updatable

SGShardedCluster.status.conditions[index]

↩ Parent

Property
Description
lastTransitionTime
string
Last time the condition transitioned from one status to another.

Constraints: optional, updatable
message
string
A human readable message indicating details about the transition.

Constraints: optional, updatable
observedGeneration
integer
The .metadata.generation the condition was computed against.

Constraints: optional, updatable
Format: int64
reason
string
The reason for the condition’s last transition.

Constraints: optional, updatable
status
string
Status of the condition, one of True, False, Unknown.

Constraints: optional, updatable
type
string
Type of deployment condition.

Constraints: optional, updatable

SGShardedCluster.status.dbOps

↩ Parent

Used by some SGShardedDbOps to indicate the operation configuration and status to the operator.

Property
Description
majorVersionUpgrade
object
The major version upgrade configuration and status

Constraints: optional, updatable
minorVersionUpgrade
object
The minor version upgrade configuration and status

Constraints: optional, updatable

SGShardedCluster.status.dbOps.majorVersionUpgrade

↩ Parent

The major version upgrade configuration and status

Property
Description
sgDbOps
[]string

The list of SGDbOps created by the SGShardedDbOps to perform the major version upgrade.

The entries follow the same ordering convention as SGShardedBackup.status.sgBackups: the first entry targets the coordinator, followed by the workers and then the query routers.

While this section is present the operator stops reconciling the child SGClusters so that the SGDbOps are in full control of the major version upgrade of each SGCluster.


Constraints: optional, updatable
sourcePostgresVersion
string
The source PostgreSQL version

Constraints: optional, updatable
sourceSgPostgresConfig
string
The SGPostgresConfig used before the major version upgrade

Constraints: optional, updatable
targetPostgresVersion
string
The target PostgreSQL version

Constraints: optional, updatable

SGShardedCluster.status.dbOps.minorVersionUpgrade

↩ Parent

The minor version upgrade configuration and status

Property
Description
sourcePostgresVersion
string
Postgres version that is currently running on the cluster

Constraints: optional, updatable
targetPostgresVersion
string
The desired Postgres version for the cluster

Constraints: optional, updatable

SGShardedCluster.status.extensions[index]

↩ Parent

Property
Description
name
string
The name of the extension to install.

Constraints: required, updatable
postgresVersion
string
The postgres major version of the extension to install.

Constraints: required, updatable
publisher
string
The id of the publisher of the extension to install.

Constraints: required, updatable
repository
string
The repository base URL from where the extension will be installed from.

Constraints: required, updatable
version
string
The version of the extension to install.

Constraints: required, updatable
build
string
The build version of the extension to install.

Constraints: optional, updatable
extraMounts
[]string
The extra mounts of the extension to install.

Constraints: optional, updatable

SGShardedCluster.status.toInstallPostgresExtensions[index]

↩ Parent

Property
Description
name
string
The name of the extension to install.

Constraints: required, updatable
postgresVersion
string
The postgres major version of the extension to install.

Constraints: required, updatable
publisher
string
The id of the publisher of the extension to install.

Constraints: required, updatable
repository
string
The repository base URL from where the extension will be installed from.

Constraints: required, updatable
version
string
The version of the extension to install.

Constraints: required, updatable
build
string
The build version of the extension to install.

Constraints: optional, updatable
extraMounts
[]string
The extra mounts of the extension to install.

Constraints: optional, updatable