Graceful shutdown ensures Envoy proxy instances drain existing connections before terminating, preventing connection drops during pod rollouts, scaling events, or cluster upgrades.
Without graceful shutdown, when an Envoy pod terminates:
With graceful shutdown enabled (default), the shutdown manager sidecar intercepts SIGTERM signals and orchestrates a controlled drain process, allowing existing connections to complete.
Configure graceful shutdown in the Config CRD under spec.envoyProxy.gracefulShutdown:
apiVersion: kubelb.k8c.io/v1alpha1
kind: Config
metadata:
name: default
namespace: kubelb
spec:
envoyProxy:
gracefulShutdown:
disabled: false
drainTimeout: 60s
minDrainDuration: 5s
terminationGracePeriodSeconds: 300
| Field | Type | Default | Description |
|---|---|---|---|
disabled |
bool | false |
Set to true to disable graceful shutdown |
drainTimeout |
duration | 60s |
Maximum time to drain connections before forced termination |
minDrainDuration |
duration | 5s |
Minimum time to wait during drain, even if no connections |
terminationGracePeriodSeconds |
int64 | 300 |
Pod termination grace period in seconds |
shutdownManagerImage |
string | (built-in) | Custom shutdown manager container image |
drainTimeout or when all connections close (whichever comes first), Envoy terminatesminDrainDuration ensures a minimum drain window for late-arriving requestsFor environments with long-lived connections or high traffic:
apiVersion: kubelb.k8c.io/v1alpha1
kind: Config
metadata:
name: default
namespace: kubelb
spec:
envoyProxy:
gracefulShutdown:
drainTimeout: 120s
minDrainDuration: 10s
terminationGracePeriodSeconds: 180
For development environments where fast restarts are preferred:
apiVersion: kubelb.k8c.io/v1alpha1
kind: Config
metadata:
name: default
namespace: kubelb
spec:
envoyProxy:
gracefulShutdown:
disabled: true