Disruption Window Controller
The Disruption Window Controller is a Panfactum-created addon that periodically enables voluntary disruptions by setting a PDB’s maxUnavailable field to a non-zero value and then subsequently disables voluntary disruptions after some time by setting maxUnavailable to 0. The period where disruptions are enabled is referred to as the disruption window.
There may be many instances of this submodule running in the cluster and each is namespace-scoped. For example, we make use of this submodule in our database modules (e.g., kube_pg_cluster).
The controller will search for all PDBs in its namespace with the label panfactum.com/voluntary-disruption-window-id set to the disruption_window_id output from this module. Disruption windows will begin at the times indicated by the cron_schedule module input.
Disruption windows may be configured via annotations on the PDBs:
panfactum.com/voluntary-disruption-window-seconds: The minimum number of seconds that the disruption window will last. The maximum amount of time will be this value plus an additional 900 seconds (15 minutes). Defaults to3600.panfactum.com/voluntary-disruption-window-max-unavailable: During the disruption window, the PDB’smaxUnavailablefield will be set to this value. Defaults to1.
Architecture
This addon is simply two CronJobs:
One runs on the
cron_scheduleand enables the disruption window by running the Panfactum CLI commandpf-voluntary-disruptions-enable.The other runs every 15 minutes and attempts to disable disruption windows that have exceeded a PDB’s
panfactum.com/voluntary-disruption-window-secondsannotation by running the Panfactum CLI commandpf-voluntary-disruptions-disable.
Providers
The following providers are needed by this module:
kubectl (2.1.3)
kubernetes (2.34.0)
random (3.6.3)
Required Inputs
The following input variables are required:
namespace
Description: The namespace the PDBs are in
Type: string
Optional Inputs
The following input variables are optional (have default values):
burstable_nodes_enabled
Description: Whether to allow pods to schedule on burstable nodes
Type: bool
Default: true
controller_nodes_enabled
Description: Whether to allow pods to schedule on EKS Node Group nodes (controller nodes)
Type: bool
Default: true
cron_schedule
Description: The times when disruption windows should start
Type: string
Default: "0 4 * * *"
panfactum_scheduler_enabled
Description: Whether to use the Panfactum pod scheduler with enhanced bin-packing
Type: bool
Default: true
pull_through_cache_enabled
Description: Whether to use the ECR pull through cache for the annotator images
Type: bool
Default: true
spot_nodes_enabled
Description: Whether to allow pods to schedule on spot nodes
Type: bool
Default: true
vpa_enabled
Description: Whether to enable the vertical pod autoscaler
Type: bool
Default: true
Outputs
The following outputs are exported:
disruption_window_id
Description: n/a