Graceful shutdown drains existing connections from Envoy Proxy instances before termination. This prevents connection drops during pod rollouts, scaling events, and cluster upgrades.
Without graceful shutdown, when an Envoy pod terminates:
With graceful shutdown enabled (default), the shutdown manager sidecar intercepts SIGTERM signals and runs a controlled drain process so existing connections can 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