Restarter

The Stackable Commons Operator can automatically restart Pod objects based on certain criteria. This can be applied to either the Pod or certain controller objects (such as StatefulSet).

Pod

Pods are evicted when any of their restart criteria (listed below) expire, with the expectation that their owning controller is then responsible for restarting them.

Because they are evicted rather than deleted, this process should respect PodDisruptionBudget constraints, allowing users to ensure that clusters are restarted gracefully.

Expiration date

Annotation

restarter.stackable.tech/expires-at.{tag}

Pods can be configured to expire at a certain point in time. In this case, the Pod should have the annotation restarter.stackable.tech/expires-at.{tag} set to a datetime formatted according to RFC 3339 (such as "2022-04-21T13:24:15.225774724+00:00"). {tag} should be a deterministic but unique ID identifying the reason for the expiry.

Multiple expires-at annotations can be set on the same Pod, in which case the earliest expiration datetime takes precedence.

StatefulSet

StatefulSets are rolling-restarted when any of their restart criteria (listed below) expire.

Stale configuration

Label

restarter.stackable.tech/enabled

The operator can restart StatefulSets when any referenced configuration object (ConfigMap or Secret) changes. To enable this, set the restarter.stackable.tech/enabled label on the StatefulSet to true.

Annotation

restarter.stackable.tech/ignore-configmap.*

Annotation

restarter.stackable.tech/ignore-secret.*

These annotations can be added if the restarter is enabled on a StatefulSet, but some ConfigMaps or Secrets should be excluded from triggering a restart. * can be replaced with any value and is only used to make the annotation key unique.

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-with-enabled-restarter
  labels:
    restarter.stackable.tech/enabled: "true"
  annotations:
    restarter.stackable.tech/ignore-configmap.0: hot-reloaded-configmap
    restarter.stackable.tech/ignore-secret.0: hot-reloaded-secret
spec:
  template:
    spec:
      volumes:
        - name: configuration
          configMap:
            name: hot-reloaded-configmap
        - name: credentials
          secret:
            secretName: hot-reloaded-secret
...

ConfigMap/Secret

Label

restarter.stackable.tech/ignore

If a ConfigMap or Secret is only used for initializing a StatefulSet or contains data which can be hot-reloaded, add the label restarter.stackable.tech/ignore: "true" to avoid unnecessary restarts of the StatefulSet Pods:

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: hot-reloaded-configmap
  labels:
    restarter.stackable.tech/ignore: "true"
...
---
apiVersion: v1
kind: Secret
metadata:
  name: hot-reloaded-secret
  labels:
    restarter.stackable.tech/ignore: "true"
...

Unlike the StatefulSet annotations restarter.stackable.tech/ignore-configmap.* and restarter.stackable.tech/ignore-secret.*, this label affects every StatefulSet that references the labeled ConfigMaps or Secrets.