> ## Documentation Index
> Fetch the complete documentation index at: https://docs.restate.dev/llms.txt
> Use this file to discover all available pages before exploring further.

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.restate.dev/feedback

```json
{
  "path": "/changelog/operator",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Kubernetes Operator changelog

> Releases of the Kubernetes Operator.

<Update label="2026-04-17" description="Kubernetes Operator v2.5.1">
  ### Restate Operator v2.5.1 Release Notes

  ### Highlights

  * **Fix: Knative deployments now work with Restate Cloud** — The Knative reconciler was passing raw in-cluster Route URLs to the Restate admin API, which Restate Cloud cannot reach. Service URLs are now routed through the cloud tunnel, matching the existing ReplicaSet behavior.

  ### Bug Fixes

  ### Knative service URLs not tunneled for Restate Cloud

  When using RestateDeployment in Knative mode with a Restate Cloud endpoint
  (`spec.restate.register.cloud`), the operator passed the in-cluster Knative
  Route URL directly to `register_service_with_restate`. Restate Cloud cannot
  reach in-cluster URLs, so registration failed and the operator looped
  indefinitely.

  The fix extracts a `maybe_tunnel_url()` method from `RestateAdminEndpoint` and
  calls it in the Knative reconciler after resolving the Route URL, matching how
  the ReplicaSet reconciler already handled this case.

  **Impact on Users:**

  * **Knative + Restate Cloud deployments**: This was broken; it now works.
  * **Knative + non-Cloud deployments**: No change; `maybe_tunnel_url` is a no-op
    when `cloud` is not set.
  * **ReplicaSet deployments**: No change. The internal refactoring of
    `service_url_for_deployment()` is equivalent to the previous behavior.

  *Related: Issue [#120](https://github.com/restatedev/restate-operator/issues/120), PR [#122](https://github.com/restatedev/restate-operator/pull/122)*

  ***

  ### Upgrading

  No CRD changes in this release. Upgrade the operator via Helm:

  ```bash theme={null}
  helm upgrade restate-operator restatedev/restate-operator --version 2.5.1
  ```

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.5.1)
</Update>

<Update label="2026-04-17" description="Kubernetes Operator v2.5.0">
  ### Restate Operator v2.5.0 Release Notes

  ### Highlights

  * **Custom pod annotations and labels** — RestateCluster now supports `spec.compute.annotations` and `spec.compute.labels`, enabling integrations that require pod-level metadata (GKE ComputeClass, Vault agent injection, Prometheus scraping, etc.).
  * **Default canary image changed to `alpine:3.21`** — Fixes `trustedCaCerts` (introduced in v2.4.0), which required a CA bundle that the previous `busybox:uclibc` default did not ship.
  * **Default tunnel client image bumped to `0.6.0`** — Picks up the latest restate-cloud-tunnel-client release for new RestateCloudEnvironment deployments.

  ### New Features

  ### Custom pod annotations and labels

  Added `spec.compute.annotations` and `spec.compute.labels` to the RestateCluster
  CRD. Both fields are propagated to the Restate StatefulSet pod template.

  User-specified annotations and labels are merged with any the operator sets
  internally (e.g. for Workload Identity, trusted CA certs). In case of conflict,
  operator-managed values take precedence.

  This unblocks integrations that rely on pod-level metadata, including GKE
  ComputeClass scheduling (`cloud.google.com/compute-class`), Vault agent
  injection, Datadog, Prometheus scraping, and custom scheduling constraints.

  **Impact on Users:**

  * Existing deployments: No impact, both fields are optional.
  * New deployments: Can now set annotations and labels for integrations that
    require them on the pod template.

  **Usage:**

  ```yaml theme={null}
  spec:
    compute:
      annotations:
        cloud.google.com/compute-class: "restate-workload"
      labels:
        team: "platform"
  ```

  *Related: Issue [#45](https://github.com/restatedev/restate-operator/issues/45), PR [#119](https://github.com/restatedev/restate-operator/pull/119)*

  ***

  ### Bug Fixes

  ### Default canary image now ships a CA bundle

  The default `canaryImage` has changed from `busybox:uclibc` to `alpine:3.21`.

  The `trustedCaCerts` feature added in v2.4.0 uses an init container (the canary
  image) to concatenate system CA certificates with custom trusted CAs. The init
  container reads the system CA bundle from `/etc/ssl/certs/ca-certificates.crt`,
  but `busybox:uclibc` does not ship a CA bundle at that path, causing the init
  container to fail with:

  ```
  cat: can't open '/etc/ssl/certs/ca-certificates.crt': No such file or directory
  ```

  This made `trustedCaCerts` non-functional with the default canary image.

  **Impact on Users:**

  * **Existing deployments using `trustedCaCerts`**: Will work after upgrading. If
    you previously worked around this by setting `canaryImage` to an image with a
    CA bundle, you can remove that override.
  * **Existing deployments not using `trustedCaCerts`**: No impact. The canary
    image is also used for Pod Identity and Workload Identity canary jobs, which
    do not depend on the CA bundle and will continue to work with `alpine:3.21`.
  * **Custom `canaryImage` overrides**: If you use a custom canary image, ensure
    it includes a CA bundle at `/etc/ssl/certs/ca-certificates.crt` if you plan to
    use `trustedCaCerts`.

  **Migration Guidance:**
  No action required. The default will change automatically on upgrade.

  If you override `canaryImage` in your Helm values and want to use
  `trustedCaCerts`, ensure your image includes a CA certificate bundle:

  ```yaml theme={null}
  # Image must have /etc/ssl/certs/ca-certificates.crt and provide cat, grep, wget
  canaryImage: my-registry.example.com/alpine:3.21
  ```

  *Related: PR [#116](https://github.com/restatedev/restate-operator/pull/116)*

  ***

  ### Improvements

  ### Default tunnel client image bumped to 0.6.0

  The default `tunnelClientDefaultImage` has been updated from
  `ghcr.io/restatedev/restate-cloud-tunnel-client:0.5.0` to `0.6.0`. This applies
  to new RestateCloudEnvironment deployments that don't explicitly override the
  tunnel client image.

  **Impact on Users:**

  * Existing deployments pinning their own tunnel client image: no impact.
  * Deployments relying on the operator default: will pick up `0.6.0` on the next
    reconcile after upgrade.

  Override via the `--tunnel-client-default-image` CLI flag or the
  `OPERATOR_TUNNEL_CLIENT_DEFAULT_IMAGE` environment variable (settable through
  the chart's generic `env` value) if you need to pin a specific version.

  *Related: PR [#118](https://github.com/restatedev/restate-operator/pull/118)*

  ***

  ### Upgrading

  **CRD Update Required**: Helm does not automatically upgrade CRDs. After
  upgrading the operator, you **must** manually apply the updated CRDs:

  ```bash theme={null}
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.5.0/restateclusters.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.5.0/restatedeployments.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.5.0/restatecloudenvironments.yaml
  ```

  Then upgrade the operator via Helm:

  ```bash theme={null}
  helm upgrade restate-operator restatedev/restate-operator --version 2.5.0
  ```

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.5.0)
</Update>

<Update label="2026-03-30" description="Kubernetes Operator v2.4.0">
  ### Restate Operator v2.4.0 Release Notes

  ### Highlights

  * **Trusted CA certificates** - RestateCluster now supports custom trusted CA certificates via `spec.security.trustedCaCerts`, removing the need for custom Restate images when using internal CAs.
  * **Configurable canary image** - The canary job image is now configurable via Helm, supporting air-gapped and restricted registry environments.
  * **IPv6 support** - The operator now binds to a dual-stack address, fixing readiness probe failures on IPv6-only clusters.
  * **Faster drain cleanup** - Old deployment versions are now polled every 10 seconds during drain, instead of waiting up to 5 minutes.

  ### New Features

  ### Trusted CA certificates

  You can now configure custom trusted CA certificates for RestateCluster via
  `spec.security.trustedCaCerts`. This is useful when Restate needs to trust internal CAs, for example when
  calling services behind an internal load balancer with a private certificate.

  The operator adds an init container that concatenates the system CA bundle with
  your custom certificates into a single PEM file, and sets `SSL_CERT_FILE` on
  the Restate container to point to the combined bundle.

  Changing the Secret references (name or key) triggers a pod rollout.

  ```yaml theme={null}
  spec:
    security:
      trustedCaCerts:
        - secretName: internal-ca
          key: ca.pem
  ```

  *Related: PR [#111](https://github.com/restatedev/restate-operator/pull/111)*

  ***

  ### Configurable canary image

  The container image used for PIA and Workload Identity canary jobs is now
  configurable via the `canaryImage` Helm value, `CANARY_IMAGE` environment
  variable, or `--canary-image` CLI flag. Previously `busybox:uclibc` was
  hardcoded, which fails in environments that cannot pull from Docker Hub.

  ```yaml theme={null}
  canaryImage: my-registry.example.com/busybox:uclibc
  ```

  The simplest approach is to mirror the default image:

  ```bash theme={null}
  docker pull busybox:uclibc
  docker tag busybox:uclibc my-registry.example.com/busybox:uclibc
  docker push my-registry.example.com/busybox:uclibc
  ```

  If using a different image, it must provide `cat`, `grep`, and `wget`.

  *Related: Issue [#94](https://github.com/restatedev/restate-operator/issues/94), PR [#106](https://github.com/restatedev/restate-operator/pull/106)*

  ***

  ### Bug Fixes

  ### IPv6 dual-stack support

  The operator now binds its HTTP server to `[::]` instead of `0.0.0.0`,
  supporting both IPv4 and IPv6 clusters. Previously, the readiness probe
  failed on IPv6-only clusters because the operator only listened on IPv4.

  *Related: Issue [#93](https://github.com/restatedev/restate-operator/issues/93), PR [#107](https://github.com/restatedev/restate-operator/pull/107)*

  ***

  ### Faster drain cleanup polling

  When old deployment versions still have active invocations (draining), the
  operator now requeues every 10 seconds instead of waiting for the default
  5-minute reconcile interval. This means old versions are cleaned up within
  seconds of drain completion rather than up to 5 minutes.

  *Related: PR [#112](https://github.com/restatedev/restate-operator/pull/112)*

  ***

  ### Upgrading

  **CRD Update Required**: Helm does not automatically upgrade CRDs. After
  upgrading the operator, you **must** manually apply the updated CRDs:

  ```bash theme={null}
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.4.0/restateclusters.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.4.0/restatedeployments.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.4.0/restatecloudenvironments.yaml
  ```

  Then upgrade the operator via Helm:

  ```bash theme={null}
  helm upgrade restate-operator restatedev/restate-operator --version 2.4.0
  ```

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.4.0)
</Update>

<Update label="2026-03-20" description="Kubernetes Operator v2.3.1">
  ### Restate Operator v2.3.1 Release Notes

  This contains an important fix for a bug introduced v2.3.0. If you're using v2.3.0 you will need to upgrade to this version.

  ### Highlights

  * **Fix**: GCP Workload Identity now requires explicit opt-in via `gcpWorkloadIdentity: true` Helm value, fixing a 403 error loop on non-GCP clusters introduced in v2.3.0.

  ### Bug Fixes

  ### IAMPolicyMember cleanup causes 403 on non-GCP clusters

  In v2.3.0, the operator unconditionally attempted to delete IAMPolicyMember
  resources during reconciliation, even on non-GCP clusters where the RBAC rules
  were not granted. This caused a 403 Forbidden error loop on every reconcile.

  The operator now requires the `gcpWorkloadIdentity` Helm value to be explicitly
  set before it will create or delete IAMPolicyMember resources. The
  `iam.gke.io/gcp-service-account` annotation is ignored with a warning unless
  the flag is enabled.

  **Impact on Users:**

  * **Non-GCP clusters**: The 403 reconcile loop is fixed. No action needed.
  * **GCP clusters using Workload Identity**: You must now set
    `gcpWorkloadIdentity: true` in your Helm values.

  **Migration Guidance:**

  If you are using GCP Workload Identity with Config Connector, add to your Helm
  values:

  ```yaml theme={null}
  gcpWorkloadIdentity: true
  ```

  *Related: Issue [#103](https://github.com/restatedev/restate-operator/issues/103), PR [#104](https://github.com/restatedev/restate-operator/pull/104)*

  ***

  ### Upgrading

  Upgrade the operator via Helm:

  ```bash theme={null}
  helm upgrade restate-operator restatedev/restate-operator --version 2.3.1
  ```

  No CRD changes in this release.

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.3.1)
</Update>

<Update label="2026-03-19" description="Kubernetes Operator v2.3.0">
  ### Restate Operator v2.3.0

  ### ✨ New Features

  * **GCP Workload Identity via Config Connector** — The operator now automatically creates `IAMPolicyMember` resources to bind Kubernetes service accounts to GCP service accounts via Workload Identity. This is triggered when a RestateCluster has `iam.gke.io/gcp-service-account` in `serviceAccountAnnotations`. The GCP project ID is extracted from the service account email, so no additional configuration is needed beyond the annotation. A canary job validates that credentials are available before the StatefulSet proceeds. This mirrors the existing AWS Pod Identity Association pattern and requires Config Connector to be installed on the GKE cluster.

  * **Configurable cluster DNS suffix** — The operator now supports configuring the Kubernetes cluster DNS suffix via the `--cluster-dns` CLI flag, `CLUSTER_DNS` environment variable, or Helm `clusterDns` value. Previously `cluster.local` was hardcoded in all internal service URLs. This is needed for multi-cluster setups, federated environments, and clusters with custom DNS naming.

  * **Configurable drain delay** — Added `drainDelaySeconds` to the RestateDeployment CRD's `spec.restate` section. This controls how long the operator waits after a deployment is drained before removing the old version. Default remains 300 seconds (5 minutes). ([https://github.com/restatedev/restate-operator/pull/96](https://github.com/restatedev/restate-operator/pull/96))

  ### 🐛 Bug Fixes

  * **Improved admin API error messages** — When a deployment registration is rejected by the admin API (e.g. breaking changes without `--force`), the error message now includes the response from Restate and is logged and emitted as a Kubernetes event, making failures much easier to diagnose. ([#100](https://github.com/restatedev/restate-operator/pull/100))

  * **Fixed canary job completion detection** — Fixed a bug where a completed canary job was treated as still pending, causing the operator to loop indefinitely with a `NotReady` status condition. ([#102](https://github.com/restatedev/restate-operator/pull/102))

  ### ⚙️ Configuration Changes

  * New Helm value `clusterDns` for configuring the cluster DNS suffix (default: `cluster.local`)
  * Conditional RBAC for `IAMPolicyMember` CRDs when GCP Workload Identity is enabled

  ***

  ### ⚠️ Upgrading Notes

  **CRD Update Required**: Helm does not automatically upgrade CRDs. After upgrading the operator, you **must** manually apply the updated CRDs:

  ```bash theme={null}
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.3.0/restateclusters.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.3.0/restatedeployments.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.3.0/restatecloudenvironments.yaml
  ```

  Then upgrade the operator via Helm:

  ```bash theme={null}
  helm upgrade restate-operator restatedev/restate-operator --version 2.3.0
  ```

  ***

  **Full release notes**: [`release-notes/v2.3.0.md`](https://github.com/restatedev/restate-operator/blob/main/release-notes/v2.3.0.md)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.3.0)
</Update>

<Update label="2026-02-12" description="Kubernetes Operator v2.2.0">
  ### Restate Operator v2.2.0

  ### ✨ New Features

  * **Knative Serving deployment mode** — `RestateDeployment` now supports [Knative Serving](https://knative.dev/docs/serving/) as an alternative to traditional ReplicaSets. This enables:

    * **Scale-to-zero**: Services automatically scale down when idle, saving resources
    * **Automatic scaling**: Replicas scale based on concurrent request load
    * **In-place updates**: Update service implementation without changing Restate deployment identity
    * **Tag-based identity**: Control versioning behavior with the `tag` field — same tag means in-place update, changed tag means versioned update, no tag means auto-versioning

    See the [Knative Serving Mode documentation](https://github.com/restatedev/restate-operator#knative-serving-mode) for details. ([https://github.com/restatedev/restate-operator/pull/64](https://github.com/restatedev/restate-operator/pull/64))

  ### 🐛 Bug Fixes

  * **Fix DNS network policy for NodeLocal DNSCache** — The operator now creates DNS egress policies that work with both traditional kube-dns **and** NodeLocal DNSCache (`169.254.20.10`). This fixes DNS resolution issues on GKE Autopilot and other Kubernetes environments using node-local DNS caching. ([https://github.com/restatedev/restate-operator/pull/88](https://github.com/restatedev/restate-operator/pull/88))

  ### ⚙️ Configuration Changes

  * **Default partitions increased to 24** — The default number of partitions is now 24 (previously lower), providing better parallelism for most workloads. ([https://github.com/restatedev/restate-operator/pull/84](https://github.com/restatedev/restate-operator/pull/84))

  ### 📝 Documentation

  * Added dedicated Knative Serving mode section to README with examples and tag-based versioning guide
  * Added troubleshooting section for DNS resolution issues
  * Updated RocksDB memory documentation ([https://github.com/restatedev/restate-operator/pull/82](https://github.com/restatedev/restate-operator/pull/82))

  ***

  ### ⚠️ Upgrading Notes

  **CRD Update Required**: Helm does not automatically upgrade CRDs. After upgrading the operator, you **must** manually apply the updated CRDs:

  ```bash theme={null}
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.2.0/restateclusters.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.2.0/restatedeployments.yaml
  kubectl apply --server-side -f https://github.com/restatedev/restate-operator/releases/download/v2.2.0/restatecloudenvironments.yaml
  ```

  > **Note:** The `restatedeployments` CRD update is especially important for this release as it includes the new Knative Serving deployment mode fields.

  Then upgrade the operator via Helm:

  ```bash theme={null}
  helm upgrade restate-operator restatedev/restate-operator --version 2.2.0
  ```

  ***

  ### New Contributors

  * @AhmedSoliman made their first contribution in [https://github.com/restatedev/restate-operator/pull/82](https://github.com/restatedev/restate-operator/pull/82)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.2.0)
</Update>

<Update label="2026-01-12" description="Kubernetes Operator v2.1.0">
  ### ✨ New Features

  * **Operator-driven cluster provisioning** - Added support for automatic cluster provisioning via the new `spec.cluster.autoProvision` field. When enabled, the operator will automatically provision the Restate cluster by calling the gRPC `ProvisionCluster` API after pods are running. This is particularly useful for multi-node clusters where manual provisioning was previously required. The provisioning status is tracked in `status.provisioned` to prevent repeated provisioning attempts. (#55)

    > ⚠️ **Important**: When using `cluster.autoProvision: true`, you must set `auto-provision = false` in your Restate config to avoid split brain situations.

    🎯 **`cluster.autoProvision: true` is the recommended approach for provisioning Restate clusters.**

  ### 🔧 Improvements

  * Simplified example configurations by removing default values that are no longer needed (replicated loglet and replicated metadata server are now defaults)

  ### 🏗️ CRD Changes

  * Added `spec.cluster.autoProvision` field to enable operator-managed cluster provisioning
  * Added `status.provisioned` field to track provisioning state

  ### ⬆️ Upgrading

  **CRD Update Required**: Helm does not automatically upgrade CRDs. After upgrading the operator, you must manually apply the new CRDs:

  ```
  kubectl apply -f https://github.com/restatedev/restate-operator/releases/download/v2.1.0/restateclusters.yaml
  kubectl apply -f https://github.com/restatedev/restate-operator/releases/download/v2.1.0/restatedeployments.yaml
  kubectl apply -f https://github.com/restatedev/restate-operator/releases/download/v2.1.0/restatecloudenvironments.yaml
  ```

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.1.0)
</Update>

<Update label="2026-01-05" description="Kubernetes Operator v2.0.0">
  ### What's Changed

  * Update default tunnel client version by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/81](https://github.com/restatedev/restate-operator/pull/81)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v2.0.0)
</Update>

<Update label="2025-12-15" description="Kubernetes Operator v1.9.2">
  ### What's Changed

  * Avoid reconcile loop in netpol peer list by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/73](https://github.com/restatedev/restate-operator/pull/73)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.9.2)
</Update>

<Update label="2025-12-05" description="Kubernetes Operator v1.9.1">
  ### What's Changed

  * Ignore completed invs when determining active invocations by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/71](https://github.com/restatedev/restate-operator/pull/71)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.9.1)
</Update>

<Update label="2025-11-28" description="Kubernetes Operator v1.9.0">
  ### What's Changed

  * \[Security] Update assorted dependencies by @pcholakov in [https://github.com/restatedev/restate-operator/pull/69](https://github.com/restatedev/restate-operator/pull/69)
  * Support existing namespaces by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/70](https://github.com/restatedev/restate-operator/pull/70)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.9.0)
</Update>

<Update label="2025-11-25" description="Kubernetes Operator v1.8.4">
  ### What's Changed

  * Add priorityClassName to restatecluster by @pcholakov in [https://github.com/restatedev/restate-operator/pull/63](https://github.com/restatedev/restate-operator/pull/63)
  * Release v1.8.4 by @pcholakov in [https://github.com/restatedev/restate-operator/pull/66](https://github.com/restatedev/restate-operator/pull/66)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.8.4)
</Update>

<Update label="2025-11-18" description="Kubernetes Operator v1.8.3">
  ### What's Changed

  * Add service path parameter by @krisztiansala in [https://github.com/restatedev/restate-operator/pull/56](https://github.com/restatedev/restate-operator/pull/56)
  * feat: Add topology spread constraints support to RestateCluster by @EronWright in [https://github.com/restatedev/restate-operator/pull/60](https://github.com/restatedev/restate-operator/pull/60)
  * Delete jobs on immutable conflict by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/61](https://github.com/restatedev/restate-operator/pull/61)
  * Release v1.8.3 by @pcholakov in [https://github.com/restatedev/restate-operator/pull/62](https://github.com/restatedev/restate-operator/pull/62)

  ### New Contributors

  * @EronWright made their first contribution in [https://github.com/restatedev/restate-operator/pull/60](https://github.com/restatedev/restate-operator/pull/60)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.8.3)
</Update>

<Update label="2025-11-05" description="Kubernetes Operator v1.8.2">
  ### What's Changed

  * Allow cleaning up old replicasets while the new one is not ready by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/59](https://github.com/restatedev/restate-operator/pull/59)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.8.2)
</Update>

<Update label="2025-10-14" description="Kubernetes Operator v1.7.5">
  ### What's Changed

  * Support registering at a subpath by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/37](https://github.com/restatedev/restate-operator/pull/37)
  * Allow setting the http1.1 flag from the restate operator by @damianr13 in [https://github.com/restatedev/restate-operator/pull/38](https://github.com/restatedev/restate-operator/pull/38)
  * Fix cleanup replicasets to only look at those in this ns by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/41](https://github.com/restatedev/restate-operator/pull/41)
  * Add RestateCluster compute spec imagePullSecrets property by @pcholakov in [https://github.com/restatedev/restate-operator/pull/39](https://github.com/restatedev/restate-operator/pull/39)
  * Add volumeAttributesClassName by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/42](https://github.com/restatedev/restate-operator/pull/42)
  * Add support for custom restate entrypoint/args by @pcholakov in [https://github.com/restatedev/restate-operator/pull/43](https://github.com/restatedev/restate-operator/pull/43)

  ### New Contributors

  * @damianr13 made their first contribution in [https://github.com/restatedev/restate-operator/pull/38](https://github.com/restatedev/restate-operator/pull/38)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.7.5)
</Update>

<Update label="2025-10-14" description="Kubernetes Operator v1.8.1">
  ### What's Changed

  * fix: Honor use\_http11 flag by @krisztiansala in [https://github.com/restatedev/restate-operator/pull/52](https://github.com/restatedev/restate-operator/pull/52)
  * fix: Add restatecloudenvironment crd to the helm chart

  ### New Contributors

  * @krisztiansala made their first contribution in [https://github.com/restatedev/restate-operator/pull/52](https://github.com/restatedev/restate-operator/pull/52)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.8.1)
</Update>

<Update label="2025-09-26" description="Kubernetes Operator v1.8.0">
  This release introduces a new crd (restatecloudenvironment). Helm won’t install new crds when upgrading so if you update you’ll need to install the new crd, which is attached to this release.

  ### What's Changed

  * Add initial readiness delay by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/44](https://github.com/restatedev/restate-operator/pull/44)
  * Add RestateCloudEnvironment by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/40](https://github.com/restatedev/restate-operator/pull/40)
  * Don't propagate last applied configuration annotation by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/46](https://github.com/restatedev/restate-operator/pull/46)
  * Add warnings about minio by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/47](https://github.com/restatedev/restate-operator/pull/47)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.8.0)
</Update>

<Update label="2025-07-24" description="Kubernetes Operator v1.7.4">
  ### What's Changed

  * Fix: add missing patch events to RBAC config by @2snEM6 in [https://github.com/restatedev/restate-operator/pull/35](https://github.com/restatedev/restate-operator/pull/35)

  ### New Contributors

  * @2snEM6 made their first contribution in [https://github.com/restatedev/restate-operator/pull/35](https://github.com/restatedev/restate-operator/pull/35)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.7.4)
</Update>

<Update label="2025-07-17" description="Kubernetes Operator v1.7.3">
  ### What's Changed

  * Document all of operator CRD by @haf in [https://github.com/restatedev/restate-operator/pull/30](https://github.com/restatedev/restate-operator/pull/30)
  * Split out minio docs and document network isolation by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/33](https://github.com/restatedev/restate-operator/pull/33)

  ### New Contributors

  * @haf made their first contribution in [https://github.com/restatedev/restate-operator/pull/30](https://github.com/restatedev/restate-operator/pull/30)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.7.3)
</Update>

<Update label="2025-06-17" description="Kubernetes Operator v1.7.2">
  ### What's Changed

  * Netpol fixes by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/28](https://github.com/restatedev/restate-operator/pull/28)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.7.2)
</Update>

<Update label="2025-06-16" description="Kubernetes Operator v1.7.1">
  Fixes network policy enforcement for distributed clusters

  See the [release notes for 1.6.0](https://github.com/restatedev/restate-operator/releases/tag/v1.6.0) if you're upgrading from a pre 1.6.0 version.

  ### What's Changed

  * Allow restate clusters to talk to themselves by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/26](https://github.com/restatedev/restate-operator/pull/26)
  * Document cluster better by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/27](https://github.com/restatedev/restate-operator/pull/27)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.7.1)
</Update>

<Update label="2025-06-11" description="Kubernetes Operator v1.7.0">
  This release adds PodDisruptionBudgets for clusters, and a new CRD, RestateDeployment, which manages versioning for your Restate SDK services automatically.

  See the [release notes for 1.6.0](https://github.com/restatedev/restate-operator/releases/tag/v1.6.0) if you're upgrading from a pre 1.6.0 version.

  ### What's Changed

  * Add RestateDeployment v1beta1 crd by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/20](https://github.com/restatedev/restate-operator/pull/20)
  * Create pdb for clusters by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/25](https://github.com/restatedev/restate-operator/pull/25)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.7.0)
</Update>

<Update label="2025-05-22" description="Kubernetes Operator v1.6.0">
  When upgrading to v1.6.0, you may need to delete the operator-managed StatefulSets so that the operator can recreate them with the new pod management policy, as Kubernetes enforces this as an immutable field. You can do this with `kubectl -n your-restate-namespace delete statefulset restate --cascade=orphan`, without causing any interruption to your cluster.

  ### What's Changed

  * Set RESTATE\_NODE\_NAME to POD\_NAME by default by @tillrohrmann in [https://github.com/restatedev/restate-operator/pull/21](https://github.com/restatedev/restate-operator/pull/21)
  * Set pod management policy to parallel by @tillrohrmann in [https://github.com/restatedev/restate-operator/pull/23](https://github.com/restatedev/restate-operator/pull/23)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.6.0)
</Update>

<Update label="2025-05-07" description="Kubernetes Operator v1.5.0">
  ### What's Changed

  * Add CLA automation by @tillrohrmann in [https://github.com/restatedev/restate-operator/pull/18](https://github.com/restatedev/restate-operator/pull/18)
  * Make it easier to run a multinode cluster with the operator by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/19](https://github.com/restatedev/restate-operator/pull/19)

  ### New Contributors

  * @tillrohrmann made their first contribution in [https://github.com/restatedev/restate-operator/pull/18](https://github.com/restatedev/restate-operator/pull/18)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.5.0)
</Update>

<Update label="2025-05-07" description="Kubernetes Operator v1.4.0">
  ### What's Changed

  * Added affinity to restate operator by @kumorikarasu in [https://github.com/restatedev/restate-operator/pull/17](https://github.com/restatedev/restate-operator/pull/17)

  ### New Contributors

  * @kumorikarasu made their first contribution in [https://github.com/restatedev/restate-operator/pull/17](https://github.com/restatedev/restate-operator/pull/17)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.4.0)
</Update>

<Update label="2025-02-25" description="Kubernetes Operator v1.3.0">
  ### What's Changed

  * Fix papercuts by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/16](https://github.com/restatedev/restate-operator/pull/16)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.3.0)
</Update>

<Update label="2024-12-11" description="Kubernetes Operator v1.2.0">
  ### What's Changed

  * Use predicates to dedupe changes to cm, svc, ss, job by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/13](https://github.com/restatedev/restate-operator/pull/13)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.2.0)
</Update>

<Update label="2024-12-03" description="Kubernetes Operator v1.1.1">
  Avoid spurious updates from namespaces and service accounts

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.1.1)
</Update>

<Update label="2024-12-02" description="Kubernetes Operator v1.1.0">
  ### What's Changed

  * Node selector support by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/12](https://github.com/restatedev/restate-operator/pull/12)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.1.0)
</Update>

<Update label="2024-07-12" description="Kubernetes Operator v1.0.2">
  ### What's Changed

  * Add support for specifying restate pod tolerations by @pcholakov in [https://github.com/restatedev/restate-operator/pull/11](https://github.com/restatedev/restate-operator/pull/11)

  ### New Contributors

  * @pcholakov made their first contribution in [https://github.com/restatedev/restate-operator/pull/11](https://github.com/restatedev/restate-operator/pull/11)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.0.2)
</Update>

<Update label="2024-06-07" description="Kubernetes Operator v1.0.0">
  1.0 release coincides with the release of [Restate 1.0](https://github.com/restatedev/restate/releases/tag/v1.0.0)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v1.0.0)
</Update>

<Update label="2024-06-07" description="Kubernetes Operator v0.9.0">
  ### What's Changed

  * Add config file support by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/10](https://github.com/restatedev/restate-operator/pull/10)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.9.0)
</Update>

<Update label="2024-05-16" description="Kubernetes Operator v0.8.0">
  ### What's Changed

  * Bump rustls from 0.21.10 to 0.21.12 by @dependabot in [https://github.com/restatedev/restate-operator/pull/9](https://github.com/restatedev/restate-operator/pull/9)
  * Bump h2 from 0.3.24 to 0.3.26 by @dependabot in [https://github.com/restatedev/restate-operator/pull/8](https://github.com/restatedev/restate-operator/pull/8)
  * RUST\_LOG is no longer set to debug; uses Restate default of info. Set the environment variable in the RestateCluster object to override.

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.8.0)
</Update>

<Update label="2024-05-07" description="Kubernetes Operator v0.7.2">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.7.2)
</Update>

<Update label="2024-05-03" description="Kubernetes Operator v0.7.1">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.7.1)
</Update>

<Update label="2024-05-03" description="Kubernetes Operator v0.7.0">
  ### What's Changed

  * Canary pods need to be created via Jobs by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/7](https://github.com/restatedev/restate-operator/pull/7)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.7.0)
</Update>

<Update label="2024-04-30" description="Kubernetes Operator v0.6.1">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.6.1)
</Update>

<Update label="2024-04-24" description="Kubernetes Operator v0.6.0">
  ### What's Changed

  * Signing key integration by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/6](https://github.com/restatedev/restate-operator/pull/6)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.6.0)
</Update>

<Update label="2024-04-18" description="Kubernetes Operator v0.5.2">
  ### What's Changed

  * Avoid apply loops with predicate filters by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/5](https://github.com/restatedev/restate-operator/pull/5)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.5.2)
</Update>

<Update label="2024-04-16" description="Kubernetes Operator v0.5.0">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.5.0)
</Update>

<Update label="2024-04-16" description="Kubernetes Operator v0.4.3">
  ### What's Changed

  * Bump mio from 0.8.10 to 0.8.11 by @dependabot in [https://github.com/restatedev/restate-operator/pull/4](https://github.com/restatedev/restate-operator/pull/4)

  ### New Contributors

  * @dependabot made their first contribution in [https://github.com/restatedev/restate-operator/pull/4](https://github.com/restatedev/restate-operator/pull/4)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.4.3)
</Update>

<Update label="2024-03-13" description="Kubernetes Operator v0.4.2">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.4.2)
</Update>

<Update label="2024-03-08" description="Kubernetes Operator v0.4.1">
  ### What's Changed

  * Propagate labels and annotations into all created objects by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/3](https://github.com/restatedev/restate-operator/pull/3)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.4.1)
</Update>

<Update label="2024-03-08" description="Kubernetes Operator v0.4.0">
  ### What's Changed

  * SecurityGroupPolicy support by @jackkleeman in [https://github.com/restatedev/restate-operator/pull/2](https://github.com/restatedev/restate-operator/pull/2)

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.4.0)
</Update>

<Update label="2024-03-06" description="Kubernetes Operator v0.3.3">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.3.3)
</Update>

<Update label="2024-03-06" description="Kubernetes Operator v0.3.2">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.3.2)
</Update>

<Update label="2024-03-05" description="Kubernetes Operator v0.3.1">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.3.1)
</Update>

<Update label="2024-02-29" description="Kubernetes Operator v0.3.0">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.3.0)
</Update>

<Update label="2024-02-29" description="Kubernetes Operator v0.2.6">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.6)
</Update>

<Update label="2024-02-29" description="Kubernetes Operator v0.2.5">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.5)
</Update>

<Update label="2024-02-28" description="Kubernetes Operator v0.2.4">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.4)
</Update>

<Update label="2024-02-26" description="Kubernetes Operator v0.2.3">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.3)
</Update>

<Update label="2024-02-26" description="Kubernetes Operator v0.2.2">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.2)
</Update>

<Update label="2024-02-26" description="Kubernetes Operator v0.2.1">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.1)
</Update>

<Update label="2024-02-20" description="Kubernetes Operator v0.2.0">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.2.0)
</Update>

<Update label="2024-02-16" description="Kubernetes Operator v0.1.0">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.1.0)
</Update>

<Update label="2024-02-16" description="Kubernetes Operator v0.0.5">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.0.5)
</Update>

<Update label="2024-02-14" description="Kubernetes Operator v0.0.4">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.0.4)
</Update>

<Update label="2024-02-14" description="Kubernetes Operator v0.0.3">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.0.3)
</Update>

<Update label="2024-02-13" description="Kubernetes Operator v0.0.2">
  *No release notes provided.*

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.0.2)
</Update>

<Update label="2024-02-12" description="Kubernetes Operator v0.0.1">
  🚀

  [View on GitHub](https://github.com/restatedev/restate-operator/releases/tag/v0.0.1)
</Update>
