Load Scheduling for PostgreSQL
Introduction
This policy detects traffic overloads and connection build-up on PostgreSQL by checking the real-time percentage of PostgreSQL connections against the maximum number of connections.
All the PostgreSQL related metrics are collected by the PostgreSQL OpenTelemetry Collector so if the system under observation requires using different metrics for the overload confirmation, the list of available metrics can be used to configure the policy.
An AIAD controller calculates a proportional response to limit the accepted
token rate. The token rate is reduced by an additive factor when the service is
overloaded, and increased by an additive factor while the service is no longer
overloaded. The following PromQL query (with appropriate filters) is used as
SIGNAL
for the load scheduler:
(sum(postgresql_backends) / sum(postgresql_connection_max)) * 100
See reference for the
AIADLoadScheduler
component that is used within this blueprint.
Configuration
Blueprint name: load-scheduling/postgresql
Parameters
policy
Parameter | policy.components |
Description | List of additional circuit components. |
Type | Array of Object (aperture.spec.v1.Component) |
Default Value | Expand
|
Parameter | policy.policy_name |
Description | Name of the policy. |
Type | string |
Default Value | __REQUIRED_FIELD__ |
Parameter | policy.resources |
Description | Additional resources. |
Type | Object (aperture.spec.v1.Resources) |
Default Value | Expand
|
Parameter | policy.connections_used_threshold |
Description | Threshold of percentage connections used out of postgresql_connection_max that which point to start throttling traffic. |
Type | Number (double) |
Default Value | __REQUIRED_FIELD__ |
Parameter | policy.postgresql |
Description | Configuration for PostgreSQL OpenTelemetry receiver. Refer https://docs.fluxninja.com/integrations/metrics/postgresql for more information. |
Type | Object (postgresql) |
Default Value | Expand
|
policy.load_scheduling_core
Parameter | policy.load_scheduling_core.dry_run |
Description | Default configuration for setting dry run mode on Load Scheduler. In dry run mode, the Load Scheduler acts as a passthrough and does not throttle flows. This config can be updated at runtime without restarting the policy. |
Type | Boolean |
Default Value | false |
Parameter | policy.load_scheduling_core.kubelet_overload_confirmations |
Description | Overload confirmation signals from kubelet. |
Type | Object (kubelet_overload_confirmations) |
Default Value | Expand
|
Parameter | policy.load_scheduling_core.overload_confirmations |
Description | List of overload confirmation criteria. Load scheduler can throttle flows when all of the specified overload confirmation criteria are met. |
Type | Array of Object (overload_confirmation) |
Default Value | Expand
|
Parameter | policy.load_scheduling_core.aiad_load_scheduler |
Description | Parameters for AIMD throttling strategy. |
Type | Object (aperture.spec.v1.AIADLoadSchedulerParameters) |
Default Value | Expand
|
Schemas
driver_criteria
Parameter | enabled |
Description | Enables the driver. |
Type | Boolean |
Default Value | __REQUIRED_FIELD__ |
Parameter | threshold |
Description | Threshold for the driver. |
Type | Number (double) |
Default Value | __REQUIRED_FIELD__ |
overload_confirmation_driver
Parameter | pod_cpu |
Description | The driver for using CPU usage as overload confirmation. |
Type | Object (driver_criteria) |
Default Value | Expand
|
Parameter | pod_memory |
Description | The driver for using memory usage as overload confirmation. |
Type | Object (driver_criteria) |
Default Value | Expand
|
kubelet_overload_confirmations
Parameter | criteria |
Description | Criteria for overload confirmation. |
Type | Object (overload_confirmation_driver) |
Default Value | __REQUIRED_FIELD__ |
Parameter | infra_context |
Description | Kubernetes selector for scraping metrics. |
Type | Object (aperture.spec.v1.KubernetesObjectSelector) |
Default Value | __REQUIRED_FIELD__ |
overload_confirmation
Parameter | operator |
Description | The operator for the overload confirmation criteria. oneof: `gt | lt | gte | lte | eq | neq` |
Type | string |
Default Value |
|
Parameter | query_string |
Description | The Prometheus query to be run. Must return a scalar or a vector with a single element. |
Type | string |
Default Value |
|
Parameter | threshold |
Description | The threshold for the overload confirmation criteria. |
Type | Number (double) |
Default Value |
|
postgresql
Parameter | agent_group |
Description | Name of the Aperture Agent group. |
Type | string |
Default Value | default |
Parameter | databases |
Description | The list of databases for which the receiver will attempt to collect statistics. |
Type | Array of string |
Default Value |
|
Parameter | endpoint |
Description | Endpoint of the PostgreSQL. |
Type | string |
Default Value | __REQUIRED_FIELD__ |
Parameter | initial_delay |
Description | Defines how long this receiver waits before starting. |
Type | string |
Default Value |
|
Parameter | password |
Description | Password of the PostgreSQL. |
Type | string |
Default Value | __REQUIRED_FIELD__ |
Parameter | transport |
Description | The transport protocol being used to connect to postgresql. Available options are tcp and unix. |
Type | string |
Default Value |
|
Parameter | username |
Description | Username of the PostgreSQL. |
Type | string |
Default Value | __REQUIRED_FIELD__ |
tls
Parameter | ca_file |
Description | A set of certificate authorities used to validate the database server SSL certificate. |
Type | string |
Default Value |
|
Parameter | cert_file |
Description | A cerficate used for client authentication, if necessary. |
Type | string |
Default Value |
|
Parameter | insecure |
Description | Whether to enable client transport security for the postgresql connection. |
Type | Boolean |
Default Value |
|
Parameter | insecure_skip_verify |
Description | Whether to validate server name and certificate if client transport security is enabled. |
Type | Boolean |
Default Value |
|
Parameter | key_file |
Description | An SSL key used for client authentication, if necessary. |
Type | string |
Default Value |
|
Dynamic Configuration
The following configuration parameters can be dynamically configured at runtime, without reloading the policy.
Parameters
Parameter | dry_run |
Description | Dynamic configuration for setting dry run mode at runtime without restarting this policy. In dry run mode the scheduler acts as pass through to all flow and does not queue flows. It is useful for observing the behavior of load scheduler without disrupting any real traffic. |
Type | Boolean |
Default Value | __REQUIRED_FIELD__ |